「软件设计」UML中关联,聚合和组合的区别是什么?

考虑以下对象类之间的差异和相似之处:宠物、狗、尾巴、主人。

2efbb4b58921f6740a8a36b2c2467b6e.jpeg

我们可以看到以下关系:

  • 主人喂宠物,宠物感谢主人(关联)

  • 尾巴是狗和猫的一部分(聚集/组成)

  • 猫是一种宠物(遗传/概括)

下图显示了三种类型的关联连接器:关联、聚合和组合。我们将在这个UML指南中复习它们。

38045ef9c634ac5f147f75218323ddc9.jpeg

efd5c9855dc4f1b544ef665fb3a1f84f.jpeg

156cf072c8c68efcfe9a87bdf7b1ba61.jpeg

下图显示了一个概括。我们将在稍后的UML指南中讨论它。

e7be266af1ed1855f75e0f631484d1f5.jpeg

关联

如果一个模型中的两个类需要彼此通信,那么它们之间必须有一个链接,并且可以通过一个关联(连接器)来表示。

关联可以用这些类之间的一条线表示,该线带有指示导航方向的箭头。如果两边都有箭头,则这种关联称为双向关联。

我们可以通过在表示关联的行中添加多重装饰来表示关联的多重性。该示例表明,一个学生有一个或多个导师:

一个学生可以与多个老师关联:

3442b7817f063932813dc934f73b0187.jpeg

这个例子表明每个老师都有一个或多个学生:

d8239b6119da33d317743a18fecea9ee.jpeg

我们还可以使用角色名指示关联中对象的行为(例如,对象的角色)。

56e37037d9095d0f9a23ea0fc1e04d54.jpeg

关联vs聚合vs组合

“关联、聚合和组合之间的区别是什么”这个问题最近经常被问到。

聚合和组合是关联的子集,意味着它们是特定的关联案例。在聚合和组合中,一个类的对象“拥有”另一个类的对象。但有一个微妙的区别:

  • 聚合意味着子组件可以独立于父组件而存在。示例:班级(父类)和学生(子类)。删除类,学生仍然存在。

  • 组合意味着子元素不能独立于父元素而存在的关系。例子:房子(父母)和房间(孩子)。房间不能与房子分开。

组合的例子:

除了类A和类B之间的部分关系之外,我们还应该更具体地使用composition链接——这两个类之间存在很强的生命周期依赖关系,也就是说,当类A被删除时,类B也会被删除

73b2fab040d051dd77430742b5d474a6.jpeg

聚合的例子:

值得注意的是,聚合链接没有以任何方式声明类A拥有类B,也没有声明两者之间存在父子关系(当父类删除时,其所有的子类也因此被删除)。事实上,恰恰相反!聚合链接通常用于强调类A实例不是类B实例的独占容器,因为实际上同一个类B实例拥有另一个容器/s。

22d9ab358bda81fcb7acd256672b91df.jpeg

加起来-

总而言之,关联是一个非常通用的术语,用于表示一个类使用另一个类提供的功能时的情况。如果一个父类对象拥有另一个子类对象,并且如果没有父类对象,这个子类对象就不能有意义地存在,那么我们称它为复合。如果可以,就称为聚合。

泛化和专业化

泛化是一种机制,用于将类似的对象类组合成一个更一般化的类。泛化标识一组实体之间的共性。共性可以是属性、行为,或者两者都有。换句话说,超类拥有最通用的属性、操作和可以与子类共享的关系。子类可能有更专门化的属性和操作。

专门化是泛化的反向过程,泛化意味着从现有的类创建新的子类。

例如,银行账户有两种类型——储蓄账户和信用卡账户。储蓄账户和信用卡账户从银行账户中继承了常见的/广义的属性,比如账户号、账户余额等,也有它们特有的属性,比如未结算的付款等。

cf22166f37956ede1b534cd1422fd214.jpeg

泛化和继承

泛化是我们用来在UML中表示将公共属性抽象为基类的术语。UML图的泛化关联也称为继承。当我们在编程语言中实现泛化时,它通常被称为继承。泛化和继承是相同的。这些术语只是根据使用的上下文而有所不同。

本文 :https://architect.pub/uml-association-vs-aggregation-vs-composition
讨论:知识星球【首席架构师圈】或者加微信小号【ca_cto】或者加QQ群【792862318】
公众号

【jiagoushipro】
【超级架构师】
精彩图文详解架构方法论,架构实践,技术原理,技术趋势。
我们在等你,赶快扫描关注吧。
96d7233a4401174bd92dcca001c08b95.jpeg
微信小号

【ca_cea】
50000人社区,讨论:企业架构,云计算,大数据,数据科学,物联网,人工智能,安全,全栈开发,DevOps,数字化.

4159663c09e53dc4484e69ba9ef0029b.jpeg

QQ群

【792862318】深度交流企业架构,业务架构,应用架构,数据架构,技术架构,集成架构,安全架构。以及大数据,云计算,物联网,人工智能等各种新兴技术。
加QQ群,有珍贵的报告和干货资料分享。

e34c65ab50f48a886a160e0b62755763.jpeg

视频号【超级架构师】
1分钟快速了解架构相关的基本概念,模型,方法,经验。
每天1分钟,架构心中熟。

e499d86a4d5602e0b18751ce386f46ad.jpeg

知识星球【首席架构师圈】向大咖提问,近距离接触,或者获得私密资料分享。

18c2d4c20d579d6a314c5c461eaa98bf.jpeg

喜马拉雅【超级架构师】路上或者车上了解最新黑科技资讯,架构心得。【智能时刻,架构君和你聊黑科技】
知识星球认识更多朋友,职场和技术闲聊。知识星球【职场和技术】
微博【超级架构师】智能时刻
哔哩哔哩【超级架构师】

309460ead7761c64eac0991fa26a7367.jpeg

抖音【cea_cio】超级架构师

2e17a8f549d9c65c8cca5ea8434d3bd5.jpeg

快手【cea_cio_cto】超级架构师

c10962a28de5a2e1494dfb378529c5cb.jpeg

小红书【cea_csa_cto】超级架构师

ff3f92bb5650ec4e6e77f42300a2233a.jpeg

网站CIO(首席信息官)https://cio.ceo
网站CIO,CTO和CDOhttps://cioctocdo.com
网站应用开发和开发平台https://apaas.dev
网站开发信息网https://xinxi.dev
网站首席架构师社区https://jiagoushi.pro
网站超级架构师https://jiagou.dev
网站企业技术培训https://peixun.dev
网站程序员宝典https://pgmr.pub    
网站程序员云开发分享https://pgmr.cloud
网站开发者闲谈https://blog.developer.chat
网站CPO宝典https://cpo.work
网站架构师实战分享https://architect.pub    ‍
网站首席安全官https://cso.pub    ‍
网站CIO酷https://cio.cool
网站CDO信息https://cdo.fyi
网站CXO信息https://cxo.pub

谢谢大家关注,转发,点赞和点在看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

架构师研究会

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值