您当前的位置: 首页 > 

寒冰屋

暂无认证

  • 1浏览

    0关注

    2286博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

了解关联、聚合和组合

寒冰屋 发布时间:2021-09-19 22:43:03 ,浏览量:1

目录

介绍

从需求中提取现实世界的关系

要求 1:IS关系

要求 2:使用关系:关联

需求3:关于父级的使用关系:聚合

要求 4和 5:死亡关系:组合

把东西放在一起

源代码

总结

  • 下载源代码 - 14.1 KB
介绍

在本文中,我们将尝试理解三个重要的概念:关联、聚合和组合。

我们还将尝试了解我们在什么样的场景中需要它们。这三个概念确实让很多开发人员感到困惑,在本文中,我将尝试通过一些真实世界的示例以简化的方式展示这些概念。

从需求中提取现实世界的关系

OOP的全部意义在于您的代码复制现实世界的对象,从而使您的代码可读和可维护。当我们说现实世界时,现实世界是有关系的。让我们考虑下面列出的简单要求:

  1. 经理是XYZ有限公司的员工。
  2. 经理使用刷卡进入XYZ场所。
  3. 经理有在他手下工作的工人。
  4. 经理有责任确保项目成功。
  5. 经理的薪水将根据项目的成功来判断。

如果您充实上述五点要求,我们可以轻松地形象化四种关系:

  • 继承
  • 聚合
  • 关联
  • 组合

让我们一一了解它们。

要求 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对象就不会死。

这种关系被称为“聚合”关系。

要求 4和 5:死亡关系:组合

最后两个要求实际上是合乎逻辑的。如果仔细阅读,要求如下:

  1. 经理有责任确保项目成功。
  2. 经理的薪水将根据项目的成功来判断。

以下是对上述要求的分析结论:

  1. 经理和项目对象相互依赖。
  2. 两个对象的生命周期相同。换句话说,经理不好项目就不会成功,项目有问题经理也得不到好的增量。

下面是类形成的样子。也可以看到,我去创建project对象的时候,需要manager对象。

这种关系称为组合关系。在这种关系中,两个对象都严重依赖彼此。换句话说,如果一个进行垃圾收集,另一个也必须进行垃圾收集,或者从不同的角度放置,对象的生命周期是相同的。这就是为什么我把标题放在“死亡”关系中。

把东西放在一起

下面是关系如何从需求中出现的直观表示。

源代码

您可以下载本文的示例源代码。

总结

为了避免以后对这三个术语的混淆,我在下面提出了一个表格,可以帮助我们从三个角度比较它们:所有者、生命周期和子对象。

关联

聚合

组合

所有者

没有拥有者

单个拥有者

单个拥有者

生命周期

有自己的生命周期

有自己的生命周期

业主的生命周期

子对象

子对象都是独立的

子对象属于单个父对象

子对象属于单个父对象

https://www.codeproject.com/Articles/330447/Understanding-Association-Aggregation-and-Composit

关注
打赏
1665926880
查看更多评论
立即登录/注册

微信扫码登录

0.1753s