组合和关联关系有什么区别?

22 oop

在OOP中,组合(由UML中的填充菱形表示)与类之间的关联(由UML中的空菱形表示)之间的区别是什么.我有点困惑.什么是聚合?我能有一个令人信服的现实世界的例子吗?

bli*_*egz 35

组成

想象一下,一个软件公司由不同的业务单位(或部门)组成,如Storage BU,Networking BU.汽车BU.这些业务单位的生命周期由组织的生命周期决定.换句话说,没有公司,这些业务单位不能独立存在.这是组成.(即公司是业务部门的组成部分)

协会

软件公司可能有外部餐饮供应商为员工提供食物.这些餐饮服务商不是公司的一部分.但是,他们与公司有关.即使我们的软件公司关闭,餐饮服务也可以存在.他们可能会为另一家公司服 因此,餐饮者的生命周期不受软件公司的生命周期的支配.这是典型的协会

聚合

考虑一个汽车制造单位.我们可以将Car视为整体实体,将Car Wheel视为汽车的一部分.(此时,它可能看起来像组合物.保持开启)轮子可以提前几周创建,并且它可以在装配期间放置在汽车上之前坐在仓库中.在这个例子中,Wheel类的实例显然独立于Car类的实例.因此,与组合不同,在聚合中,所涉及的对象的生命周期不是紧密耦合的.

  • 那么关联和聚合之间有什么区别? (9认同)

Rui*_*iro 17

这里举几个例子:

  • 我是一家公司的员工,因此我与该公司有联系.我不是它的一部分,也不构成它,但是它与它有关.

  • 我是由器官组成的,除非被移植,否则会死于我.这是组合,它是对象之间非常强大的绑定.基本上,对象由其他对象组成.动词说明了一切.

  • 还有另一种不太受限制的组合,称为聚合.聚合是指对象由其他对象组成的时间,但它们的生命周期不一定是并列的.使用极端的例子,乐高玩具是零件的集合.即使玩具可以拆卸,它的部件也可以重新组合成一个不同的玩具.


tpd*_*pdi 11

拥有和使用.

组合物:与参考对象拥有引用的对象,并负责它的"寿命",它的破坏(并且通常创建,尽管它可被传递在).也被称为has-a关系.

协会:与参考对象使用引用的对象,可能不是排他性的用户,并且不负责,他参照的对象的生命周期.也称为使用 -关系.

OP意见:

你能提供一个现实世界的例子吗?另外,什么是聚合? - 马克

聚合:一个从整体到部分的协会,不能是循环的.

例子:

组成:汽车有一个引擎,一个人有一个地址.基本上,必须有,控制一生.

关联:汽车有一个驱动程序,一些类实例有一个错误日志.终身不受控制,可以共享.

聚合:DOM(文档对象模型,即构成HTML元素树的对象)节点具有一个(一组)子节点.节点是顶级(好,更高)级别; 它"包含"它的孩子,它们不包含它.


Pon*_*gge 1

通常,组合意味着所包含对象的生命周期受容器的生命周期限制,而关联是对可以独立存在的对象的引用。

然而,这只是我观察到的做法。我不愿意承认这一点,但深入研究 UML2 规范并不是我要做的有趣事情的前列!