UML中,聚集和组成是两个十分相似的概念.书上这样说:聚集是关联中的一种,聚集对象由部分对象组成;组合又是一种特殊的聚集。在一个组合对象中,部分对象只能作为组成对象的一部分与组合对象同时存在。
即是说,组合是“当聚集对象和它的组成对象之间是具有强关联的一种特殊聚集”,组合对象的关键特征是部分对象只能存在于组合对象之中,并且部分体的寿命可能比组合体短,但组合体消亡,部分体也必然消亡。

我们举例来说明:

聚集
电脑可以由显示器、CPU、主板、硬盘、键盘、鼠标等聚集而成。在这种关系里面,各个组成部分是可以分拆开独立存在的。

组合
衬衣是由主体、衣领、袖口、衣袖、钮扣等组合而成。在这种关系里面,衣袖或者衣领等如果拆分开来并不能算是一个独立的主体,不具有价值了。
树是由树干、树根、树枝、树叶等组合而成的。这里面树叶可以先于树消亡,但如果树被砍掉,那么树叶也没有存在价值了。

比如聚集,强调的是整体-部分关联,比如家用计算机系统PC,由主机,键盘,鼠标,显示器,声卡等组成;
而组成则是强类型的聚集,聚集中的每个部分只能属于一个整体,如桌子,由桌面和桌腿组成,这个是区别.
,而也有另外的提法,也大同小异,如:

聚集可以进一步划分成共享聚集和组成。例如,课题组包含许多成员,但是每个成员又可以是另一个课题组的成员,即部分可以参加多个整体,我们称之为共享聚集。另一种情况是整体拥有各部分,部分与整体共存,如整体不存在了,部分也会随之消失,这称为组成。例如,我们打开一个视窗口,它就由标题、外框和显示区所组成。一旦消亡则各部分同时消失。在UML中,聚集表示为空心菱形,组成表示为实心菱形。

所以,后来我自己是这样理解的,不知道对不对,大家可以给我指正:同类的几个聚集对象里面的组成对象是可以互换的(比如电脑里面的配件);而同类的几个组合对象里面的组成对象是不能够互换的(正所谓强关联嘛,所以这件衬衣的袖口换到另一件上面不科学;这棵树的叶子也没法装到另一棵树上面去)。

UML中聚集(Aggregation)与组合(Composition)的区别相关推荐

  1. UML中的聚合与组合

    总结一下聚合和组合的关系. 组合关系(Composition):部分和整体之间具有相同的生命周期,当整体消亡后,部分也将消亡.就像大雁的翅膀和大雁是组合关系.代码实现时,部分类在整体类的构造函数中被构 ...

  2. DDD中的聚合和UML中的聚合以及组合的关系

    UML: 聚合关系:成员对象是整体的一部分,但是成员对象可以脱离整体对象独立存在. 如汽车(Car)与引擎(Engine).轮胎(Wheel).车灯(Light)之间的关系为聚合关系,引擎.轮胎.车灯 ...

  3. 浅谈UML中的聚合与组合

    欢迎大家关注我的新书<Spring Boot趣味实战课> 京东 当当 天猫 ​ 大家都知道UML的类图中一般包含五种关系即  关联 聚合 组合 泛化 依赖  有些人可能会感觉组合跟聚合有点 ...

  4. UML中的组成和聚集

    UML中,聚集和组成是两个十分相似的概念.书上这样说:聚集是关联中的一种,聚集对象由部分对象组成:组合又是一种 特殊的聚集 .在一个组合对象中,部分对象只能作为组成对象的一部分与组合对象同时存在. 即 ...

  5. uml中的关系-类图关系

    概述 UML类图中的关系包括: 关联(Association).聚合(Aggregation).组合(Composition).依赖(Dependency).泛化(Generalization).实现 ...

  6. UML中关联,聚合,组合的区别及C++实现

    类间关系 在类图中,除了需要描述单独的类的名称.属性和操作外,我们还需要描述类之间的联系,因为没有类是单独存在的,它们通常需要和别的类协作,创造比单独工作更大的语义.在UML类图中,关系用类框之间的连 ...

  7. UML中几种类间关系:继承、实现、依赖、关联、聚合、组合的联系与区别

    zz from: http://dev.firnow.com/course/3_program/java/javajs/20090219/155939.html UML中几种类间关系:继承.实现.依赖 ...

  8. UML中依赖,关联,聚合,组合的含义(结合UML图和实战代码详解)

    UML中各种关系的含义 1. 什么是UML图? 2. UML图中的各种关系含义 2.1 依赖 2.1.1 简单理解及画法 2.1.2 那么在UML中的依赖是怎样的呢? 2.1.3 实战中UML图的画法 ...

  9. UML中常见的几种关联关系(依赖、泛化、实现、关联、组合、聚合)

    由于经常需要画uml类图,在这里记录下几种关联关系 类与类之间的关联关系主要分为以下几种: 依赖(Dependency) 泛化(Generalization) 实现(Interface Realiza ...

最新文章

  1. 经典图书《重构:改善既有代码的设计》图灵再版出版倒计时
  2. EEG数据、伪影的查看与清洗
  3. 动态规划-背包问题小结
  4. 在android studio中如何创建一个类来继承另外一个类_在Android使用Transition API检测用户活动...
  5. 自由职业者和外包接单项目分析
  6. 在Filfter中使用注解了spring 的bean,报javax.naming.NamingException: Cannot create resource instance...
  7. 开发一个手游需要的工种
  8. libevent源码分析系列
  9. Javascript特效:电商商品展示放大镜
  10. 【语音隐写】基于matlab DWT音频数字水印嵌入提取【含Matlab源码 350期】
  11. Windows 最值得推荐的装机必备“神器”软件大合集
  12. 如何查看自己电脑安装的jdk版本
  13. matlab转换器dcdc,用 Simulink 设计 DC/DC 转换器
  14. mysql front 垃圾_MySQL_Front 的缺点
  15. 微软「警告」员工不要在愚人节搞事情,为什么?
  16. 开关插头插座寿命试验机标准
  17. 二叉树的中序遍历算法
  18. 虚拟机与宿主机网络互通配置
  19. el-table的纵向合并 横向合并 表头合并
  20. 达人评测 雷神911mr怎么样

热门文章

  1. c语言画猪程序,数学思维+C语言画小猪佩奇,来试试?
  2. Linux中shell常用的基础命令
  3. python cs架构 运维_运维架构师-Python 自动化运维开发-005
  4. win7 win8下 dvorak 的安装和练习
  5. 基于SSH的物流配送信息管理平台设计与实现
  6. 关于作者:一些想说的话
  7. 基于ArcGIS水文流域分析
  8. spring 事务 hibernate 原生slq 原生连接问题
  9. GOOGLE的图标遐想
  10. nlp-with-transformers系列-04_多语言命名实体识别