面向对象方法与UML

(第三部分:面向对象分析与设计方法,第5章)

李欣

Created: 2022-05-10 Tue 23:57

0.1. 互动课堂

Click to host the seminar.

0.2. 本次课的目标

第三部分:面向对象分析与设计方法

第5章:面向对象方法与UML

  • 面向对象的概念与开发方法
  • UML简介
  • UML的事物
  • UML的关系
  • UML的图

1. 面向对象的概念与开发方法

面向对象 = 对象 + 类 + 继承 + 消息通信

如果一个系统是使用以上4个概念设计和实现的, 则可认为这个系统是面向对象的。 面向对象程序的基本组成单位是类。

程序在运行时由类生成对象,对象之间通过发送消息进行通信, 互相协作完成相应的功能。对象是面向对象程序的核心。

1.1. 对象

对象 = 数据 + 作用于这些数据上的操作

1.1.1. 对象的表示

object-representation.png

Figure 1: 对象的图形表示

对象名有下列3种表示格式

对象名在前、类名在后的情况
对象名:类名
尚未给对象命名的情况
:类名
省略类名的情况
对象名

1.1.2. 对象的分类

对象有两个层次的概念:

  • 现实生活中的对象指的是 客观世界的实体
    • 可见的有形对象(人、学生、汽车、房屋)
    • 抽象的逻辑对象(银行账号、生日)等
  • 程序中的对象指的是 一组变量和相关方法的集合
    • 变量,表明对象的状态
    • 方法,表明对象所具有的行为

可以将程序中的对象分为5类,每个应用系统可以拥有某几种或所有对象, 但不必特意对每个对象进行分类。

  • 物理对象(physical object)
  • 角色(role)
  • 事件(event)
  • 交互(interaction)
  • 规格说明(specification)

1.2. 类与封装

1.2.1.

class-representation.png

Figure 2: 类的图形表示

1.2.2. 封装

封装的定义是:

  • 清楚的边界 ,所有对象的内部信息被限定在这个边界内;
  • 接口 ,即对象向外界提供的方法,外界可以通过这些方法与对象进行交互;
  • 受保护的内部实现 ,即软件对象功能的实现细节,实现细节不能从类外访问。

1.3. 继承

公共类

  • 超类(superclass)
  • 父类(parent class, father class
  • 祖先(ancestor)
  • 基类(base class)

扩展类 / 从公共类继承的类

  • 子类(subclass, child class)
  • 后代(descendant)
  • 导出类(derived class)

superclass-subclass-definition.png

Figure 3: 教材中定义的公共类与扩展类

class-inheritance-relationship.png

Figure 4: 类的继承关系

1.4. 多态

start-up.png

多态是指一个程序中同名的不同方法共存的情况。 主要通过子类对父类方法的覆盖来实现多态。

1.5. 消息通信

消息是一个对象向另一个对象传递的信息。有4类消息:

  • 发送对象 请求 接收对象提供 服务
  • 发送对象 激活 接收对象;
  • 发送对象 询问 接收对象;
  • 发送对象仅 传送信息 给接收对象。

1.6. 面向对象的软件开发方法

object-oriented-development-method.png

1.6.1. Booch方法

  • 微开发过程
  • 宏开发过程
    • 标识类和对象;
    • 标识类和对象的语义;
    • 标识类和对象间的关系;
    • 进行一系列精化;
    • 实现类和对象。

1.6.2. Rumbaugh方法

  • 对象模型 :描述对象、类、层次和关系;
  • 动态模型 :描述对象和系统的行为;
  • 功能模型 :类似于高层的DFD,描述穿越系统的信息流。

1.6.3. Coad和Yourdon方法

  • 使用“要找什么”准则标识对象;
  • 定义对象之间的一般化/特殊化结构(又称为继承结构);
  • 定义对象之间的整体/部分结构(又称为组装结构);
  • 标识主题(系统构件的表示);
  • 定义对象的属性及对象之间的实例连接;
  • 定义服务及对象之间的消息连接。

1.6.4. Jacobson方法

  • 标识系统的用户和它们的整体责任;
  • 通过定义参与者及其职责、用例、对象和关系的初步视图,建立需求模型;
  • 通过标识界面对象、建立界面对象的结构视图、表示对象行为、分离出每个对象的子系统和模型, 建立分析模型。

1.6.5. Wirfs-Brock方法

  • 评估客户规格说明;
  • 使用语法分析从规格说明中提取候选类;
  • 将类分组以标识超类;
  • 定义每个类的职责;
  • 将职责赋予每个类;
  • 标识类之间的关系;
  • 基于职责定义类之间的协作;
  • 建立类的层次表示;
  • 构造系统的协作图。

2. UML简介

2.1. UML的产生和发展

uml.png

Figure 5: UML吸收了许多面向对象方法的优点

2.2. UML的特点

  • 统一标准
  • 面向对象
  • 可视化
  • 独立于过程
  • 容易掌握使用
  • 与编程语言的关系

2.3. UML的基本模型

uml-building-blocks.png

Figure 6: UML的基本模型

3. UML的事物

事物(Things) 是对模型中最具代表性成分的抽象,在UML中,可以分为:

  • 结构事物(Structural things)
  • 行为事物(Behavioral things)
  • 分组事物(Grouping things)
  • 注释事物(Annotational things)

uml-things-representation.png

Figure 7: UML基本事物的图形表示

3.1. 结构事物

结构事物 是UML模型的 静态部分 ,主要用来描述概念的或物理的元素,包括:

  • 类(class)
  • 主动类(active class)
  • 接口(interface)
  • 对象(object)
  • 用例(use case)
  • 参与者(actor)
  • 协作(collaboration)
  • 构件(component)
  • 节点(node)

3.2. 行为事物

行为事物 是UML模型的 动态部分 ,包括:

  • 交互(interaction)

object-interaction.png

Figure 8: 对象之间的交互

  • 状态机(state machine)

3.3. 分组事物

分组事物 是UML模型的 组织部分 ,它的作用是为了降低模型的复杂性。 UML中的分组事物是包(package)。

3.4. 注释事物

注释事物 是UML模型的 解释部分 ,它们用来描述和标注模型的任何元素。 通常可以用注释修饰带有约束或者解释的图。

4. UML的关系

在UML中,常见的 关系(Relationships) 有依赖、关联、泛化和实现4种, 还有聚合、复合等关系,如图所示:

uml-relationships-representation.png

Figure 9: UML中的关系

4.1. 依赖关系

依赖(dependency) 是两个事物之间的语义关系,其中一个事物发生变化会影响到另一个事物的语义, 它用一个虚线箭头表示。

虚线箭头的方向从 源事物 指向 目标事物 ,表示 源事物 依赖于 目标事物

uml-relationships-dependency-example.png

Figure 10: 依赖关系示例

4.2. 关联关系

关联(association) 是一种结构关系,它描述了两个或多个类的实例之间的连接关系, 是一种特殊的依赖。

关联的实例称为 链(link) ,每一条链连接一组对象(类的实例)。

  • 普通关联
  • 限定关联(qualified association)
  • 关联类(association class)
  • 聚合(aggregation)
    • 共享聚合(shared aggregation)
    • 复合聚合(composition aggregation)

4.2.1. 普通关联

普通关联 是最常见的关联关系,只要类与类之间存在连接关系就可以用普通关联表示。 普通关联又分为 二元关联多元关联

binary-association.png

Figure 11: 二元关联

association-role.png

Figure 12: 关联中的角色

self-association.png

Figure 13: 自身关联

ternary-association.png

Figure 14: 三元关联及相应类实例连接的链

4.2.2. 限定关联

限定关联(qualified association) 通常用在一对多或多对多的关联关系中, 可以把模型中的多重性从一对多变成一对一,或将多对多简化成多对一。

qualified-association.png

Figure 15: 限定关联

4.2.3. 关联类

在关联关系比较简单的情况下,关联关系的语义用关联关系的名字来概括。 但在某些情况下,需要对关联关系的语义做详细的定义、存储和访问, 为此可以建立 关联类(association class) 来描述关联的属性。

association-class-example.png

Figure 16: 关联类的示例

4.2.4. 聚合

聚合(aggregation) 也称为聚集,是一种特殊的关联, 描述了整体和部分之间的结构关系。 在需求陈述中,若出现 包含组成分为……部分 等字句, 往往意味着存在聚合关系。

aggregation-example.png

Figure 17: 聚合

4.2.5. 导航

导航(navigability) 是关联关系的一种特性, 它通过在关联的一个端点上加箭头来表示导航的方向。

navigability.png

Figure 18: 导航

4.3. 泛化关系

泛化(generalization) 关系就是 一般(generalization) 类和 特殊(specialization) 类 之间的继承关系。

4.3.1. 普通泛化

abstract-class.png

Figure 19: 抽象类

multiple-inheritance.png

Figure 20: 多重继承

4.3.2. 受限泛化

qualified-generalization.png

Figure 21: 受限泛化

4.4. 实现关系

实现(implement) 是泛化关系和依赖关系的结合,也是类之间的语义关系。 通常在以下两种情况出现实现关系:

  • 接口和实现它们的类或构件之间;
  • 用例和实现它们的协作之间。

implement-example.png

Figure 22: 实现关系

5. UML的图

  • 结构图 用于系统的 静态建模 ,包括:
    • 类图(class diagram)
    • 组合结构图(composite structure diagram)
    • 构件图(component diagram)
    • 部署图(deployment diagram)
    • 对象图(object diagram)
    • 包图(package diagram)
    • 造型图(profile diagram)
  • 行为图 用于系统的 动态建模 ,包括:
    • 活动图(activity diagram)
    • 用例图(use case diagram)
    • 状态图(state diagram)
    • 顺序图(sequence diagram)
    • 交互概览图(interaction overview diagram)
    • 通信图(communication diagram)
    • 定时图(timing diagram)

uml-diagrams.png

Figure 23: 结构图和行为图的分类

5.1. 用例图

use-case-diagram-example.png

Figure 24: 用例图的建模元素

use-case-diagram-bank-system.png

Figure 25: 银行储蓄系统的用例图

5.2. 类图

class-diagram-bank-system.png

Figure 26: 银行储蓄系统的核心类图

class-diagram-teaching-management-system.png

Figure 27: 教学管理系统中的类图

association-class-student-course-score.png

Figure 28: 关联类

5.3. 顺序图与通信图

5.3.1. 顺序图

sequence-diagram-example.png

Figure 29: 顺序图中的符号

message-type.png

Figure 30: 消息的类型

sequence-diagram-withdraw.png

Figure 31: 取款用例的顺序图

5.3.2. 通信图

communication-diagram-withdraw.png

Figure 32: 取款用例的通信图

5.4. 状态图

state-diagram-elevator.png

Figure 33: 电梯对象的状态图

5.5. 活动图

activity-diagram-example.png

Figure 34: 活动图中的符号

activity-diagram-withdraw.png

Figure 35: 取款用例的活动图

5.6. 构件图与部署图

5.6.1. 构件图

component-diagram-paint-system.png

Figure 36: 画图系统的构件图

component-diagram-bank-system.png

Figure 37: 银行储蓄系统的构件图

5.6.2. 部署图

deployment-diagram-example.png

Figure 38: 部署图

6. 课后作业

  1. (习题5.1) UML中有哪些基本的事物,一般可分为哪几种类型?
  2. (习题5.2) UML中有哪些关系?解释类图中聚合和关联的相同点和不同点。
  3. (习题5.3) UML中有哪几种图?每种图的作用是什么?