考试分值:3~4分(UML部分)
一、关系总览
UML中有4种基本关系:依赖、关联、泛化和实现。
其中,关联关系可以进一步细分为聚合和组合两种特殊关系。
| 关系类型 | 耦合度(从弱到强) | UML表示 |
|---|---|---|
| 依赖(Dependency) | 最弱 | 虚线箭头 ----> |
| 关联(Association) | 较弱 | 实线 —— |
| 聚合(Aggregation) | 较强 | 空心菱形实线 <>—— |
| 组合(Composition) | 强 | 实心菱形实线 <>—— |
| 泛化(Generalization) | 强 | 实线空心三角箭头 ——▷ |
| 实现(Realization) | 强 | 虚线空心三角箭头 ----▷ |
二、依赖关系(Dependency)
定义
- 一个类A的变化会影响到类B,则称类B依赖于类A
- 是最弱的关系
特点
- 临时性的关系
- 通常表现为:一个类作为另一个类方法的参数、返回值或局部变量
- 依赖方向:被依赖方指向依赖方
举例
- 人"使用"电脑,人依赖于电脑
三、关联关系(Association)
定义
- 类之间存在结构性的联系,一个类的对象作为另一个类的属性
特点
- 是一种长期性的关系(相比依赖)
- 通常以成员变量的形式存在
- 可以是单向的,也可以是双向的
- 关联可以有多重性(1:1、1:n、m:n)
举例
- 老师"拥有"学生(双向关联)
- 学生"属于"某个班级(单向关联)
四、聚合关系(Aggregation)
定义
- 表示整体与部分的关系,是关联关系的一种特例
- 部分可以脱离整体独立存在
特点
- 弱拥有关系
- 部分和整体的生命周期不一致
- 整体消失了,部分仍然存在
- 部分可以脱离整体存在
举例
- 班级和学生:班级解散了,学生仍然存在
- 计算机和键盘:键盘可以拆下来连接到其他电脑
五、组合关系(Composition)
定义
- 表示整体与部分的关系,是聚合关系的进一步强化
- 部分不可以脱离整体独立存在
特点
- 强拥有关系
- 部分和整体的生命周期一致
- 整体消失了,部分也消失了
- 部分不可以脱离整体存在
举例
- 人和心脏:人不存在了,心脏也不存在
- 窗口和按钮:窗口关闭,按钮也随之销毁
六、泛化关系(Generalization)
定义
- 即继承关系,表示一般与特殊的关系
- 子类继承父类的所有属性和方法
特点
- 子类可以重写父类的方法
- 子类可以扩展父类的功能
- 是面向对象三大特征之一(继承)
举例
- 猫是动物(猫继承动物)
- 汽车是交通工具
七、实现关系(Realization)
定义
- 类实现接口中定义的方法
- 是一种接口与实现之间的关系
特点
- 类必须实现接口中声明的所有方法
- 一个类可以实现多个接口
- 接口不能实例化
举例
- 飞行接口,飞机类实现飞行接口
八、聚合与组合的区别(重点)
| 对比项 | 聚合(Aggregation) | 组合(Composition) |
|---|---|---|
| 生命周期 | 部分和整体的生命周期不一致 | 部分和整体的生命周期一致 |
| 整体消失后 | 部分仍然存在 | 部分也消失 |
| 能否脱离整体 | 部分可以脱离整体存在 | 部分不可以脱离整体存在 |
| 拥有关系 | 弱拥有 | 强拥有 |
| UML表示 | 空心菱形 <>—— |
实心菱形 <>—— |
| 举例 | 班级和学生、部门和员工 | 人和心脏、窗口和按钮 |
九、关系强度排序
从弱到强:
依赖 → 关联 → 聚合 → 组合 → 泛化/实现
十、考试重点
- 聚合 vs 组合:核心区别在于生命周期是否一致、部分能否脱离整体
- 依赖 vs 关联:依赖是临时性的(方法参数等),关联是长期性的(成员变量)
- 泛化 vs 实现:泛化是类与类的继承,实现是类与接口的实现
- UML表示符号:各种关系的箭头和线条样式
评论