05_类和对象
面向过程与面向对象的对比
面向过程:以计算机的思维方式,向计算机下达一个个指令,完成需求。
- 核心:过程(实现的步骤)
面向对象:将现实世界的事物抽象为对象,现实世界中的关系抽象成类、继承,帮助人们实现世界的抽象与数字建模。
- 核心:对象
- 面向对象三大特性:封装,继承,多态。通过面向对象提升代码质量,增加其可复用、可维护、可扩展等特性(高内聚、低耦合)。
- 小程序使用面向过程效果更佳
生活中的类和对象
在生活中,我们可以将每一个物体都看作是一个对象,我们一般通过特征 + 行为的方式来描述我们所见 到的每一个对象。
例如:一只狗(对象)
- 特征:(静态信息)
- 颜色:米白色
- 品种:田园犬
- …
- 行为:(动态信息)
- 看家
- 跑
- …
在生活中,我们看到了一个物体,往往会根据 它的特征+行为 对其进行分类/归类(物以类聚,人以群分)。所谓的类别其实本质上就是对一组对象的共有/相似特征 + 行为的抽取,它是一个抽象的概念。
计算机中的类和对象
Scanner:类,包含有键盘输入的相关方法(行为)
每次使用都要创建该类的对象
类是对象的抽象概念,在计算机中要描述生活中的对象首先要将这些对象的特征+行为提取出来,然后定义好类。
对象是类的具体实例,在使用面向对象编程开发时,当你需要实现一个功能时,创建一个相应的类对象即可。
类和对象的定义
类的定义
访问权限修饰符 calss 类名{
// 特征/属性/成员变量
访问权限修饰符 数据类型 属性名;
// ......
// 行为/方法/成员方法
访问权限修饰符 返回值类型 方法名([形式参数列表]){
// 方法体
[return 返回值];
}
}
需求:大黄看到熟人就摇尾巴,看到生人就汪汪叫。
- 该需求中存在一个对象(大黄)
- 大黄:
- 特征:
- 姓名:大黄
- 颜色:黄色
- 行为:
- 摇尾巴
- 汪汪叫
- 特征:
- 按照该特征定义一个狗类
对象的定义
// 创建对象
类名 对象名 = new 类名([参数列表]);
// 使用对象的属性和方法
对象名.属性名 = 属性值;
对象名.方法名([参数列表]);
例如:Scanner
// 创建对象
Scanner input = new Scanner(System.in);
// 使用对象的属性和方法
input.nextInt();
UMI-类图
UML的目标是以面向对象图的方式来描述任何类型的系统,具有很宽的应用领域。其中最常用的是建立软件系统的模型,但它同样可以用于描述非软件领域的系统,如机械系统、企业机构或业务过程,以及处理复杂数据的信息系统、具有实时要求的工业系统或工业过程等。总之,UML是一个通用的标准建模语言,可以对任何具有静态结构和动态行为的系统进行建模,而且适用于系统开发的不同阶段,从需求规格描述直至系统完成后的测试和维护。
截止UML2.0一共有13种图形(UML1.5定义了9种,2.0增加了4种)。分别是:用例图、类图、对象图、状态图、活动图、顺序图、协作图、构件图、部署图9种,包图、组合结构图、交互概览图3种。类图:描述系统中类的静态结构。
类图是描述系统中的类,以及各个类之间的关系的静态视图。能够让我们在正确编写代码以前对系统有一个全面的认识。类图是一种模型类型,确切的说,是一种静态模型类型。类图表示类、接口和它们之间的协作关系。
在线绘制:
- https://app.diagrams.net/
- ProcessOn
方法概述
增加程序中代码的复用性
方法(函数)是个“黑匣子”,完成某个特定的应用程序功能,并返回结果。类的方法定义类的某种行为(或功能)
// 方法声明
[访问权限修饰符] [特殊修饰符] 返回值类型 方法名([形式参数列表]){
// 方法体
[return 返回值;]
}
方法根据结构的不同组合方式,一共有四种形态
-
无参无返方法:没有形式参数,也没有返回值
-
void:代表没有返回值(返回值类型是空)
-
这种方法就是纯粹存储一段代码,用于实现代码段的复用
public void 方法名(){ // ... }
-
-
无参有返方法:没有形式参数,有返回值
-
返回值类型由返回值决定
-
这种方法定义了一些纯粹的功能,用于实现一些内容的生成
public int 方法名(){ // ... return 整数; }
例如:
- Scanner
- nextInt(): int
- nextDouble() : double
- next() : String
- Math
- random() :double
- Scanner
-
-
有参无返方法:有形式参数,没有返回值
-
有参有返方法:有形式参数,有返回值
使用方法:
// 调用无参无返方法
方法名();
// 调用无参有返
// 数据类型由方法的返回值类型决定
数据类型 变量名 = 方法名();