协会vs组合vs协会vs直接协会
我正在审查我在面向对象编程方面的知识。 在类课题的关系下,我遇到了一些对我有点模糊的关系。
我知道依赖“使用一个”和inheritance“是一个”,但我有点不熟悉聚合,组成,协会和直接关联; 而且,他们中哪一个是“有一个”的关系。 有些使用聚合与公会交替。
什么是直接关联? 另外,什么是组成? 在UML图中,表示它们的箭头是不同的。 如果你能为我清除这些东西,我会非常感激。
请注意,对“关联”定义有不同的解释。 我的观点很大程度上取决于您在Oracleauthentication书和学习指南中阅读的内容。
临时关联
方法中的用法,签名或返回值。 这不是一个真正的对特定对象的引用。
例如:我把车停在车库里。
组合协会
一个所谓的“ 强关系 ”:链接对象的实例通常是在对象的构造函数中硬编码的。 它不能从对象外部设置。 (构图不能是多对多的关系。)
例如:一栋房子由石头组成。
直接关联
这是一个“ 弱关系 ”。 对象可以独立生活,通常有设置者或其他方式来注入依赖对象。
例如:一辆汽车可以有乘客。
聚合协会
非常类似于直接关联。 这也是与独立对象的“ 弱关系 ”。 但是这里的关联对象是包含对象的关键部分。
例如:一辆汽车应该有轮胎。
注意:直接关联和聚合关联经常被推广为“关联”。 差别是相当微妙的。
例如OOP的全部重点是你的代码复制真实世界的对象,从而使你的代码可读性和可维护性。
- 协会
协会基本上是A类使用B类。作为一个例子
- 员工使用巴士/火车服务进行运输。
- 电脑使用键盘作为input设备
而在UML图中,关联用正常的箭头表示。
- 聚合类A包含类B,或者类A具有类B的实例。当对象的生命独立于容器对象时使用聚合但仍然容器对象拥有聚合对象。
因此,如果删除A类并不意味着B类也将被删除,例如(非教师或许多教师可以属于一个或多个部门),教师和部门之间的关系就是聚合。
- 构成A级拥有B级。例如,Body包括Arm,Head,Legs,BankAccount由Balance和TransactionHistory组成。 所以如果类被删除,那么类B也会被删除。
直接的联系与其他三个没有共同之处。 它根本不属于UML,它是IBM需求build模术语 。
至于其他人,
协会A-> B是依赖的孩子。 关联意味着,A(或其实例)有一些简单的方法可以得到B的实例。例如,axyb或者通过函数或者某个局部variables。 或者通过直接引用或者指针,或者其他的东西(世界上有很多种语言)。 如你所见,依赖和结社之间没有严格的界限。
关联的属性之一是聚合,它可以有值:无,共享(通常不正确地称为聚合)和组成。
如果A(或实例)有一些(或一个)B的实例,那么破坏关联意味着破坏B实例,那就是组合。
如果你或者一个工具作者已经决定了,那一些有一个关系,那个构图比较弱,需要特别的显示,你可以使用shared
聚合。 通常它是A中对B的引用的一些集合。
还有一些更有趣的关联属性。 看这里,如果你有兴趣。
对象types之间的关联对这些types的对象之间的关系进行分类。 例如,关联Person
-isEmployedBy- Enterprise
可以将PeterMiller-isEmployedBy-IBM,SusanSmith-isEmployedBy-IBM和SarahAnderson-isEmployedBy-Google之间的关系分类为Person
types的PeterMiller,SusanSmith和SarahAnderson以及types为Google和IBM的typesEnterprise
。 换句话说,关联是两个或多个参与对象types的关系types。 两个对象types之间的关联称为二进制。 虽然二元关联更为常见,但我们也可能需要处理n元关联,其中n是大于2的自然数。例如, Person
isTreatedIn- Hospital
for- Disease
是3元(“三元” )对象typesPerson
, Hospital
和Disease
之间的关联。
我猜想,“直接关联”是指一个定向(或定向)关联,它是一个关联(具有领域类和范围类),表示其领域类中的引用属性。 这种定向关联在其目标端有一个“所有权点”。
有关关联的更多信息,请参阅本书一章 。
并看到我的答案这个问题的聚合和组成的解释。