8

我理解聚合和组合之间的区别,但我在关联方面有点挣扎。我目前的理解是,当“它们相互使用”时,类之间存在关联,例如,在方法调用期间将一个对象传递给另一个对象。也可以看看:

http://www.codeproject.com/Articles/330447/Understanding-Association-Aggregation-and-Composit

两个对象都是独立存在的,与聚合相反,没有一个对象是另一个对象的容器类。这是否意味着两个对象都必须具有其他对象的副本(例如 1:m 关系)或关联如何“存储”。任何反馈将不胜感激。

4

8 回答 8

11

从 UML 上层结构 2.4.1:

关联声明关联类型的实例之间可以存在链接。链接是一个元组,关联的每一端都有一个值,其中每个值都是端类型的一个实例。(UML 上层建筑,第 37 页)

不多也不少。而且很模糊。正因为如此,它也很难理解。我定义的(在我教授的课程中)是从依赖到组合的链接层次结构,其中:

  1. A从to 的依赖B意味着A使用B但间接(例如通过接收它的实例并将它们转发给其他对象)。
  2. 关联 from AtoB表示直接A使用B,(例如通过调用方法)
  3. A从to聚合B意味着它BA(语义上)的一部分,但B可以共享,如果A被删除,B则不会被删除。请注意,这并没有说明“is part”是如何实现的。
  4. 组合 from AtoB就像聚合,B不能共享,如果A被删除,它的所有聚合(Bs)也会被删除。
于 2012-10-26T07:54:01.043 回答
3

聚合是一种关联关系,其中关联可以被认为是包含类“拥有”包含的类,并且该关系的生命周期没有定义。

关联是一种“有-A”关系。

例子:-

  public class Person  
  {  
   private final Name name;  
   private Address currentAddress;  

   //...  
 } 

在本例中,Person Has-A name 和 Has-A Address,因此 Person 和 Name 以及 Person 和 Address 之间存在关联。

于 2012-10-24T07:59:48.397 回答
2

关联描述了一个或多个类的实例之间的关系。用 UML 参考手册的话来说,“关联是把一个系统结合在一起的粘合剂”。

聚合是一种关联形式,其中存在“整体-部分”关系。你可能会说,如果一个类飞机有一个类引擎,那么这就形成了一个“整体”关系。

于 2012-10-24T07:59:17.763 回答
1

聚合

让我们设定条款。Aggregation 是 UML 标准中的一个元术语,表示组合和共享聚合,简称为shared。它经常被错误地命名为“聚合”。这很糟糕,因为组合也是一种聚合。据我了解,您的意思是您了解“共享聚合和组合”。

从UML标准:

共享聚合的精确语义因应用领域和建模者而异。

例如,我还没有找到关于聚合假设的多重性的词。

协会。

UML 3.4.1 标准的定义:

关联描述一组元组,其值引用类型化的实例。关联的实例称为链接。链接是一个元组,关联的每一端都有一个值,其中每个值都是端类型的一个实例。

聚合关系是关联的子类。

关联是基于关系的。IT 是模型的粘合剂。

但是您的感觉并没有说谎-由于没有严格定义共享聚合,因此关联和聚合关联之间也没有任何严格定义的边界。工具的作者和建模者必须自己设置。

于 2014-01-22T14:00:15.010 回答
1

协会

它表示两个或多个对象之间的关系,其中所有对象都有自己的生命周期并且没有所有者。关联的名称指定对象之间关系的性质。这由实线表示。

让我们以教师和学生之间的关系为例。多个学生可以与一个老师关联,一个学生可以与多个老师关联。但是对象之间没有所有权,并且都有自己的生命周期。两者都可以独立创建和删除。

聚合

它是一种特殊的关联形式,其中所有对象都有自己的生命周期,但有所有权。这表示“整体或部分”关系。这由一个空心菱形和一条线表示。

让我们以部门和教师之间的关系为例。一个教师可能属于多个部门。因此,老师是多个部门的一部分。但是如果我们删除一个部门,Teacher Object 不会被销毁。

于 2015-02-26T06:15:45.120 回答
1

这取决于上下文。

协会:一个人开车,关注呼叫者和被呼叫者的关系。

聚合:男人有车,注重车主和会员的关系。

组成:一个人有一张嘴,专注于所有者和成员,但所有者由成员组成,这意味着他们共享相同的生命周期。

感觉我在说中式英语。

于 2019-01-24T08:12:28.650 回答
1

协会

关联是所有对象都有自己的生命周期并且没有所有者的关系。让我们以教师和学生为例。多个学生可以与一个老师关联,一个学生可以与多个老师关联,但是对象之间没有所有权,并且都有自己的生命周期。两者都可以独立创建和删除。

聚合

聚合中的对象有自己的生命周期,但有所有权。子对象不能属于另一个父对象。让我们以部门和老师为例。单个教师不能属于多个部门,但如果我们删除部门的教师对象不会破坏。我们可以考虑“有”的关系。

作品

它是一种强大的聚合类型。子对象没有它们的生命周期,如果父对象删除,所有子对象也将被删除。让我们再举一个 House 和 room 之间关系的例子。房子可以包含多个房间,房间没有独立的生命,任何房间不能属于两个不同的房子,如果我们删除房子房间会自动删除。

于 2019-04-17T07:15:51.903 回答
0

对象类型之间的关联对这些类型的对象之间的关系进行分类。例如,关联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

协会委员会有分会会员为主席

另请参阅我的替代 CodeProject 文章

于 2015-03-23T14:19:37.640 回答