UML中聚集(Aggregation)与组合(Composition)的区别
UML中,聚集和组成是两个十分相似的概念.书上这样说:聚集是关联中的一种,聚集对象由部分对象组成;组合又是一种特殊的聚集。在一个组合对象中,部分对象只能作为组成对象的一部分与组合对象同时存在。
即是说,组合是“当聚集对象和它的组成对象之间是具有强关联的一种特殊聚集”,组合对象的关键特征是部分对象只能存在于组合对象之中,并且部分体的寿命可能比组合体短,但组合体消亡,部分体也必然消亡。
我们举例来说明:
聚集
电脑可以由显示器、CPU、主板、硬盘、键盘、鼠标等聚集而成。在这种关系里面,各个组成部分是可以分拆开独立存在的。
组合
衬衣是由主体、衣领、袖口、衣袖、钮扣等组合而成。在这种关系里面,衣袖或者衣领等如果拆分开来并不能算是一个独立的主体,不具有价值了。
树是由树干、树根、树枝、树叶等组合而成的。这里面树叶可以先于树消亡,但如果树被砍掉,那么树叶也没有存在价值了。
比如聚集,强调的是整体-部分关联,比如家用计算机系统PC,由主机,键盘,鼠标,显示器,声卡等组成;
而组成则是强类型的聚集,聚集中的每个部分只能属于一个整体,如桌子,由桌面和桌腿组成,这个是区别.
,而也有另外的提法,也大同小异,如:
聚集可以进一步划分成共享聚集和组成。例如,课题组包含许多成员,但是每个成员又可以是另一个课题组的成员,即部分可以参加多个整体,我们称之为共享聚集。另一种情况是整体拥有各部分,部分与整体共存,如整体不存在了,部分也会随之消失,这称为组成。例如,我们打开一个视窗口,它就由标题、外框和显示区所组成。一旦消亡则各部分同时消失。在UML中,聚集表示为空心菱形,组成表示为实心菱形。
所以,后来我自己是这样理解的,不知道对不对,大家可以给我指正:同类的几个聚集对象里面的组成对象是可以互换的(比如电脑里面的配件);而同类的几个组合对象里面的组成对象是不能够互换的(正所谓强关联嘛,所以这件衬衣的袖口换到另一件上面不科学;这棵树的叶子也没法装到另一棵树上面去)。
UML中聚集(Aggregation)与组合(Composition)的区别相关推荐
- UML中的聚合与组合
总结一下聚合和组合的关系. 组合关系(Composition):部分和整体之间具有相同的生命周期,当整体消亡后,部分也将消亡.就像大雁的翅膀和大雁是组合关系.代码实现时,部分类在整体类的构造函数中被构 ...
- DDD中的聚合和UML中的聚合以及组合的关系
UML: 聚合关系:成员对象是整体的一部分,但是成员对象可以脱离整体对象独立存在. 如汽车(Car)与引擎(Engine).轮胎(Wheel).车灯(Light)之间的关系为聚合关系,引擎.轮胎.车灯 ...
- 浅谈UML中的聚合与组合
欢迎大家关注我的新书<Spring Boot趣味实战课> 京东 当当 天猫 大家都知道UML的类图中一般包含五种关系即 关联 聚合 组合 泛化 依赖 有些人可能会感觉组合跟聚合有点 ...
- UML中的组成和聚集
UML中,聚集和组成是两个十分相似的概念.书上这样说:聚集是关联中的一种,聚集对象由部分对象组成:组合又是一种 特殊的聚集 .在一个组合对象中,部分对象只能作为组成对象的一部分与组合对象同时存在. 即 ...
- uml中的关系-类图关系
概述 UML类图中的关系包括: 关联(Association).聚合(Aggregation).组合(Composition).依赖(Dependency).泛化(Generalization).实现 ...
- UML中关联,聚合,组合的区别及C++实现
类间关系 在类图中,除了需要描述单独的类的名称.属性和操作外,我们还需要描述类之间的联系,因为没有类是单独存在的,它们通常需要和别的类协作,创造比单独工作更大的语义.在UML类图中,关系用类框之间的连 ...
- UML中几种类间关系:继承、实现、依赖、关联、聚合、组合的联系与区别
zz from: http://dev.firnow.com/course/3_program/java/javajs/20090219/155939.html UML中几种类间关系:继承.实现.依赖 ...
- UML中依赖,关联,聚合,组合的含义(结合UML图和实战代码详解)
UML中各种关系的含义 1. 什么是UML图? 2. UML图中的各种关系含义 2.1 依赖 2.1.1 简单理解及画法 2.1.2 那么在UML中的依赖是怎样的呢? 2.1.3 实战中UML图的画法 ...
- UML中常见的几种关联关系(依赖、泛化、实现、关联、组合、聚合)
由于经常需要画uml类图,在这里记录下几种关联关系 类与类之间的关联关系主要分为以下几种: 依赖(Dependency) 泛化(Generalization) 实现(Interface Realiza ...
最新文章
- 经典图书《重构:改善既有代码的设计》图灵再版出版倒计时
- EEG数据、伪影的查看与清洗
- 动态规划-背包问题小结
- 在android studio中如何创建一个类来继承另外一个类_在Android使用Transition API检测用户活动...
- 自由职业者和外包接单项目分析
- 在Filfter中使用注解了spring 的bean,报javax.naming.NamingException: Cannot create resource instance...
- 开发一个手游需要的工种
- libevent源码分析系列
- Javascript特效:电商商品展示放大镜
- 【语音隐写】基于matlab DWT音频数字水印嵌入提取【含Matlab源码 350期】
- Windows 最值得推荐的装机必备“神器”软件大合集
- 如何查看自己电脑安装的jdk版本
- matlab转换器dcdc,用 Simulink 设计 DC/DC 转换器
- mysql front 垃圾_MySQL_Front 的缺点
- 微软「警告」员工不要在愚人节搞事情,为什么?
- 开关插头插座寿命试验机标准
- 二叉树的中序遍历算法
- 虚拟机与宿主机网络互通配置
- el-table的纵向合并 横向合并 表头合并
- 达人评测 雷神911mr怎么样