聚合关系与组合关系有什么区别?
来源:互联网 发布:淘宝清仓冬装 编辑:程序博客网 时间:2024/05/16 01:46
聚合
聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;比如计算机与CPU、公司与员工的关系等;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;
组合
组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;比如你和你的大脑;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;
在UML的概念里,没有什么单向聚合的概念。聚合是一种二元的关联关系,关联的一端是聚集(整体),另一端是组成(部分)。两端不能同时是聚集或者同时是组成。站在你的问题的角度,也就是说所有的聚合都是单向的,不存在所谓的双向聚合。
至于对聚合的理解,打一个比方,如圆和点的关系就是一种聚合关系。圆需要点,且是点的积聚。但点并不依赖于圆,且可以独立存在。但圆和圆心(一种特殊的点)的关系则不是聚合,因为圆心不能独立于圆存在,没有圆,圆心也就失去了意义,它们之间实际上是一种组合关系(一种具有更强约束的聚合)。部分能否独立存在,是聚合与组合的最重要的区别。
对应到代码上,我觉得应该是下面的形式:
class A (组成)
{
};
class B (聚集)
{
A *a;
};
关联和依赖都是指一个对象知道另一个对象。区别在于关联是一种结构关系,表现为一个对象能够获得另一个对象的实例引用并调用它的服务(即使用它);依赖是一种使用关系,表现为一个对象仅仅是调用了另一个对象的服务。
关联:表示类与类之间的连接。它使一个类的可见属性和方法被另一个类使用。关联可以是双向或者单向的。双向的关联箭头是可选的,单向的箭头指向遍历或者查询的方向。
聚合是关联的一种形式,代表两个类之间的整体/局部关系。聚合暗示着整体在概念上处于比局部更高的一个级别,而关联暗示两个类在概念上位于相同的级别.
组合是聚合的一种特殊形式,暗示“局部”在“整体”内部的生存期职责。组合关系是不能共享的。所以,虽然局部不一定要随整体的销毁而被销毁,但整体要么负责保持局部的存活状态,要么负责将其销毁。局部不可与其他整体共享。但是,整体可将所有权转交给另一个对象,后者随即将承担生存期职责。
请问组合聚合的区别
① 聚合(has a)
又分为 一般聚合 和 组合 (狭义的关联)出现的场合很多
组合——外部对象负责管理内部对象的生命周期
例子:人和手 是组合关系 手是人的附属品 最强的has a
人 (外部对象生命周期)
手 (内部对象生命周期)
② 依赖(use a)
用例子区别:依赖、聚合、组合
人 和 车
A. 租车(依赖关系) 车还后,就没有车的引用了;
B. 买车(聚合关系) 不负责管理车的生命周期;
C. 人挂了,车也一起埋了(组合) 完全的附属品。
- 聚合关系与组合关系有什么区别?
- 组合关系和聚合关系有什么区别
- 聚合关系与组合关系
- 组合与聚合的关系
- uml的关联关系中聚合与组合的区别
- 关联关系, 聚合关系,组合关系的区别
- 聚合与组合之间的关系
- UML中聚合与组合的关系
- C++里的组合与聚合关系
- UML基础之组合与聚合关系
- 关联, 聚合, 组合关系
- Apache与Tomcat有什么关系和区别
- Apache与Tomcat有什么关系和区别
- Apache与Tomcat有什么关系和区别
- linux与Unix是什么关系?有什么区别?
- xml中子元素与属性有什么区别和关系?
- Apache与Tomcat有什么关系和区别
- Apache与Tomcat有什么关系和区别
- 逆向迭代器 reverse iterator
- VC6.0图形处理8--Hough变换(下)
- VB 2008下载地址
- 听吴建民讲世界的变化与中国的外交
- 函数指针数组在ARM中断中的应用
- 聚合关系与组合关系有什么区别?
- PCI-E配置MSI中断流程解析
- UML 学习笔记
- DP 亚洲网络赛 砖
- 如何使用iTunes 10制作iPhone手机铃声?
- 组合,关联,聚合的区别
- 简单工厂模式,工厂方法模式,抽象工厂模式 比较
- 应聘时牛人的漂亮的回答
- 应届生备战未来工作之Oracle学习1