多重度(Multiplicity)详解

多重度是 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)。
常见表示法10..11..**n..m
1:1 关系一个人对应一个身份证。
1:N 关系一个部门对应多个员工。
M:N 关系学生和课程之间的多对多选课关系。
关联类用于存储关联的额外信息(如成绩、日期)。

掌握多重度能让你更精准地设计类图,使系统结构更清晰! 🚀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值