(转帖)UML中聚集(Aggregation)与组合(Composition)的区别

UML中聚集(Aggregation)与组合(Composition)的区别

Posted on 2005-04-20 20:03 黄金狮子旗下 阅读(1199) 评论(8)  编辑 收藏 收藏至365Key 所属分类: UML设计 

书上是这样描述的:聚集是关联中的一种,聚集对象由部分对象组成;组合又是一种特殊的聚集。在一个组合对象中,部分对象只能作为组成对象的一部分与组合对象同时存在。

即是说,组合是“当聚集对象和它的组成对象之间是具有强关联的一种特殊聚集”,组合对象的关键特征是部分对象只能存在于组合对象之中,并且部分体的寿命可能比组合体短,但组合体消亡,部分体也必然消亡。

我们举例来说明:

聚集

电脑可以由显示器、CPU、主板、硬盘、键盘、鼠标等聚集而成。在这种关系里面,各个组成部分是可以分拆开独立存在的。

组合

衬衣是由主体、衣领、袖口、衣袖、钮扣等组合而成。在这种关系里面,衣袖或者衣领等如果拆分开来并不能算是一个独立的主体,不具有价值了。

树是由树干、树根、树枝、树叶等组合而成的。这里面树叶可以先于树消亡,但如果树被砍掉,那么树叶也没有存在价值了。

多数参考资料上都是上面叙述的那样解释的,不过我觉得理解起来还是有些难度:电脑我把他砸了,电脑坏了,那你说各个组成部分到底是一起消亡了还是没消亡呢?也许应该说至少没有被砸坏的部分还是可以独立使用的;可若这样说的话,那我衬衣破了个洞,我要把衬衣裁减为各个部分,那其他部分是不是也可以拿去拼装为新的衣服?

所以,后来我自己是这样理解的,不知道对不对,大家可以给我指正:同类的几个聚集对象里面的组成对象是可以互换的(比如电脑里面的配件);而同类的几个组合对象里面的组成对象是不能够互换的(正所谓强关联嘛,所以这件衬衣的袖口换到另一件上面不科学;这棵树的叶子也没法装到另一棵树上面去)。

Feedback

# re: UML中聚集(Aggregation)与组合(Composition)的区别   

2005-04-20 21:03 by idior

这个概念一向分的不是很清楚。 很多大家也争论过 , 没什么结果。

# re: UML中聚集(Aggregation)与组合(Composition)的区别   

2005-04-20 21:46 by neuhawk

好像去年高程考这个!

# re: UML中聚集(Aggregation)与组合(Composition)的区别   

2005-04-20 22:06 by 生活、工作

这样理解好像也不大对吧。

# re: UML中聚集(Aggregation)与组合(Composition)的区别   

2005-04-21 00:37 by 常建昭

我觉的这样理解是错的。。。

把电脑砸了(呵呵,想法不错。),你的主板,CPU等还是独立的。。你不能把那些概念给想成物理上的消失,我认为那是种抽象的概念。。你可以把你举的树的例子引用进来,你把电脑砸了,零件还是有用的。。你砸的目标是电脑,而非个别零件。。

# re: UML中聚集(Aggregation)与组合(Composition)的区别   

2005-04-21 08:48 by 黄金狮子旗下

to 常建昭:

你说的是,我就是觉得那部分比较容易混淆,所以故意写成那样的。我真正的理解是下面最后一段嘛。

# re: UML中聚集(Aggregation)与组合(Composition)的区别   

2005-04-21 12:38 by 安琪儿

按照我的理解,上面举的两例似乎都应属于组合。

组合是强关联的聚集,电脑配件从一台电脑中分离出来后,仍然需要进行再次组装才能发挥作用。也可以这样理解组合,它是对所有部件的整合,相互依赖。即便此组合内部分割开来,若要有效,仍然会出现类似的彼组合。

再举个单纯的聚集的例子,一个班级有许多个独立的个体,当班级不存在时,个体仍能单独发挥个人作用。此时整体和部分就不遵从相互依赖的规则,是一种弱关联。

总之,聚集和组合主要体现在关联强度上的不同。

# re: UML中聚集(Aggregation)与组合(Composition)的区别   

2005-04-22 01:08 by 吴正杰

UML宝典上面说明: 生命周期不同

组合在聚集中用来说明部件的生存周期取决于整体即集合的生存周期。

# re: UML中聚集(Aggregation)与组合(Composition)的区别   

2005-05-04 15:58 by 无名

感觉这里边有一个应用环境的问题,就目前看,人的器官和人体之间是组合关系,那时因为器官移植技术还不够发达,如果将来器官移植技术发展了,器官和人体之间可能就成为组合关系了。

3 thoughts on “(转帖)UML中聚集(Aggregation)与组合(Composition)的区别”

  1. 组合在聚集中用来说明部件的生存周期取决于整体即集合的生存周期。没错就是这样啦,别比来比去了。软件系统里有些东西是不能和现实世界硬性比喻的。aggregation: order  和  orderitem order一旦删除,属其所有的orderitem也应被删除。

    composition: car  和 engine 

    这里的生命周期指的是在特定系统里的生命周期。

  2. 上帖有点错误(例子举反了),在此更正

    组合在聚集中用来说明部件的生存周期取决于整体即集合的生存周期。没错就是这样啦,别比来比去了。软件系统里有些东西是不能和现实世界硬性比喻的。aggregation: car  和 engine

    compositon: order  和  orderitem order一旦删除,属其所有的orderitem也应被删除。

     

    这里的生命周期指的是在特定系统里的生命周期。

    判断是aggregation还是compositon的最好依据是,当删除A时,B是否一定要被删除,如是,则是composition,否则,则是aggregation.

Comments are closed.