协会与聚集[复制]协会与聚集[复制](Association vs. Aggregation [du

2019-05-13 08:17发布

这个问题已经在这里有一个答案:

  • 聚合与组合物(闭合) 12分的答案

我查阅了很多关于这些东西的信息,但是无法理解它们之间有什么区别呢? 在福勒的UML精粹说Aggreagation是严格意义的,所以笔者建议不要在图表中使用它。 解释,请,当我应该使用他们每个人,以及它将如何在Java代码中的影响力。

Answer 1:

这是一个很有争议的问题。 由于马丁的答案解释 ,订单汇总的产品。 这可以被认为是真实的。 格雷迪Booch的在他的“面向对象分析与设计”带来了一个类似的例子的关联 - 销售与产品在销售,反之亦然有关。 和销售不聚合产品。 因此,所有的例子应该是特定领域的,因为从另一个角度来看的联系可能变得更加具体。 另一个例子是使用段文档的组成。

所以一切都在这一领域的强烈依赖于上下文。 这是OOP。

您可以尝试自己的知识应用到你要设计一个特定的项目。 我建议你阅读的Grady Booch的书,如果你还没有这么做过。 书很多,因为它已被写入,但它仍然是OO的圣经*。



Answer 2:

有四种类别的关系

  1. 协会: 使用
    例如:一类Man使用类Pen (钢笔依然存在,当人模)
  2. 聚集:
    例如:一类Man有一个A类Car (汽车仍然存在时,人模)
  3. 组成: 拥有
    例如:一类Man拥有一类Heart (当男人死了,心不死)
  4. 继承:
    例如:一类Man是一类Human (人是人)

对象的类之间的关系

继承>组成>聚合>协会



Answer 3:

协会指两类具有某种关系的,可以是任何东西真的。

组成和聚合两种关联。 区分它们正在考虑最简单的方法“有多难”的关系。 想想,当你删除所有者对象会发生什么。

聚合,聚合对象继续生活。 (认为​​为了< - >的产品,该产品继续生活)。

组成,聚合的对象与所有人死亡。 (认为​​段落< - >文件,各段与文档死亡)。

聚合可以说是毫无意义的,因为没有一个非填充金刚石(聚集)一直线图,与非填充箭头(协会)的直线之间确实相差太大了,。 的关系非常相似。 用实心菱形(组成)线却很不同。



Answer 4:

UML组合物,聚集和滑动关联是语义概念 ,而不是编程的概念 。 它们的含义可以理解为如下:

  • 组合物 :A由B的; B是A的一部分,并因此而不A可以不存在
  • 聚合 :A拥有B,B属于甲
  • 协会 :A使用B,A在给定的方式为B

(成分组合及聚集是特殊类型的关联。)

在Java中,你可以实现所有的人都以同样的方式。 这是一个概念上的差异。



Answer 5:

关联是类,其中一个类的实例有场参考另一类的一个实例之间的任何关系。

组成一个“强”的关系,这意味着一个实例(父)“拥有”一个又一个(孩子)。

这是没有比成为协会的其他任何附加的语义聚合。

查看更多在这里: http://martinfowler.com/bliki/AggregationAndComposition.html

编辑:您可以添加一些特殊的语义聚集符号,如“也许是受最大一个母公司在同一时间内所拥有的,但可能会改变的父母,或者是一个孤儿。” 但是,这种扩展是你自己,而不是在UML定义的,据我所知。



Answer 6:

似乎有一些争论哪个字是哪个。

它有对象,什么时候你删除父恰好孩子之间的亲子关系的事情。

一种可能的情况说,孩子们之外,他们的父母没有生命,所以当父被删除,他们应该被删除。 想想外键和关系型数据库“DELETE CASCADE”。

另一种情况说,孩子们应该持续超过他们的父母,所以当他们的父母被删除他们不应该被删除。

我要把它留给别人争论哪个字描述了每一种情况。



文章来源: Association vs. Aggregation [duplicate]
标签: java oop uml