UML - 关联或聚合(简单的代码片段)

Joh*_*n V 5 uml class-diagram diagramming associations aggregation

有多少书自相矛盾,让我抓狂。

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
Run Code Online (Sandbox Code Playgroud)

但是很多人说持有引用仍然只是一个关联,并且为了聚合他们使用一个列表 - 恕我直言,这是一样的,它仍然是一个引用。

我很困惑,我想了解这个问题。

例如这里:http : //aviadezra.blogspot.cz/2009/05/uml-association-aggregation-composition.html - 强关联和聚合之间的区别是什么,在这两种情况下,作者都使用一个字段来存储引用。 .

另一个例子:这据说是关联:

在此处输入图片说明

这被称为聚合:

在此处输入图片说明

public class Professor {
  // ...
}

public class Department {
  private List<Professor> professorList;
  // ..

}
Run Code Online (Sandbox Code Playgroud)

再次,有什么区别?它是两种情况下的参考

Ger*_*ner 5

这个问题已经并且将会在许多不同的变体中被多次询问,因为许多人,包括许多知名的开发人员,对这些在 UML 中定义的术语的含义感到困惑。由于这个问题被问了很多次,所以也回答了很多次。见,例如这个答案。我将尝试总结 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

协会委员会-有-ClubMember-as-chair

关联总是通过引用属性进行编码,其范围/类型是关联的类。例如,像这样

class Committee { ClubMember chair; String name;}
Run Code Online (Sandbox Code Playgroud)

在 UML 中,聚合和组合被定义为特殊形式的关联,其预期含义是对部分-整体-关系进行分类。在聚合的情况下,与组合相反,整体的部分可以与其他整体共享。以下聚合示例说明了这一点,其中一门课程可以属于多个学位课程。

聚合示例

组合的定义特征是具有独占(或不可共享)的部分。一个组合可能伴随着整体和部分之间的生命周期依赖,这意味着当一个整体被破坏时,它的所有部分也随之被破坏。但是,这仅适用于某些构图情况,不适用于其他情况,因此它不是一个定义特征。部件(组件)可以与整体(复合物)分离并因此在其破坏中幸存下来的组合物示例如下:

在此处输入图片说明