跳到主要内容

OOP 中的 组合、聚合和关联有什么区别?

参考答案:

在面向对象编程(OOP)中,组合(Composition)、聚合(Aggregation)和关联(Association)是几种常见的对象关系。这些关系描述了对象之间如何相互作用和依赖。

  1. 组合(Composition): 组合是一种强依赖关系,它体现了严格的部分和整体的关系,部分和整体的生命周期一样。在组合关系中,部分对象不能独立存在,它们完全依赖于整体对象。例如,一个汽车对象包含了引擎、轮胎和座椅等部件,如果汽车被销毁,其部件也将被销毁。
  2. 聚合(Aggregation): 聚合也是一种依赖关系,但它表示的是一种弱的'拥有'关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分。在聚合关系中,部分对象可以独立存在,并且它们之间的连接较松散。被包含的对象可能被多个包含对象共享。例如,一个学校对象包含了多个班级对象,但如果学校关闭,班级对象仍然可以存在并被分配到其他学校。
  3. 关联(Association): 关联关系是一种最弱的关系,它体现的是两个类的一般性联系,比如我和我的朋友。关联可以是双向的,也可以是单向的。双向关联可以有两个箭头或者没有箭头,单向关联有一个箭头。例如,一个学生和一个班级之间存在关联关系,学生属于班级,班级包含学生。

总的来说,这三种关系在强度上存在差异:组合最强,聚合次之,关联最弱。组合要求部分对象完全依赖于整体对象,而聚合则允许部分对象独立存在。关联则是最一般的关系,它描述了两个对象之间的任何联系。