目录
介绍
从需求中提取现实世界的关系
要求 1:IS关系
要求 2:使用关系:关联
需求3:关于父级的使用关系:聚合
要求 4和 5:死亡关系:组合
把东西放在一起
源代码
总结
- 下载源代码 - 14.1 KB
在本文中,我们将尝试理解三个重要的概念:关联、聚合和组合。
我们还将尝试了解我们在什么样的场景中需要它们。这三个概念确实让很多开发人员感到困惑,在本文中,我将尝试通过一些真实世界的示例以简化的方式展示这些概念。
从需求中提取现实世界的关系OOP的全部意义在于您的代码复制现实世界的对象,从而使您的代码可读和可维护。当我们说现实世界时,现实世界是有关系的。让我们考虑下面列出的简单要求:
- 经理是XYZ有限公司的员工。
- 经理使用刷卡进入XYZ场所。
- 经理有在他手下工作的工人。
- 经理有责任确保项目成功。
- 经理的薪水将根据项目的成功来判断。
如果您充实上述五点要求,我们可以轻松地形象化四种关系:
- 继承
- 聚合
- 关联
- 组合
让我们一一了解它们。
要求 1:IS关系如果你看第一个要求(经理是XYZ有限公司的员工),它是父子关系或继承关系。上面的句子指定经理是一种员工,换句话说,我们将有两个类:父类Employee和,而Manager从Employee类继承的子类。
注意:本文的范围仅限于聚合、关联和组合。我们不会在本文中讨论继承,因为它非常简单,我相信你可以在网上找到1000多篇文章,这将有助于你理解它。
要求 2:使用关系:关联要求2是一个有趣的要求(经理使用刷卡进入XYZ场所)。在这个需求中,管理器对象和刷卡对象相互使用,但它们有自己的对象生命周期。换句话说,它们可以在没有彼此的情况下存在。这种关系中最重要的一点是没有单一的所有者。
上图展示了SwipeCard类如何使用Manager类以及Manager类如何使用SwipeCard类。您还可以看到我们如何独立地创建Manager类和SwipeCard类的对象,并且它们可以有自己的对象生命周期。
这种关系称为“关联”关系。
需求3:关于父级的使用关系:聚合我们列表中的第三个要求(经理有在他手下工作的工人)表示相同类型的关系,如关联,但不同之处在于其中一个是所有者。因此,根据要求,Manager对象将拥有Worker对象。
子级Worker对象不能属于任何其他对象。例如,一个Worker对象不能属于一个SwipeCard对象。
但是……Worker对象可以有自己的生命周期,它与Manager对象完全断开。换个角度看,就是说如果Manager对象被删除了,Worker对象就不会死。
这种关系被称为“聚合”关系。
最后两个要求实际上是合乎逻辑的。如果仔细阅读,要求如下:
- 经理有责任确保项目成功。
- 经理的薪水将根据项目的成功来判断。
以下是对上述要求的分析结论:
- 经理和项目对象相互依赖。
- 两个对象的生命周期相同。换句话说,经理不好项目就不会成功,项目有问题经理也得不到好的增量。
下面是类形成的样子。也可以看到,我去创建project对象的时候,需要manager对象。
这种关系称为组合关系。在这种关系中,两个对象都严重依赖彼此。换句话说,如果一个进行垃圾收集,另一个也必须进行垃圾收集,或者从不同的角度放置,对象的生命周期是相同的。这就是为什么我把标题放在“死亡”关系中。
把东西放在一起下面是关系如何从需求中出现的直观表示。
您可以下载本文的示例源代码。
总结为了避免以后对这三个术语的混淆,我在下面提出了一个表格,可以帮助我们从三个角度比较它们:所有者、生命周期和子对象。
关联
聚合
组合
所有者
没有拥有者
单个拥有者
单个拥有者
生命周期
有自己的生命周期
有自己的生命周期
业主的生命周期
子对象
子对象都是独立的
子对象属于单个父对象
子对象属于单个父对象
https://www.codeproject.com/Articles/330447/Understanding-Association-Aggregation-and-Composit