# 第七章 面向对象技术

客观世界由许多具体的事物、事件、概念和规则组成,这些均可被看成对象。

# 7.1 面向对象基础

# 7.1.1 面向对象的基础概念

Peter Coad 和 Edward Yourdon 提出用下面的等式识别面向对象方法。

面向对象=对象+分类+继承+通过消息的通信
  1. 对象。在面向对象的系统中,对象是基本的运行时的实体。
  2. 消息。对象之间进行通信的一种构造叫做消息。
  3. 类。一个类定义了一组大体上相似的对象。
  4. 继承。继承是父类和子类之间共享数据和方法的机制
  5. 多态。在收到消息时,对象要予以响应。不同的对象收到同一消息可以产生完全不同的结果。
  6. 动态绑定。绑定是一种把过程调用和响应调用所需执行的代码加以结合的过程。

# 7.1.2 面向对象分析

同其他分析方法一样,面向对象分析 (OOA) 的目的是为了获得对应应用问题的理解。理解的目的是确定系统的功能、性能要求。

  1. 认定对象
  2. 组织对象
  3. 对象间的相互作用
  4. 基于对象的操作

# 7.1.3 面向对象设计

# 7.1.3.1 面向对象设计的活动

OOD 在复用 OOA 模型的基础上,包含与 OOA 对应如下五个活动。

  1. 识别类及对象
  2. 定义属性
  3. 定义服务
  4. 识别关系
  5. 识别包

# 7.3.1.2 面向对象设计的原则

  1. 单一责任原则 (Single Responsibility Principle) 。就一个类而言,应该仅有一个引起它变化的原因。
  2. 开闭原则 (Open & Close Principle) 。软件实体应该是可以扩展的,即开放的;但是不可修改的,即封闭的。
  3. 里氏替换原则 (Liskov Subsitution Principle) 。子类必须能够替换掉他们的基类。
  4. 接口分离原则 (Interface Segregation Principle) 。不应该强迫客户依赖于他们不用的方法。
  5. 依赖倒置原则 (Dependence Inversion Principle) 。抽象不应该依赖于细节,细节应该依赖于抽象。

# 7.1.4 面向对象程序设计

面向对象程序设计的实质是使用一种面向对象程序设计语言,采用对象、类及其相关概念所进行的程序设计。

  1. 类。
  2. 继承和类层次结构。
  3. 对象、消息传递和方法。
  4. 对象自身引用。对象自身引用是 OOPL 中的一种特有结构。
  5. 重置 (Overriding) 。是在子类中重写定义父类中以及定义的方法
  6. 类属类
  7. 无实例的类

# 7.1.5 面向对象测试

一般来说,对面向对象软件的测试可分为下列 4 个层次进行。

  1. 算法层。测试类中定义的每个方法,基本上相当于传统软件测试中的单元测试。
  2. 类层。测试封装在同一个类中的所有方法与属性之间的相互作用。
  3. 模板层。测试一组协同工作的类之间的相互作用,大体上相当于传统软件测试中的集成测试。
  4. 系统层。把各个子系统组装成完整的面向对象软件系统,大体上相当于传统软件测试中的集成测试。

# 7.2 UML

统一建模语言是面向对象软件的标准化建模语言。由于其简单、统一,又能够表达软件设计中的动态和静态信息,目前已经成为可视化建模语言事实上的工业标准。

UML 的词汇表包含 3 种构造块:事物、关系和图。事物是对模型中最具有代表性的成分的轴向;关系把事物结合在一起;图聚集了相关的事物。

# 7.2.1 事物

UML 中有 4 种事物:结构事物、行为事物、分组事物和注释事物。

  1. 结构事物。结构事物是 UML 模型中的名词。它们通常是模型的静态部分,描述概念或物理元素。
  2. 行为事物。行为事物是 UML 模型的动态部分。他们是模型中的动词,描述了跨越时间和空间的行为。
  3. 分组事物。分组事物是 UML 模型的组织部分,是一些由模型分解成的“盒子”。
  4. 注释事物。注释事物是 UML 模型的解释部分。这些注释事物用来描述、说明和标注模型的任何元素。

# 7.2.2 关系

UML 中有 4 种关系:依赖、关联、泛化和实现。

  1. 依赖。依赖是两个事物间的语义关系,其中一个事物发生变化会影响另一个事物的语义。
  2. 关联。关联是一种结构关系,它描述了一组链,链是对象之间的连接。
  3. 泛化。泛化是一种特殊/一般关系,特殊元素的对象可替代一般元素的对象。
  4. 实现。实现是类元之间的语义关系,其中一种类元指定了一种由另一个类元保证执行的契约。

# 7.2.3 UML 中的图

图是一组元素的图形表示,大多数情况下把图画成顶点和弧的连通图。

UML 2.0 提供了 13 种图,分别是类图、对象图、用例图、序列化、通信图、状态图、活动图、构件图、组合结构图、部署图、包图、交互概览图和计时器。序列图、通信图、交互概览图和计时图均被称为交互图。

  1. 类图
  2. 对象图
  3. 用例图
  4. 交互图
  5. 状态
  6. 活动图
  7. 构件图
  8. 组合结构图
  9. 部署图
  10. 包图

# 7.3 设计模式

# 7.3.1 设计模式的要素

TIP

“每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动。”

设计模式一般有以下 4 个基本要素。

  1. 模式名称。一个助记名,它用一两个词来描述模式的问题、解决方案和效果。模式名可以帮助人们思考便于人们与其他人交流设计思想及设计结果。
  2. 问题。问题描述了应该在何时使模式。它解释了设计问题和问题存在的前因后果,可能描述了特定的设计问题。
  3. 解决方案。解决方案描述了设计的组成成分、它们之间的相互关系及各自的职责和协作方式。
  4. 效果。效果描述了模式应用的效果及使用模式应权衡的问题。

# 7.3.2 创建型设计模式

# 7.3.3 结构型设计模式

# 7.3.4 行为设计模式

# 7.3.5 应用举例