You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UML中聚合(Aggregation)与组合(Composition)的区别是什么?

Association、Composition与Aggregation的核心区别

这三个都是UML类图里描述类之间关系的概念,核心差异在于依赖强度和生命周期绑定程度,用直白的例子和代码就能讲清楚:

1. 关联(Association)

这是最通用的关系,只要两个类之间有互动或联系,就能叫关联,没有严格的“整体-部分”约束。

  • 特点:双方生命周期完全独立,彼此能单独存在,依赖关系极弱。
  • 例子:老师和学生、作家和读者。老师离职不影响学生上学,读者消失作家依然能创作。
  • 代码示例:
class Teacher {
    private List<Student> students; // 老师知道自己的学生
}

class Student {
    private Teacher teacher; // 学生知道自己的老师
}

2. 聚合(Aggregation)

属于关联的特殊形式,是弱整体-部分关系:整体包含部分,但部分可以脱离整体独立存活。

  • 特点:用has-a描述,部分的生命周期不受整体控制,整体销毁后部分还能被其他对象复用。
  • 例子:部门和员工、图书馆和书籍。部门解散了,员工可以去其他部门;图书馆倒闭了,书籍还能被个人收藏。
  • 代码示例:
class Department {
    private List<Employee> employees; // 部门拥有员工
}

class Employee {
    // 员工可以属于不同部门,不绑定单个部门
}

3. 组合(Composition)

同样是整体-部分关系,但属于强绑定,是最严格的一种:部分完全依附于整体,整体销毁时部分也必须跟着销毁。

  • 特点:用contains-a描述,部分的生命周期由整体完全控制,逻辑上无法单独存在。
  • 例子:汽车和发动机、人和心脏。汽车报废了,发动机也失去使用意义;人去世了,心脏也不再工作。
  • 代码示例:
class Car {
    private Engine engine;

    public Car() {
        this.engine = new Engine(); // 发动机随汽车创建而生
    }
}

class Engine {
    // 发动机没有独立于Car的使用场景(逻辑层面)
}

一句话总结差异

  • 关联:两个独立个体的互动
  • 聚合:整体“拥有”部分,但部分可独立
  • 组合:整体“包含”部分,部分完全依赖整体

内容的提问来源于stack exchange,提问作者Akindu Bogahawatta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 19:45:39