1. 面向对象的基本概念
1.1 面向对象(OO)的定义
面向对象(OO)= 对象(Object)+ 分类(Classification)+ 继承(Inheritance)+ 通过消息的通信(Communication with Messages)
1.2 面向过程与面向对象
| 特性 | 面向过程 | 面向对象 |
|---|---|---|
| 关注点 | 关心的是"我该怎么做?" | 关心的是"我该让谁去做?" |
| 实现方式 | 一步步实现这个功能 | 去调用对象的操作来实现这个功能 |
| 核心 | 以过程(函数)为中心 | 以对象为中心 |
1.3 面向对象的四大核心概念
| 概念 | 说明 |
|---|---|
| 对象(Object) | 对象是对客观事物的抽象,是系统中用来描述客观事物的一个实体 |
| 类(Class) | 类是对对象的抽象,是具有相同属性和操作的一组对象的集合 |
| 继承(Inheritance) | 继承是类之间的一种关系,子类可以继承父类的属性和方法 |
| 消息(Message) | 消息是对象之间进行通信的一种方式 |
2. 类与对象
2.1 对象
对象是系统中用来描述客观事物的一个实体,由一组属性和对这组属性进行操作的一组服务组成。
对象的组成:
- 对象名:对象的唯一标识
- 属性(Attribute):描述对象静态特征的数据项
- 方法/操作(Method/Operation):描述对象动态特征(行为)的函数序列
2.2 类
类是对对象的抽象,是具有相同属性和操作的一组对象的集合。类是对象的模板,对象是类的实例。
类的组成:
- 类名:类的唯一标识
- 属性:描述类的静态特征
- 方法:描述类的动态特征
2.3 类与对象的关系
- 类是对象的抽象定义,定义了对象所具有的属性和方法
- 对象是类的具体实例,是类的一个具体表现形式
- 一个类可以创建多个对象
3. 面向对象的三大特性
3.1 封装(Encapsulation)
封装是将数据和操作数据的方法绑定在一起,隐藏对象的内部实现细节,仅对外提供公共的访问接口。
封装的优点:
- 隐藏实现细节,提高安全性
- 降低耦合度,提高模块化程度
- 便于维护和修改
访问控制:
| 访问修饰符 | 说明 |
|---|---|
| 公有(Public) | 对所有类可见 |
| 私有(Private) | 仅对本类可见 |
| 保护(Protected) | 对本类和子类可见 |
3.2 继承(Inheritance)
继承是类之间的一种关系,子类(派生类)可以继承父类(基类)的属性和方法,同时可以增加新的属性和方法或重写父类的方法。
继承的特点:
- 子类自动拥有父类的非私有属性和方法
- 子类可以扩展父类的功能
- 子类可以重写(覆盖)父类的方法
- 支持单继承和多继承(不同语言支持不同)
继承的类型:
| 类型 | 说明 |
|---|---|
| 单继承 | 一个子类只有一个直接父类 |
| 多继承 | 一个子类有多个直接父类 |
3.3 多态(Polymorphism)
多态是指同一个操作作用于不同的对象上,可以产生不同的解释和不同的执行结果。
多态的实现方式:
| 方式 | 说明 |
|---|---|
| 方法重载(Overloading) | 同一个类中,方法名相同但参数不同(参数个数、类型、顺序不同) |
| 方法重写(Overriding) | 子类重新定义父类中已有的方法 |
方法重载的条件:
- 方法同名
- 方法参数个数不同,或
- 方法参数类型不同,或
- 方法参数类型顺序不同
3.4 绑定
| 绑定类型 | 说明 |
|---|---|
| 静态绑定(Static Binding) | 在编译时确定调用的方法,也称为早期绑定 |
| 动态绑定(Dynamic Binding) | 在运行时确定调用的方法,也称为晚期绑定 |
4. 消息通信
4.1 消息的定义
消息是对象之间进行通信的一种方式。当一个对象需要另一个对象提供服务时,就向该对象发送消息。
消息的组成:
- 接收消息的对象
- 消息名(方法名)
- 必要的参数
4.2 消息传递机制
对象之间通过消息传递进行交互:
- 发送者对象向接收者对象发送消息
- 接收者对象收到消息后,调用相应的方法
- 方法执行完成后,可能返回结果给发送者
5. 面向对象设计原则
5.1 常见设计原则
| 原则 | 说明 |
|---|---|
| 单一职责原则(SRP) | 一个类应该只有一个引起它变化的原因 |
| 开闭原则(OCP) | 对扩展开放,对修改关闭 |
| 里氏替换原则(LSP) | 子类可以替换父类出现在任何地方 |
| 依赖倒置原则(DIP) | 依赖于抽象,不依赖于具体 |
| 接口隔离原则(ISP) | 使用多个专门的接口比使用单一的总接口要好 |
| 合成复用原则(CRP) | 优先使用组合/聚合,而不是继承 |
6. 面向对象方法学
6.1 面向对象分析(OOA)
面向对象分析是运用面向对象方法进行系统分析的过程,主要任务是提取系统需求,建立问题域的精确模型。
6.2 面向对象设计(OOD)
面向对象设计是将OOA的结果转化为软件设计的过程,主要任务是定义系统的设计类、接口和协作关系。
6.3 面向对象程序设计(OOP)
面向对象程序设计是使用面向对象编程语言实现OOD结果的过程。
6.4 面向对象测试(OOT)
面向对象测试是针对面向对象软件进行的测试,包括类测试、集成测试和系统测试。
7. 面向对象方法学总结
| 阶段 | 缩写 | 主要任务 |
|---|---|---|
| 面向对象分析 | OOA | 提取需求,建立问题域模型 |
| 面向对象设计 | OOD | 定义设计类、接口和协作关系 |
| 面向对象程序设计 | OOP | 使用OO语言实现设计 |
| 面向对象测试 | OOT | 对OO软件进行测试 |
评论