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

ste*_*529 45 oop uml composition aggregation model-associations

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

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

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

bvd*_*vdb 111

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

临时协会

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

示例:我将车停在车库.

临时协会UML

作文联想

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

示例:房屋由石头组成.

组成UML

直接关联

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

示例:汽车可以有乘客.

直接关联UML

聚合关联

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

示例:汽车应该有轮胎.

聚合UML

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


use*_*451 11

例如,OOP的重点是您的代码复制现实世界的对象,从而使您的代码可读和可维护.

  1. 协会

关联基本上是A类使用B类.作为一个例子

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

并且在UML图中,关联由正常箭头表示.

  1. 聚合类A包含类B,或类A具有类B的实例.当对象的生命独立于容器对象时使用聚合但仍然容器对象拥有聚合对象.

因此,如果我们删除A类并不意味着B类也将被删除,作为一个例子(非教师或许多教师可以属于一个或多个部门),教师和部门之间的关系就是聚合.

  1. 组合A类拥有B类.例如,Body由Arm,Head,Legs组成,BankAccount由Balance和TransactionHistory组成.因此,如果类被删除,那么B类也将被删除.


Gan*_*nus 6

直接关联与其他三个没有任何共同之处.它根本不属于UML,它是IBM需求建模术语.

至于其他人,

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

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

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

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

关联有一些更有趣的属性.如果你有兴趣,请看这里.