聚合与组合与关联与直接关联

问题描述 投票:43回答:4

我正在回顾我在面向对象编程方面的知识。在类主题之间的关系下,我遇到了一些对我来说有点模棱两可的关系。

我知道依赖“使用-a”和继承“是-a”但我对聚合,组合,关联和直接关联有点不熟悉;还有,他们中的哪一个是“有一种”关系。有些人使用Aggregation与Association互换。

什么是直接协会?还有什么是作文?在UML图中,表示它们的箭头是不同的。如果你能为我清除这些事情,我将非常感激。

oop uml aggregation composition model-associations
4个回答
106
投票

请注意,对“关联”定义有不同的解释。我在下面的观点很大程度上取决于您在Oracle认证书籍和学习指南中的内容。

Temporary association

方法内部的用法,其签名或作为返回值。它并不是对特定对象的引用。

示例:我将车停在车库。

Composition association

所谓的“STRONG关系”:链接对象的实例化通常在对象的构造函数内部进行硬编码。它不能从对象外部设置。 (构成不能是多对多的关系。)

示例:房屋由石头组成。

Direct association

这是一种“弱关系”。对象可以独立存在,并且通常有setter或其他方式来注入依赖对象。

示例:汽车可以有乘客。

Aggregation association

非常类似于直接关联。它也是与独立物体的“弱关系”。但是,这里关联的对象是包含对象的关键部分。

示例:汽车应该有轮胎。

注意:直接关联和聚合关联通常都被概括为“关联”。差异相当微妙。


11
投票

OOP的重点是您的代码复制现实世界的对象,使您的代码可读和可维护。

1.协会

协会是:A类使用B类。

例:

  • 员工使用公共汽车/火车服务进行运输。
  • 计算机使用键盘作为输入设备

在In UML图中,Association由正常的箭头表示。

2.聚合

A类包含B类,或A类具有B类实例。

当对象的生命与容器对象无关时,使用聚合。但仍然容器对象拥有聚合对象。

因此,如果我们删除A类并不意味着B类也将被删除。例如。没有或许多教师可以属于一个或多个部门。

教师和部门之间的关系是聚合的。

3.组成

A类拥有B类。

例如。身体由手臂,头部,腿部组成。 BankAccount由Balance和TransactionHistory组成。

因此,如果A类被删除,那么B类也将被删除。


6
投票

直接关联与其他三个没有任何共同之处。它根本不属于UML,它是IBM requirements modelling term

至于其他人,

关联A-> B是依赖的孩子。关联意味着,A(或其实例)有一些简单的方法来获取B的实例。例如,a.x.y.b。或者通过函数,或者通过一些局部变量。或者通过直接引用或指针,或其他东西(世界上有许多语言)。如您所见,依赖关系和关联之间没有严格的边界。

关联的一个属性是聚合,它可以具有以下值:无,共享(通常错误地称为聚合)和组合。

如果A(或实例)具有B的某些(或一个)实例,则破坏关联意味着破坏B实例,它就是组合。

如果您或工具作者已经决定,某些人有一种关系,那个组合较弱,需要特别展示,您可以使用shared聚合。通常它是A中B的一些引用集合。

关联有一些更有趣的属性。如果你有兴趣,请查看here


4
投票

对象类型之间的关联对这些类型的对象之间的关系进行分类。例如,关联Person-isEmployedBy-Enterprise可以分类关系PeterMiller-isEmployedBy-IBM,SusanSmith-isEmployedBy-IBM和SarahAnderson-isEmployedBy-Google之间的对象PeterMiller,SusanSmith和SarahAnderson类型Person以及Google和IBM的类型Enterprise。换句话说,关联是具有两个或更多参与其中的对象类型的关系类型。两个对象类型之间的关联称为二进制。虽然二元关联更常见,但我们可能还必须处理n元关联,其中n是大于2的自然数。例如,Person-isTreatedIn-Hospital-for-Disease是3-ary(“三元”) )对象类型PersonHospitalDisease之间的关联。

我猜这与“直接关联”你的意思是一个方向(或定向)关联,它是一个关联(与域类和范围类),表示其域类中的引用属性。这种方向关联在其目标端具有“所有权点”。

有关协会的更多信息,请参阅this book chapter

并查看我对this SO question的回答,以解释聚合和组合。

© www.soinside.com 2019 - 2024. All rights reserved.