一、多重性基本概念
- 定义:描述类中元素的数量范围或确切数量
- 表示方式:用
[最小值]..[最大值]
格式写在关联线上方
二、常见多重性表示
-
单一实例:
1
:表示必须有且仅有一个实例1..1
:同1
(UML 2.0后不常用)- 示例:
[人体]----[心脏] (1)
-
可选实例:
0..1
:表示可以有0个或1个实例- 示例:
[汽车]◆----[备胎] (0..1)
-
多个实例:
*
或0..*
:表示可以有0个或多个实例1..*
:表示至少有1个实例- 示例:
[文章]----[段落] (*)
三、特殊多重性表示
-
无限制:
*
:等同于0..*
,表示实例数量无上限- 示例:
[大学]----[课程] (*)
-
精确数量:
- 直接写数字表示确切数量
- 示例:
[团队]----[成员] (5)
表示固定5个成员
四、多重性应用场景
-
组合关系:
- 强所有权关系,部分不能独立存在
- 示例:
[汽车]◆----[发动机] (1)
-
聚合关系:
- 弱所有权关系,部分可以独立存在
- 示例:
[部门]◇----[员工] (1..*)
-
关联关系:
- 表示类之间的普通关联
- 示例:
[学生]----[课程] (0..10)
(学生最多选10门课)
五、多重性书写规范
-
位置:写在关联线上方或靠近类名处
-
格式:
- 简单多重性:
(1)
、(0..1)
- 复杂多重性:
{3,5}
(表示3或5个实例)
- 简单多重性:
-
复合多重性:
- 可同时指定不同范围
- 示例:
{2,4}..10
表示2到4个或最多10个
六、多重性在代码中的体现
// 1对多关系 public class Department { private List<Employee> employees = new ArrayList<>(); // 1..* } // 0..1关系 public class Car { private Optional<SpareTire> spareTire; // 0..1 }
七、注意事项
- 组合关系通常使用
1
或1..*
,表示强所有权 - 聚合关系常用
0..*
或1..*
,表示弱所有权 - 多重性必须与关系类型(组合/聚合/关联)配合使用