多重度要读对方向
类图关联线两端的多重度,表示一个对方对象可以对应本端多少个对象。这个读法听起来绕,做题时可以换成人话:一个订单可以有多少个订单明细?一个订单明细属于几个订单?
比如订单和订单明细,订单一端对应多个明细,明细通常只属于一个订单。题目如果给 1..* 和 1,就要结合业务语义判断哪端表示“多个”。不要只看数字离哪个类近,就机械套。
| 多重度 | 含义 | 题干常见说法 |
|---|---|---|
| 1 | 必须且只能有一个 | 每个明细属于一个订单 |
| 0..1 | 可有可无,最多一个 | 员工可能分配一个工位,也可能暂未分配 |
| 1..* | 至少一个,可以多个 | 订单至少包含一个明细 |
| 0..* | 可以没有,也可以多个 | 用户可以没有收藏,也可以收藏多个商品 |
先读业务句子,再看图
类图题通常会给一句业务描述。你可以先把它改写成两句话:一个 A 对应几个 B?一个 B 对应几个 A?这两句话写清楚,多重度基本就不会乱。
例如“一个部门有多个员工,一个员工属于一个部门”,就能判断部门到员工是一对多。这里的重点不是背 UML 符号,而是把业务关系翻译成数量约束。
小例子
一个班级可以有多个学生。
一个学生通常属于一个班级。
所以班级和学生之间常见是一对多关系。
多重度和聚合组合不是一回事
多重度说明数量关系,聚合和组合说明整体与部分的语义强弱。比如订单和订单明细可能是一对多,同时也可能体现强生命周期绑定;班级和学生也可能是一对多,但学生离开某个班级后仍可独立存在。
所以看到 1..* 不要直接断定组合关系。题目如果问聚合和组合,要看部分对象能否脱离整体独立存在,而不是只看数量。
考场速记
多重度题不要看一眼图就选。先把题干里的“一个、多个、至少、可能、必须”这些词圈出来,再把它们对应到类图两端。数量词往往就是答案。
如果题干没有明确说“必须”,就别轻易把 0..1 看成 1;如果题干写“至少一个”,就别选 0..*。这种细小差别,正是软件设计师 UML 题喜欢考的地方。
相关题目解析
下面这些题目和本专题的判断方法关联较强,适合读完概念后回到具体题干里校验理解。
- UML 类图中聚合和组合有什么区别?UML 类图 / 聚合
- UML 类图中泛化关系是什么意思?UML 类图关系 / 软件设计师UML类图
- UML 时序图主要用来描述什么?UML / 时序图