有多少书自相矛盾,真让我抓狂。
Class A {} class B {void UseA(A a)} //some say this is an association,
no reference is held but communication is possible
Class A {} class B {A a;} //some say this is
aggregration, a reference is held
但许多人说,持有引用仍然只是一个关联,并且为了聚合,他们使用列表 - 恕我直言,这是相同的,它仍然是一个引用。
我很困惑,我想了解这个问题。
例如。这里:http://aviadezra.blogspot.cz/2009/05/uml-association-aggregation-composition.html http://aviadezra.blogspot.cz/2009/05/uml-association-aggregation-composition.html- 强关联和聚合之间有什么区别,在这两种情况下,作者都使用字段来存储引用。
另一个例子:
据说这是协会:
这就是聚合:
public class Professor {
// ...
}
public class Department {
private List<Professor> professorList;
// ..
}
再说一遍,有什么区别?这两种情况都有参考意义
这个问题已经并且将会以许多不同的变体被多次提出,因为许多人,包括许多知名开发人员,对这些在 UML 中定义的术语的含义感到困惑。由于这个问题被问了很多次,所以也被回答了很多次。参见,例如这个答案 https://stackoverflow.com/questions/734891/aggregation-versus-composition/27889087#27889087。我将尝试总结 UML 定义。
两个类之间的关联不是通过方法参数建立的,而是通过引用属性(类属性)建立的,其范围/类型是关联的类。如果方法参数的类型是类,则这不会建立关联,而是建立关联依赖性关系。
在查看关联的编码方式之前,必须首先理解关联的逻辑概念。对象类型之间的关联对这些类型的对象之间的关系进行分类。例如,协会Committee
-has-ClubMember
-as-chair,在下面所示的类图中可视化为连接线,可以对关系进行分类:FinanceCommittee-has-PeterMiller-as-chair、RecruitmentCommittee-has-SusanSmith-as-chair 和 AdvisoryCommittee-has-SarahAnderson-as -chair,其中对象 PeterMiller、SusanSmith 和 SarahAnderson 属于类型ClubMember
,并且对象 FinanceCommittee、RecruitmentCommittee 和 AdvisoryCommittee 的类型为Committee
.
关联始终通过引用属性进行编码,其范围/类型是关联的类。比如说像这样
class Committee { ClubMember chair; String name;}
在 UML 中,聚合和组合被定义为特殊形式的关联,其预期含义是对部分-整体关系进行分类。在聚合的情况下,与组合相反,整体的部分可以与其他整体共享。下面的聚合示例对此进行了说明,其中一门课程可以属于多个学位课程。
组合物的定义特征是具有独占(或不可共享)的部分。组合可能具有整体与其部分之间的生命周期依赖性,这意味着当整体被破坏时,其所有部分也随之被破坏。然而,这仅适用于某些合成情况,不适用于其他情况,因此它不是一个定义特征。一个组合的例子如下:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)