OOP 中的组合、聚合和关联

简介: 【8月更文挑战第22天】

组合、聚合和关联是面向对象编程 (OOP) 中表示对象之间关系的三种主要类型。理解这三种关系之间的区别对于编写健壮且可维护的代码至关重要。

组合

组合是一种强关联类型,其中一个对象(称为整体)拥有另一个对象(称为部分)的生命周期。这意味着当整体对象被销毁时,部分对象也会被销毁。部分对象与整体对象之间存在依赖关系,并且不能独立于整体对象存在。

聚合

聚合是一种弱关联类型,其中一个对象(称为容器)包含另一个对象(称为内容)。容器对象不拥有内容对象的生命周期,内容对象可以独立于容器对象存在。容器对象与内容对象之间存在“拥有”关系,但内容对象并不依赖于容器对象。

关联

关联是一种最弱的关联类型,其中两个对象之间存在直接或间接的引用。关联对象之间没有所有权或包含关系。关联对象可以独立于彼此存在,并且可以随时断开关联。

比较

特征 组合 聚合 关联
生命周期 部分依赖于整体 内容独立于容器 对象独立
所有权 整体拥有部分 容器不拥有内容 无所有权
依赖性 部分依赖于整体 内容不依赖于容器 对象相互独立
表示 部件是整体的一部分 部件属于容器 部件与整体有联系

示例

  • 组合:汽车和轮胎。轮胎是汽车的一部分,当汽车被销毁时,轮胎也会被销毁。
  • 聚合:大学和学生。学生属于大学,但他们可以独立于大学存在。
  • 关联:客户和订单。客户和订单之间存在关联,但它们彼此独立。

何时使用

组合:

  • 当一个对象是另一个对象不可分割的一部分时。
  • 当一个对象的生命周期依赖于另一个对象时。

聚合:

  • 当一个对象包含另一个对象时。
  • 当一个对象与另一个对象有“拥有”关系时。

关联:

  • 当两个对象之间存在直接或间接的引用时。
  • 当两个对象相互独立时。

注意事项

  • 组合和聚合是“has-a”关系,而关联是“knows-about”关系。
  • 组合是最强的关联类型,聚合是介于组合和关联之间的类型。
  • 不同的编程语言可能对组合、聚合和关联有不同的实现。

结论

组合、聚合和关联是 OOP 中表示对象之间关系的重要概念。了解这三种关系之间的区别有助于开发人员创建更清晰、更可维护的代码。通过选择正确的关联类型,开发人员可以确保对象之间的关系准确地表示,并防止不必要的依赖和生命周期问题。

目录
相关文章
|
Java
Java 对象间关系(依赖、关联、聚合和组合)
面向对象设计 对象间关系:依赖、关联、聚合和组合,四种关系容易混淆。特别后三种,只是在语义上有所区别,所谓语义就是指上下文环境、特定情景等。 
463 1
|
3月前
|
uml
UML 类图几种关系(依赖、关联、泛化、实现、聚合、组合)及其对应代码
UML 类图几种关系(依赖、关联、泛化、实现、聚合、组合)及其对应代码
209 0
|
5月前
|
Java 程序员 C#
程序员必知:UML关联聚合组合关系
程序员必知:UML关联聚合组合关系
52 0
|
6月前
|
定位技术 计算机视觉 Windows
类间两种关系:继承、 组合
类间两种关系:继承、 组合
34 0
|
数据可视化 uml
UML图讲解(关联关系,单向关联,双向关联,自关联,组合关系,依赖关系,继承关系,实现关系)
UML图讲解,关联关系,单向关联,双向关联,自关联,组合关系,依赖关系,继承关系,实现关系。
3188 0
UML图讲解(关联关系,单向关联,双向关联,自关联,组合关系,依赖关系,继承关系,实现关系)
|
算法 C语言 C++
C++类的组合练习
C++类的组合练习
|
uml C++ 容器
「软件设计」UML中关联,聚合和组合的区别是什么?
「软件设计」UML中关联,聚合和组合的区别是什么?
|
uml C++ 容器
「软件设计」UML中关联,聚合和组合区别
「软件设计」UML中关联,聚合和组合区别
20天刷题计划-77. 组合
本题这是回溯法的经典题目。直接的解法当然是使用for循环,思路简单但效率相对没有优势,可以使用回溯搜索法,具体步骤如下 定义成全局变量便不必再当作参数传入函数 剪枝,判断当前长度和数组剩余长度能否构成一个k个数的组合 for 循环里 i 从 start 到 n。 比如,n = 5,k = 4,temp.size( ) == 1,此时代表我们还需要(4 - 1 = 3)个数字, 如果 i = 4 的话,以后最多把 4 和 5 加入到 temp 中,而此时 temp.size() 才等于 1 + 2 = 3, 不够 4 个,所以 i 没必要等于 4,i 循环到 3 就足够了。
|
安全 Java 容器
对象的组合
对象的组合
107 0