多重度是 UML(统一建模语言) 中用于定义 类之间关联关系的数量约束 的核心概念,它明确描述了一个类的对象可以关联到另一个类的多少个对象。
1. 什么是多重度?
多重度(Multiplicity)用于指定:
-
一个类的对象 可以关联到 另一个类的多少个对象。
-
它通常出现在 关联关系(Association)、聚合(Aggregation)、组合(Composition) 中。
示例:
mermaid
复制
classDiagram class Customer { +String name } class Order { +String id } Customer "1" --> "0..*" Order : places
-
这里的
1
和0..*
就是多重度,表示:-
1:1 个
Customer
(顾客)可以关联…… -
0..*:0 到多个
Order
(订单)。
-
2. 常见的多重度表示法
表示法 | 含义 | 示例 |
---|---|---|
1 | 必须关联 1 个对象 | 一个人有 1 个身份证(1:1)。 |
0..1 | 可以关联 0 或 1 个对象(可选) | 一个学生可能有 0 或 1 个导师。 |
1..* | 至少关联 1 个对象(1 到多个) | 一个订单必须包含 1 个以上商品。 |
* 或 0..* | 可以关联 0 到多个对象 | 一个用户可以有任意数量的好友。 |
n..m | 可以关联 n 到 m 个对象 | 一个团队必须有 3 到 5 名成员。 |
2,4,6 | 只能关联 2、4 或 6 个对象 | 一个比赛队伍可以是 2、4 或 6 人。 |
3. 多重度的实际应用
(1) 1 对 1 关系(1:1)
-
示例:一个人(
Person
)只能有 1 个护照(Passport
)。
mermaid
复制
classDiagram class Person { +String name } class Passport { +String number } Person "1" -- "1" Passport : owns
(2) 1 对多关系(1:N)
-
示例:一个部门(
Department
)可以有多名员工(Employee
)。
mermaid
复制
classDiagram class Department { +String name } class Employee { +String id } Department "1" -- "*" Employee : employs
(3) 多对多关系(M:N)
-
示例:一个学生(
Student
)可以选修多门课程(Course
),一门课程也可以被多个学生选修。
mermaid
复制
classDiagram class Student { +String id } class Course { +String code } Student "0..*" -- "0..*" Course : enrolls
4. 多重度的进阶用法
(1) 关联类(Association Class)
如果关联本身需要存储额外信息(如“学生选课的成绩”),可以使用 关联类:
mermaid
复制
classDiagram class Student { +String id } class Course { +String code } class Enrollment { +String grade } Student -- Enrollment Enrollment -- Course
-
Enrollment 类存储
grade
(成绩),表示Student
和Course
之间的关联数据。
(2) 多重度约束
-
示例:一个银行账户(
BankAccount
)必须由 1 到 2 个客户(Customer
)持有(联名账户)。
mermaid
复制
classDiagram class Customer { +String name } class BankAccount { +String number } Customer "1..2" -- "*" BankAccount : owns
5. 常见问题
Q1:0..*
和 *
有什么区别?
-
0..*
和*
在 UML 中通常表示相同含义(0 到多个),但0..*
更明确,而*
是简写。
Q2:多重度可以用于继承吗?
-
不可以。多重度仅用于 关联、聚合、组合,继承关系(泛化)没有多重度。
Q3:如何表示“至少 1 个,但不超过 5 个”?
-
使用
1..5
,例如:Student "1..5" -- "1" Course
(一个课程必须有 1~5 名学生选修)。
6. 总结
关键点 | 说明 |
---|---|
多重度的作用 | 定义类之间关联的数量约束(1:1、1:N、M:N)。 |
常见表示法 | 1 、0..1 、1..* 、* 、n..m 。 |
1:1 关系 | 一个人对应一个身份证。 |
1:N 关系 | 一个部门对应多个员工。 |
M:N 关系 | 学生和课程之间的多对多选课关系。 |
关联类 | 用于存储关联的额外信息(如成绩、日期)。 |
掌握多重度能让你更精准地设计类图,使系统结构更清晰! 🚀