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

时间:2014-02-23 11:53:53

标签: oop uml aggregation composition model-associations

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

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

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

4 个答案:

答案 0 :(得分:106)

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

临时关联

  

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

示例:我将车停在车库。

Temporary Association UML

作文关联

  

所谓的“ STRONG relationship ”:链接对象的实例化通常很难   在对象的构造函数内编码。它无法设置   在对象之外。 (作品不能是多对多   关系。)

示例:众议院由石头组成。

Composition UML

直接关联

  

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

示例:汽车可以有乘客。

Direct Association UML

聚合关联

  

非常类似于直接关联。它也是一个与独立对象有关的“弱关系”。但是,此处关联的对象是包含对象的关键部分。

示例:汽车应该有轮胎。

Aggregation UML

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

答案 1 :(得分:11)

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

<强> 1。协会

关联是:A类使用B类。

示例:

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

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

<强> 2。聚合

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

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

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

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

第3。作文

A类拥有B类。

E.g。身体由手臂,头部,腿部组成。 BankAccount由Balance和TransactionHistory组成。

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

答案 2 :(得分:6)

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

至于其他人,

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

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

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

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

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

答案 3 :(得分:4)

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

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

有关协会的详情,请参阅this book chapter

请参阅我对this SO question的回答,了解汇总和合成的解释。