跳转至

🟡 UML 类图的图形元素

约 1103 个字 2 张图片 预计阅读时间 6 分钟

在 UML 类图中,节点主要为类以及接口,连接节点的线段有很多种形式,但无非由以下几种构成:

  • 实线 & 虚线
  • 箭头 & 无箭头
  • 空心三角形 & 实心三角形
  • 空心菱形 & 实心菱形

接下来讲每种图形组合的具体意义。下面先给一张综合类图示例,便于对照类、接口与各类连线,再阅读下一节中继承、实现、关联等符号的说明。

类图示例

UML 类图示例

常见关系与图形含义

  • 继承(Generalization)实线 + 空心三角箭头,箭头指向父类(被继承者)
    • 含义:子类继承父类,属于 is-a 关系
  • 实现(Realization)虚线 + 空心三角箭头,箭头指向接口
    • 含义:类实现接口
  • 关联(Association)实线(可带普通箭头表示单向,不带箭头表示双向)
    • 含义:一个类“知道/持有”另一个类,通常是成员变量层面的关系
  • 依赖(Dependency)虚线 + 普通箭头,箭头指向被依赖方
    • 含义:临时使用关系,常见于方法参数、局部变量、返回值
  • 聚合(Aggregation)实线 + 空心菱形,菱形在“整体”一端
    • 含义:整体与部分的弱拥有关系,部分可独立存在(如:团队与成员)
  • 组合(Composition)实线 + 实心菱形,菱形在“整体”一端
    • 含义:整体与部分的强拥有关系,部分通常不能脱离整体独立存在(如:订单与订单项)

速记

  • 三角箭头:表示“泛化体系”(继承/实现)
    • 实线三角 = 继承,虚线三角 = 实现
  • 菱形:表示“整体-部分”
    • 空心菱形 = 聚合(弱),实心菱形 = 组合(强)
  • 普通箭头:表示“方向”
    • 实线箭头多用于单向关联,虚线箭头多用于依赖

多重性(Multiplicity)详解

多重性用于描述:关联的一端,允许出现多少个对象实例
它通常写在线段两端,表示“站在对端看本端”的数量约束。

常用符号

  • 1:恰好 1 个(必须且唯一)
  • 0..1:0 或 1 个(可选)
  • *:0 到多个(无限上限)
  • 0..*:同 *,强调可为 0
  • 1..*:至少 1 个
  • n:恰好 n 个(例如 23
  • 0..n:最多 n 个
  • 1..n:至少 1,最多 n
  • m..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..*)
    • 成员可独立存在,可加入/退出团队

评论