这个问题已经在这里有一个答案:
- 聚合与组合物(闭合) 12分的答案
我查阅了很多关于这些东西的信息,但是无法理解它们之间有什么区别呢? 在福勒的UML精粹说Aggreagation是严格意义的,所以笔者建议不要在图表中使用它。 解释,请,当我应该使用他们每个人,以及它将如何在Java代码中的影响力。
这个问题已经在这里有一个答案:
我查阅了很多关于这些东西的信息,但是无法理解它们之间有什么区别呢? 在福勒的UML精粹说Aggreagation是严格意义的,所以笔者建议不要在图表中使用它。 解释,请,当我应该使用他们每个人,以及它将如何在Java代码中的影响力。
这是一个很有争议的问题。 由于马丁的答案解释 ,订单汇总的产品。 这可以被认为是真实的。 格雷迪Booch的在他的“面向对象分析与设计”带来了一个类似的例子的关联 - 销售与产品在销售,反之亦然有关。 和销售不聚合产品。 因此,所有的例子应该是特定领域的,因为从另一个角度来看的联系可能变得更加具体。 另一个例子是使用段文档的组成。
所以一切都在这一领域的强烈依赖于上下文。 这是OOP。
您可以尝试自己的知识应用到你要设计一个特定的项目。 我建议你阅读的Grady Booch的书,如果你还没有这么做过。 书很多,因为它已被写入,但它仍然是OO的圣经*。
有四种类别的关系
Man
使用类Pen
(钢笔依然存在,当人模) Man
有一个A类Car
(汽车仍然存在时,人模) Man
拥有一类Heart
(当男人死了,心不死) Man
是一类Human
(人是人) 对象的类之间的关系
继承>组成>聚合>协会
协会指两类具有某种关系的,可以是任何东西真的。
组成和聚合两种关联。 区分它们正在考虑最简单的方法“有多难”的关系。 想想,当你删除所有者对象会发生什么。
聚合,聚合对象继续生活。 (认为为了< - >的产品,该产品继续生活)。
组成,聚合的对象与所有人死亡。 (认为段落< - >文件,各段与文档死亡)。
聚合可以说是毫无意义的,因为没有一个非填充金刚石(聚集)一直线图,与非填充箭头(协会)的直线之间确实相差太大了,。 的关系非常相似。 用实心菱形(组成)线却很不同。
UML组合物,聚集和滑动关联是语义概念 ,而不是编程的概念 。 它们的含义可以理解为如下:
(成分组合及聚集是特殊类型的关联。)
在Java中,你可以实现所有的人都以同样的方式。 这是一个概念上的差异。
关联是类,其中一个类的实例有场参考另一类的一个实例之间的任何关系。
组成一个“强”的关系,这意味着一个实例(父)“拥有”一个又一个(孩子)。
这是没有比成为协会的其他任何附加的语义聚合。
查看更多在这里: http://martinfowler.com/bliki/AggregationAndComposition.html
编辑:您可以添加一些特殊的语义聚集符号,如“也许是受最大一个母公司在同一时间内所拥有的,但可能会改变的父母,或者是一个孤儿。” 但是,这种扩展是你自己,而不是在UML定义的,据我所知。
似乎有一些争论哪个字是哪个。
它有对象,什么时候你删除父恰好孩子之间的亲子关系的事情。
一种可能的情况说,孩子们之外,他们的父母没有生命,所以当父被删除,他们应该被删除。 想想外键和关系型数据库“DELETE CASCADE”。
另一种情况说,孩子们应该持续超过他们的父母,所以当他们的父母被删除他们不应该被删除。
我要把它留给别人争论哪个字描述了每一种情况。