来源:http://trac.seagullproject.org/wiki/Standards/CompositionVersusAggregation

组合vs.聚合

当你要设法理解两个对象间的关系时,组合对聚合的研究通常被提到.为了完整性,会提到一个第三关系,关联.到目前为止,关于这个主题最好的研究可浏览这篇文章.以下是作者提交的总结:

组合:破坏整体的同时也破坏了部分(或致使无意义),这时我们就有了组合.

聚合:破坏成分的同时也破坏了整体(或致使无意义),这时我们就有了聚合.

组合实例:破坏数据库的同时也破坏了数据表.但破坏了数据库中的数据表不会破坏数据库

聚合实例:分解'Simon和Garfunkel'组合不能摧毁Paul或Art,但是摧毁了Paul和Art却能够终止'Simon和Garfunkel'组合.

Martin Fowler添加了这些观察资料:

这些是UML中比较凌乱的部分.聚合出现的原因是更应归于创建标准的人际关系的动态学胜过任何技术理由.我建议你忽视聚合.组合有时候是有用的,除非你想当一个真正的有想像力的UML编写者,要不然我是不会担心太多.基本上,组合和聚合引起的混乱更过他们的价值。

另一些讨论:

组合和聚合

在UML中关联只是关系的一种类型.在这个文章中我们将考虑多于两种的其它UML关系并留下其它的作为后面的使用.组合和聚合关系其实只是关联中的不同滋味.聚合是关联的一种类型,它表示一个类的对象表现为其它类的对象的部分的关系;你将会听到人们谈及聚合作为部分-整体的关系.聚合关系由一个实心的线,最后加一个指向在关系中象征“整体”的类的未填充的菱形.

这样的话,在源代码中聚合象什么呢?答案是,'它信赖于你所请求对象'.聚合是个有点含糊的概念,这个概念传达了一个有生命周期的信赖关系.一些人使用聚合意味着整体类负责创建和破坏(留下来做为垃圾收藏)部分类的对象约定.其它人更自由地使用关系.最后.为了避免混乱,尽可能在你的团队中明确地达成协议。

聚合关系更强壮的形式叫做组合.组合关系和聚合关系一样,除了任何时候一部分对象只能够属于一个整体对象.至少这次我们知道我们必须编写一些代码来检查约束.

 
standards/compositionversusaggregation.txt · 最后更改: 2006/04/11 10:25 (外部编辑)
 
Except where otherwise noted, content on this wiki is licensed under the following license:GNU Free Documentation License 1.2