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 消息传递机制

对象之间通过消息传递进行交互:

  1. 发送者对象向接收者对象发送消息
  2. 接收者对象收到消息后,调用相应的方法
  3. 方法执行完成后,可能返回结果给发送者

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软件进行测试