考试分值: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表示 空心菱形 <>—— 实心菱形 <>——
举例 班级和学生、部门和员工 人和心脏、窗口和按钮

九、关系强度排序

从弱到强:

依赖 → 关联 → 聚合 → 组合 → 泛化/实现

十、考试重点

  1. 聚合 vs 组合:核心区别在于生命周期是否一致部分能否脱离整体
  2. 依赖 vs 关联:依赖是临时性的(方法参数等),关联是长期性的(成员变量)
  3. 泛化 vs 实现:泛化是类与类的继承,实现是类与接口的实现
  4. UML表示符号:各种关系的箭头和线条样式