软件设计师 · UML类图 · 多重度

UML 类图多重度 1..*、0..1 怎么看?

UML 类图多重度不是装饰数字,它是在告诉你一个对象和另一类对象之间能对应几个。软件设计师题里,多重度经常和关联、聚合、组合一起出现,读错一端,整道题就容易反过来。

软件设计师专题 软考题库编辑部 持续更新

多重度要读对方向

类图关联线两端的多重度,表示一个对方对象可以对应本端多少个对象。这个读法听起来绕,做题时可以换成人话:一个订单可以有多少个订单明细?一个订单明细属于几个订单?

比如订单和订单明细,订单一端对应多个明细,明细通常只属于一个订单。题目如果给 1..* 和 1,就要结合业务语义判断哪端表示“多个”。不要只看数字离哪个类近,就机械套。

多重度含义题干常见说法
1必须且只能有一个每个明细属于一个订单
0..1可有可无,最多一个员工可能分配一个工位,也可能暂未分配
1..*至少一个,可以多个订单至少包含一个明细
0..*可以没有,也可以多个用户可以没有收藏,也可以收藏多个商品

先读业务句子,再看图

类图题通常会给一句业务描述。你可以先把它改写成两句话:一个 A 对应几个 B?一个 B 对应几个 A?这两句话写清楚,多重度基本就不会乱。

例如“一个部门有多个员工,一个员工属于一个部门”,就能判断部门到员工是一对多。这里的重点不是背 UML 符号,而是把业务关系翻译成数量约束。

小例子

一个班级可以有多个学生。

一个学生通常属于一个班级。

所以班级和学生之间常见是一对多关系。

多重度和聚合组合不是一回事

多重度说明数量关系,聚合和组合说明整体与部分的语义强弱。比如订单和订单明细可能是一对多,同时也可能体现强生命周期绑定;班级和学生也可能是一对多,但学生离开某个班级后仍可独立存在。

所以看到 1..* 不要直接断定组合关系。题目如果问聚合和组合,要看部分对象能否脱离整体独立存在,而不是只看数量。

考场速记

多重度题不要看一眼图就选。先把题干里的“一个、多个、至少、可能、必须”这些词圈出来,再把它们对应到类图两端。数量词往往就是答案。

如果题干没有明确说“必须”,就别轻易把 0..1 看成 1;如果题干写“至少一个”,就别选 0..*。这种细小差别,正是软件设计师 UML 题喜欢考的地方。

相关题目解析

下面这些题目和本专题的判断方法关联较强,适合读完概念后回到具体题干里校验理解。