[笔记] 疯狂JAVA讲义(第3版) 第2章 理解面向对象

简介: [笔记] 疯狂JAVA讲义(第3版) 第2章 理解面向对象

概述

面向对象的概念,UML统一建模语言介绍,Java的面向对象特征。

第2章 理解面向对象

Java语言是纯粹的面向对象的程序设计语言,表现为Java支持面向对象的三种基本特征:继承、封装和多态。

Java语言以对象为中心,Java程序的最小单位是类。

2.1 面向对象

2.1.1 结构化程序设计简介

按功能来分析系统需求, 主要原则可概括为:自顶向下、逐步求精、模块化等。结构化程序设计首先采用结构化分析方法对系统需求分析,然后使用结构化设计方法对系统进行概要设计、详细设计,最后采用结构化变成方法实现系统。


结构化程序设计方法主张按功能将软件细分,所以这种方法也称为面向功能的程序设计方法; 结构化程序设计的每个功能都负责对数据进行一次处理,每个功能都接受一些数据,处理完输出一些数据,这种方式成为面向数据流的处理方式。


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LA10wS9r-1588291502787)(C:\Users\LF\AppData\Roaming\Typora\typora-user-images\1588291116099.png)]

结构化程序设计存在两个局限性:

设计不够直观;适应性差,可扩展性不强。

2.1.2 程序的三种基本结构

顺序、选择、循环

2.1.3 面向对象程序设计简介

基本思想是使用类、对象、继承、封装、消息等基本概念进行程序设计。它从现实世界中客观存在的事物出发来构造系统,并在系统构造中尽可能运用人类的思维方式,强调直接以显示世界中的事物为中心来思考。


采用面向对象方式开发的软件系统,其最小的程序单元是类,这些类可生成系统的多个对象,对象可表示现实的各种事物。

面向过程与面向对象:

对于中猪八戒吃西瓜这件事,

面向过程中,以函数为中心,会这样表达:吃(猪八戒,西瓜)

面向对象,以对象为中心,会这样表达: 猪八戒.吃(西瓜);

2.1.4 面向对象的基本特征

封装、继承和多态。

封装(Encapsulation):将对象的实现细节隐藏起来,然后用一些公开方法暴露对象的功能

继承(Inheritance):实现软件复用的重要手段,子类继承父类后,直接获得父类的属性和方法。

多态(Polymorphism):子类对象可以直接赋值给父类变量,运行时仍表现出子类的行为特征。这意味着,同一个类型的对象在执行同一个方法时,可能表现多种行为特征。

2.2 UML 统一建模语言 介绍

面向对象软件开发需要经过OOA(分析),OOD(设计),OOP(编程)三个阶段。

UML是一种用于描述、记录软件分析、设计的符号表示法。

UML一共包含13种图形。最常用的包括用例图、类图、组件图、部署图、顺序图、活动图和状态机图。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dqT0Zb76-1588291502789)(C:\Users\LF\AppData\Roaming\Typora\typora-user-images\1588291129733.png)]

2.2.1 用例图

系统功能的描述。

每个用例代表系统的一个功能模块。用例图的主要目的是以一种可视化的方式理解系统的需求功能,用例图对系统的实现不做说明,仅仅是系统功能的描述。

用例图包括用例(椭圆)、角色(Actor,与系统交互的其他实体,用人形符号表示)、角色与用例之间的关系(以简单的线段来表示),以及系统内用例之间的关系。


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HE2BWIsQ-1588291502792)(C:\Users\LF\AppData\Roaming\Typora\typora-user-images\1588291135932.png)]


用例图主要在需求分析阶段,主要用于描述系统实现的功能。

2.2.2 类图

类图表示系统中应该包含哪些实体,各实体之间如何联系;

换句话说,它显示了系统的静态结构,类图可用于表示逻辑类。

类在类图上使用包含三个部分的矩形来描述,最上面的部分显示类的名称,中间部分包含类的属性,最下面的部分包含类的方法。


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0of39iFv-1588291502797)(C:\Users\LF\AppData\Roaming\Typora\typora-user-images\1588291141978.png)]


类图除了可以表示实体的静态内部结构之外,还可以表示实体之间的相互联系。类之间有三种基本关系:

关联(包括聚合、组合)、泛化(继承)、依赖

1.关联

事物之间的联系,

关联使用一条实线表示,带箭头的实线表示单向关联。

关联关系包含两种特例:聚合和组合,他们都有部分和整体的关系,但认为组合比聚合更加严格。


某个实体聚合成一个实体时,还可以是另一个实体的部分。但某个实体组合成另一个实体时,不能是另一个实体的部分。( 聚合使用带空心菱形框的实线表示,组合使用带实心菱形框的实线表示。)


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uh8dBfXw-1588291502802)(C:\Users\LF\AppData\Roaming\Typora\typora-user-images\1588291146945.png)]


泛化


泛化与继承是同一个概念,都是指子类是一种特殊的父类,类与类之间的继承关系是非常普遍的,继承关系使用带空心三角形的实线表示。


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cIyAVBmV-1588291502804)(C:\Users\LF\AppData\Roaming\Typora\typora-user-images\1588291152819.png)]


还有一种特殊的继承:实现接口,用空心三角形的虚线表示。


3.依赖


如果一个类的改动会影响另一个类的改动,则称这两个类之间存在依赖。 依赖关系用带箭头的虚线表示,箭头指向被依赖的实体。


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k5OYZltL-1588291502805)(C:\Users\LF\AppData\Roaming\Typora\typora-user-images\1588291158958.png)]

2.2.3 组件图

组件图提供系统的物理视图,显示系统中的软件对其他软件组件的依赖关系。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uzQW8BUO-1588291502806)(C:\Users\LF\AppData\Roaming\Typora\typora-user-images\1588291165946.png)]

2.2.4 部署图

显示软件系统不同的组件将在何处物理运行,以及它们将如何彼此通信。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fXtRE9je-1588291502807)(C:\Users\LF\AppData\Roaming\Typora\typora-user-images\1588291170839.png)]

2.2.5 顺序图

显示具体用例的详细流程。

顺序图有两个维度:垂直维度,以发生的时间顺序显示消息/调用序列;水平维度,显示消息被发送到的对象实例。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uh940PmY-1588291502811)(C:\Users\LF\AppData\Roaming\Typora\typora-user-images\1588291187129.png)]

2.2.6 活动图

描述过程原理、业务逻辑以及工作流技术。类似于传统的流程图。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uu5NONRB-1588291502815)(C:\Users\LF\AppData\Roaming\Typora\typora-user-images\1588291208480.png)]

2.2.7 状态机图

表示某个对象所处的不同状态和该类的状态转换信息。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BmlfjwfZ-1588291502816)(C:\Users\LF\AppData\Roaming\Typora\typora-user-images\1588291215018.png)]

2.3 Java的面向对象特征

2.3.1 一切都是对象

Java中,除了8个基本数据类型之外,一切都是对象。

2.3.2 类和对象

类是对一类事物的描述,是抽象的定义;

对象是实际存在的该类事物的个体,也称实例。

fZ-1588291502816)]

2.3 Java的面向对象特征

2.3.1 一切都是对象

Java中,除了8个基本数据类型之外,一切都是对象。

2.3.2 类和对象

类是对一类事物的描述,是抽象的定义;

对象是实际存在的该类事物的个体,也称实例。

相关文章
|
4天前
|
Java 开发者
Java 面向对象新视界:揭秘子类如何“继承”父类精华,再添“创新”之笔
【6月更文挑战第16天】在Java的面向对象世界,子类继承父类的特性,如`Circle`继承`Shape`,展示“is-a”关系。子类不仅保留父类的`color`和`display`方法,还添加了`radius`属性及定制的显示逻辑。这种继承与创新允许代码复用,增强灵活性和可扩展性,使得构建复杂系统变得更加高效和模块化。通过持续的继承与定制,开发者能构建出一系列独具特色的类,充分展现面向对象编程的力量。
|
2天前
|
Java 数据安全/隐私保护 开发者
Java是一种完全支持面向对象编程的语言,其面向对象特性包括封装、继承、多态和抽象等
【6月更文挑战第18天】**面向对象编程(OOP)通过对象封装状态和行为,实现问题域的抽象。Java全面支持OOP,核心特性包括**: - **封装**:保护数据安全,隐藏内部细节。 - **继承**:子类继承父类属性和行为,促进代码重用。 - **多态**:一个接口多种实现,增强灵活性和扩展性。 - **抽象**:通过接口和抽象类抽离共性,简化复杂性。 **Java的OOP便于理解和解决复杂系统问题。**
13 3
|
3天前
|
Java 开发者 C++
Java面向对象的终极挑战:抽象类与接口的深度解析!
【6月更文挑战第17天】在Java OOP中,抽象类和接口助力代码复用与扩展。抽象类不可实例化,提供通用框架,适合继承;接口包含纯抽象方法,支持多态与松耦合。选择抽象类用于继承已有方法和状态,接口则适用于不相关类共享行为。Java 8后接口能含默认方法,增加设计灵活性。抽象类与接口常结合使用,以实现最佳设计,如`Shape`抽象类实现`Drawable`和`Selectable`接口,展现两者协同优势。理解和熟练运用这对概念是提升代码质量的关键。
|
4天前
|
Java
Java 面向对象新篇章:子类如何“站在巨人肩膀上”,继承与创新并存!
【6月更文挑战第16天】Java 中的子类继承父类,实现代码复用和扩展。子类自动获得父类属性和方法,减少冗余,保证一致性。通过示例展示了`Circle`类如何继承`Shape`类并添加新特性。子类不仅能继承,还能创新,如`Circle`类增加计算面积方法。这种继承与创新结合,构成Java面向对象编程的核心,支持构建灵活、高效的软件系统。
|
4天前
|
安全 Java
Java 面向对象之旅:封装——让代码更加“接地气”的秘诀。
【6月更文挑战第16天】**Java面向对象的封装秘籍:**将数据和操作打包成类,如`Student`和`Car`,隐藏内部详情,只通过`get/set`方法交互。封装提升代码清晰度,便于管理和保护安全性,就像整理工具箱,让每个功能一目了然,操作自如。
|
4天前
|
安全 Java
Java 面向对象之旅:在封装的港湾中,找到代码的安宁。
【6月更文挑战第15天】封装是Java面向对象的核心,它保护了类的内部数据,如`Book`和`Student`类中的属性。通过设定私有成员和公共方法,代码更有序,防止直接访问导致的混乱。封装提供了一种控制数据交互的方式,确保安全,如`setGpa()`方法验证输入。这使得代码结构清晰,如同港湾中的船只,井然有序,赋予编程过程美感和安全感。在面向对象的旅程中,封装是我们的庇护所,助力我们构建更美好的程序世界。
|
5天前
|
设计模式 Java
一文掌握 Java 面向对象精髓:从类定义到对象实战
【6月更文挑战第15天】Java面向对象编程初学者指南:类是对象模板,如`Person`类含`name`和`age`属性。创建对象用`new`,如`Person person = new Person()`。访问属性如`person.name="Alice"`,调用方法如`person.sayHello()`。类能继承,如`Student extends Person`。对象间共享数据可传参或共用引用。多态性允许父类引用调用子类方法。注意对象生命周期和内存管理,避免内存泄漏。通过实践和理解这些基础,提升编程技能。
|
5天前
|
Java
深入 Java 面向对象:类的定义,竟然藏着这么多门道!
【6月更文挑战第15天】Java中的类定义是OOP的基础,它封装属性(如Student的name和age)和行为(如study())。简单的类仅触及表面,而复杂的类可模拟真实世界对象的多样性和交互。类还可通过继承扩展,如Student从Person派生,增加特有属性和行为。接口和抽象类等概念进一步增强了灵活性和可扩展性。类定义的深度和广度是构建高效、可维护代码的关键。
|
6天前
|
Java 索引
[笔记] 疯狂JAVA讲义(第3版)第4章 流程控制与数组
[笔记] 疯狂JAVA讲义(第3版)第4章 流程控制与数组
|
6天前
|
Java 程序员 API
[笔记] 疯狂JAVA讲义(第3版)第3章 数据类型和运算符
[笔记] 疯狂JAVA讲义(第3版)第3章 数据类型和运算符