🟡 UML 类图的图形元素¶
约 1103 个字 2 张图片 预计阅读时间 6 分钟
在 UML 类图中,节点主要为类以及接口,连接节点的线段有很多种形式,但无非由以下几种构成:
- 实线 & 虚线
- 箭头 & 无箭头
- 空心三角形 & 实心三角形
- 空心菱形 & 实心菱形
接下来讲每种图形组合的具体意义。下面先给一张综合类图示例,便于对照类、接口与各类连线,再阅读下一节中继承、实现、关联等符号的说明。
类图示例¶
常见关系与图形含义¶
- 继承(Generalization):
实线 + 空心三角箭头,箭头指向父类(被继承者)- 含义:子类继承父类,属于
is-a关系
- 含义:子类继承父类,属于
- 实现(Realization):
虚线 + 空心三角箭头,箭头指向接口- 含义:类实现接口
- 关联(Association):
实线(可带普通箭头表示单向,不带箭头表示双向)- 含义:一个类“知道/持有”另一个类,通常是成员变量层面的关系
- 依赖(Dependency):
虚线 + 普通箭头,箭头指向被依赖方- 含义:临时使用关系,常见于方法参数、局部变量、返回值
- 聚合(Aggregation):
实线 + 空心菱形,菱形在“整体”一端- 含义:整体与部分的弱拥有关系,部分可独立存在(如:团队与成员)
- 组合(Composition):
实线 + 实心菱形,菱形在“整体”一端- 含义:整体与部分的强拥有关系,部分通常不能脱离整体独立存在(如:订单与订单项)
速记¶
- 三角箭头:表示“泛化体系”(继承/实现)
- 实线三角 = 继承,虚线三角 = 实现
- 菱形:表示“整体-部分”
- 空心菱形 = 聚合(弱),实心菱形 = 组合(强)
- 普通箭头:表示“方向”
- 实线箭头多用于单向关联,虚线箭头多用于依赖
多重性(Multiplicity)详解¶
多重性用于描述:关联的一端,允许出现多少个对象实例。
它通常写在线段两端,表示“站在对端看本端”的数量约束。
常用符号¶
1:恰好 1 个(必须且唯一)0..1:0 或 1 个(可选)*:0 到多个(无限上限)0..*:同*,强调可为 01..*:至少 1 个n:恰好 n 个(例如2、3)0..n:最多 n 个1..n:至少 1,最多 nm..n:最少 m,最多 n(闭区间)
读图方法¶
- 看 A 端标注,表示“一个 B 对应多少个 A”
- 看 B 端标注,表示“一个 A 对应多少个 B”
例如 User -------- Order:
- User 端写
1,Order 端写0..* - 含义就是:一个用户可有 0..* 个订单;每个订单必须且仅属于 1 个用户
高频关系模板¶
- 一对一(1 : 1)
- 例:
Person(1) —— Passport(1) - 语义:两边都必须唯一对应
- 例:
- 可选一对一(0..1 : 1)
- 例:
User(1) —— Profile(0..1) - 语义:用户可以没有资料,但资料必须对应一个用户
- 例:
- 一对多(1 : 0..*)
- 例:
Department(1) —— Employee(0..*) - 语义:一个部门可有多名员工;员工只属于一个部门
- 例:
- 多对一(0..* : 1)
- 本质是一对多的反向读法
- 多对多(0..* : 0..*)
- 例:
Student(0..*) —— Course(0..*) - 语义:学生可选多门课,课程也可被多个学生选择
- 例:
- 至少一个(1..*)
- 例:
Order(1) —— OrderItem(1..*) - 语义:订单至少有一个订单项
- 例:
- 固定数量(n)
- 例:
Car(1) —— Wheel(4) - 语义:一辆车恰好 4 个轮子(业务规则层面)
- 例:
- 区间数量(m..n)
- 例:
Team(1) —— Member(5..11) - 语义:一个团队最少 5 人,最多 11 人
- 例:
实战细节:*、0..*、1..* 的区别¶
*与0..*语义等价,均表示“可为 0”1..*强调“不能为空”- 如果业务上“必须至少有一个”,应优先用
1..*,不要写*
与聚合/组合一起看¶
- 组合 +
1..*常见于强生命周期约束- 例:
Order ◼── OrderItem(1..*) - 表示订单销毁时订单项随之销毁,且订单项至少一个
- 例:
- 聚合 +
0..*常见于弱拥有关系- 例:
Team ◇── Member(0..*) - 成员可独立存在,可加入/退出团队
- 例:
