我明白聚合和组合的区别,但我挣扎了一下有关联。 我的当前理解的是,类之间存在关联时'它们使用彼此,例如,一个对象是一个方法调用期间传递到另一个。 也可以看看:
http://www.codeproject.com/Articles/330447/Understanding-Association-Aggregation-and-Composit
两个对象独立存在和,而相比之下,聚集,没有对象是容器类的其他的。 这是否意味着这两个对象必须有其他的(一个或多个)的复印件(如1:M的关系),或者是怎么回事是“存储”的关联。 任何反馈将是非常赞赏。
从UML上层建筑2.4.1:
协会宣称可以有相关类型的实例之间的联系。 链接是与用于关联,其中,每个值是端部的类型的实例的每一端的一个值的元组。 (UML上层建筑,页37)
仅此而已,无所不及。 而且很模糊。 正因为如此,也很难理解。 我定义的(在我上完课)是从依赖于组成,其中一个链接层次结构:
- 从依赖
A
到B
意味着A
使用B
(通过接收它的实例,并将它们转发到其他对象的发言权),但间接地。 - 从协会
A
到B
意味着A
使用B
直接(例如,通过调用方法) - 从聚合
A
到B
意味着B
是的一部分A
(语义上),但B
可以共享和如果A
被删除, B
不会被删除。 需要注意的是,这并未提及如何“的部分”执行。 - 从组合物
A
到B
就像聚合,其中B
不能共享,如果A
被删除,所有它的聚集体(的B
多个)也被删除。
聚合是一个关联关系,其中所述关联可以被认为是包含类“拥有”所包含的类,并没有定义这种关系的寿命。
协会是一个“有-A”的关系。
例:-
public class Person
{
private final Name name;
private Address currentAddress;
//...
}
在这种情况下,人有-A的名字,并已-A地址,所以Person和名称,以及人与地址之间的关联。
的关联描述一个或多个类的实例之间的关系。 在UML参考手册的话,“关联是保持在一起的系统的粘合剂。”
聚合是关联的一种形式,其中有一个“整体 - 部分”的关系。 你可能会说,如果一个类飞机拥有一流的引擎那么这形成了一个“整体 - 部分”关系。
聚合
让我们的条款。 聚集是在UML标准一个metaterm的装置,以及BOTH组合物和共享聚集,简单地命名为共享 。 常常被错误地命名为“聚合”。 它是坏的,对于成分是聚集了。 据我所知,你的意思你懂的“共享聚合和组合”。
从UML标准:
共享聚集精确语义因应用领域和建模而变化。
我还没有找到一个关于聚集认为多重字,例如。
协会。
从UML 3.4.1标准的定义:
关联描述一个元组,其值是指类型的实例。 关联的实例被称为链接。 链接是与用于关联,其中,每个值是端部的类型的实例的每一端的一个值的元组。
聚合关系协会的一个子类。
协会是基于关系。 IT是模型胶水。
但是你的感情没有说谎 - 作为共享聚集没有严格的定义,也就是协会和聚合之间的关联关系不作任何严格定义的边界。 工具和模型设计者作者必须设置它自己。
协会
它代表两个或多个对象,所有的物体都有自己的生命周期,也没有业主之间的关系。 协会的名称指定对象之间关系的性质。 这是由实线表示。
让我们老师和学生之间的关系的一个例子。 多个学生可以与单个关联老师和一个学生可以与多个教师关联。 但对象之间没有所有权,并都有自己的生命周期。 两者都可以创建并单独删除。
聚合
这是协会,所有物体都有自己的生命周期,但有所有权的一种特殊形式。 这表示“整体 - 部分或部分-的”关系。 这是通过一个空心菱形后跟行表示。
让我们部和教师之间关系的一个例子。 教师可能属于多个部门。 因此,教师是多个部门的一部分。 但是,如果我们删除部门,教师目标不会破坏。
这取决于上下文。
协会 :一名男子驾驶汽车,专注于主叫方和被叫方的关系。
聚集 :一个人拥有一辆汽车,专注于业主和成员关系。
组合物 :一个人有一个口,着眼于所有者构件但主人由成员组成,这意味着他们共享相同的生命周期。
感觉就像我讲中式英语。
协会
协会是一个关系,其中所有的对象都有自己的生命周期,也没有主人。 让我们老师和学生的例子。 多个学生可以与单个关联老师和一个学生可以与多个教师交往,但有对象和都有自己的生命周期之间没有所有权。 两者都可以创建和删除独立。
聚合
在聚集的对象都有自己的生命周期,但没有所有权。 子对象不能属于另一个父对象。 让我们以部门和教师的例子。 单老师不能属于多个部门,但如果我们删除部门教师目标不会破坏。 我们可以想想“有”的关系。
组成
这是一个强大的集聚类型。 儿童对象没有自己的生命周期,如果父对象删除所有子对象也将被删除。 让我们再次拿房子和房间之间的关系的一个例子。 房子可以包含多个房间有房间没有独立生活,如果我们删除的房子房间会自动删除任何房间不能属于两个不同的房子。
对象类型之间的关联进行分类这些类型的对象之间的关系。 例如,关联Committee
-has- ClubMember
-as-椅子,其可视化,如下所示在类图的连接线,也可以在关系FinanceCommittee-具有-PeterMiller-AS-椅子分类,RecruitmentCommittee-HAS-苏珊·史密斯,如-主席和AdvisoryCommittee-具有-SarahAnderson-AS-椅子,其中,所述对象PeterMiller,苏珊·史密斯和SarahAnderson是类型的ClubMember
,并且对象FinanceCommittee,RecruitmentCommittee和AdvisoryCommittee是类型的Committee
。
另请参见我的替代CodeProject上的文章 。