面向对象方法与UML
Created: 2024-03-05 Tue 16:42
面向对象 = 对象 + 类 + 继承 + 消息通信
程序在运行时由 类 生成 对象 ,对象之间通过发送消息进行 通信 , 互相协作完成相应的 功能 。
对象 是面向对象程序的核心。
对象 = 数据 + 作用于这些数据上的 操作
Figure 1: 对象的图形表示
对象名在前、类名在后的情况 | 对象名:类名 |
尚未给对象命名的情况 | :类名 |
省略类名的情况 | 对象名 |
每个应用系统可以拥有某几种或所有对象,但不必特意对每个对象进行分类。
Figure 2: 类的图形表示
Figure 3: 教材中定义的公共类与扩展类
Figure 4: 类的继承关系
%%{init: { 'theme': 'neutral', 'fontFamily': 'KaiTi' }}%%
graph TB
S["启动"] --- A["汽车的启动"]
S --- B["轮船的启动"]
S --- C["气球飞艇的启动"]
S --- D["......的启动"]
@startuml
skinparam defaultFontName Times New Roman, KaiTi
left to right direction
title 交通工具的启动
node 启动
启动 -[#red]-> 汽车的启动
启动 -[#green]-> 轮船的启动
启动 -[#blue]-> 气球飞艇的启动
汽车的启动 -[#red]-> 发动机点火and启动引擎
轮船的启动 -[#green]-> 起锚
气球飞艇的启动 -[#blue]-> 充气and解缆
@enduml
Figure 5: 交通工具的启动
多态 是指一个程序中 同名 的不同 方法 共存 的情况。 主要通过子类对父类方法的 覆盖 来实现多态。
消息 是一个对象向另一个对象传递的 信息 。
- 在进行 面向对象系统开发 时,是按照 OOA - OOD - OOP 的顺序进行的,
- 但 面向对象方法 却是按照 OOP - OOD - OOA 的顺序逐渐发展成熟起来的。
%%{init: { 'theme': 'forest', 'fontFamily': 'Times New Roman, KaiTi' }}%%
graph LR
OODM["面向对象开发方法"]
OODM --- OOA["面向对象分析(Object-Oriented Analysis, OOA)"]
OODM --- OOD["面向对象设计(Object-Oriented Design, OOD)"]
OODM --- OOP["面向对象编程(Object-Oriented Programming, OOP)"]
Figure 6: 面向对象开发方法
Figure 7: UML吸收了许多面向对象方法的优点
Figure 8: UML的基本模型
事物(Things) 是对模型中最具代表性成分的 抽象 。
Figure 9: UML基本事物的图形表示
结构事物 是UML模型的 静态部分 ,主要用来描述概念的或物理的 元素 。
行为事物 是UML模型的 动态部分 。
Figure 10: 对象之间的交互
分组事物 是UML模型的 组织部分 ,它的作用是为了降低模型的复杂性。 UML中的分组事物是包(package)。
注释事物 是UML模型的 解释部分 ,它们用来描述和标注模型的任何元素。 通常可以用注释修饰带有约束或者解释的图。
Figure 11: UML中的关系(Relationships)
依赖(dependency) 是两个事物之间的语义关系,其中一个事物发生变化会影响到另一个事物的语义, 它用一个 虚线箭头 表示。
虚线箭头的方向从 源事物 指向 目标事物 ,表示 源事物 依赖于 目标事物 。
Figure 12: 依赖关系示例
关联(association) 是一种结构关系,它描述了两个或多个类的实例之间的连接关系, 是一种特殊的依赖。
关联的实例称为 链 (link),每一条链连接一组 对象 (类的实例)。
普通关联 是最常见的关联关系,只要类与类之间存在连接关系就可以用普通关联表示。 普通关联又分为 二元关联 和 多元关联 。
Figure 13: 二元关联
Figure 14: 关联中的角色
Figure 15: 自身关联
Figure 16: 三元关联及相应类实例连接的链
限定关联(qualified association) 通常用在一对多或多对多的关联关系中, 可以把模型中的多重性从一对多变成一对一,或将多对多简化成多对一。
Figure 17: 限定关联
在关联关系比较简单的情况下,关联关系的语义用关联关系的名字来概括。 但在某些情况下,需要对关联关系的语义做详细的定义、存储和访问, 为此可以建立 关联类(association class) 来描述关联的属性。
Figure 18: 关联类的示例
聚合(aggregation) 也称为聚集,是一种特殊的关联, 描述了整体和部分之间的结构关系。 在需求陈述中,若出现 包含 、 组成 、 分为……部分 等字句, 往往意味着存在聚合关系。
Figure 19: 聚合
导航(navigability) 是关联关系的一种特性, 它通过在关联的一个端点上加箭头来表示导航的方向。
Figure 20: 导航
泛化(generalization) 关系就是 一般(generalization)类 和 特殊(specialization)类 之间的继承关系。
Figure 21: 抽象类
Figure 22: 多重继承
受限泛化 关系是指泛化具有 约束条件 。
Figure 23: 受限泛化
实现(implement) 是泛化关系和依赖关系的结合,也是类之间的语义关系。 通常在以下两种情况出现实现关系:
Figure 24: 实现关系
结构图 用于系统的 静态建模 , 行为图 用于系统的 动态建模 。
Figure 25: 结构图和行为图的分类
Figure 26: 用例图的建模元素
Figure 27: 银行储蓄系统的用例图
Figure 28: 银行储蓄系统的核心类图
Figure 29: 教学管理系统中的类图
Figure 30: 关联类
Figure 31: 顺序图中的符号
Figure 32: 消息的类型
Figure 33: 取款用例的顺序图
Figure 34: 取款用例的通信图
Figure 35: 电梯对象的状态图
Figure 36: 活动图中的符号
Figure 37: 取款用例的活动图
Figure 38: 画图系统的构件图
Figure 39: 银行储蓄系统的构件图
Figure 40: 部署图