大家都知道UML的类图中一般包含五种关系即 关联聚合组合泛化 依赖 有些人可能会感觉组合跟聚合有点难区分 说难其实是相对其他几种关系而言 实际上想分清这两种关系一点也不难
聚合跟组合其实都属于关联 只不过它们是两种特殊的关联 因为本是同根生 所以它们之间难免会有相似之处 下面让我们一起来看一下它们之间有何不同
聚合与组合的概念相信不用我在此赘述大家就已经了解了 下面直接上例子
程老师的《大话》里举大那个大雁的例子很贴切 在此我就借用一下 大雁喜欢热闹害怕孤独 所以它们一直过着群居的生活 这样就有了雁群 每一只大雁都有自己的雁群 每个雁群都有好多大雁 大雁与雁群的这种关系就可以称之为聚合 另外每只大雁都有两只翅膀 大雁与雁翅的关系就叫做组合 有此可见 聚合的关系明显没有组合紧密 大雁不会因为它们的群主将雁群解散而无法生存 而雁翅就无法脱离大雁而单独生存——组合关系的类具有相同的生命周期
聚合关系图:
组合关系图:
从从代码上看这两种关系的区别在于:
构造函数不同
雁群类:
大雁类:
聚合关系的类里含有另一个类作为参数
雁群类(GooseGroup)的构造函数中要用到大雁(Goose)作为参数把值传进来 大雁类(Goose)可以脱离雁群类而独立存在
组合关系的类里含有另一个类的实例化
大雁类(Goose)在实例化之前 一定要先实例化翅膀类(Wings) 两个类紧密耦合在一起 它们有相同的生命周期 翅膀类(Wings)不可以脱离大雁类(Goose)而独立存在
信息的封装性不同
在聚合关系中,客户端可以同时了解雁群类和大雁类,因为他们都是独立的
而在组合关系中,客户端只认识大雁类,根本就不知道翅膀类的存在,因为翅膀类被严密的封装在大雁类中。
以上内容部分出自望月听涛博客
分享到:
相关推荐
UML 聚合和组合的区别
UML类图中的关联、聚合和组合 UML类图中的关联、聚合和组合
UML中依赖泛化关联实现聚合组合的C#实现UML中依赖泛化关联实现聚合组合的C#实现
UML中依赖泛化关联实现聚合组合的Java实现
UML中几种类间关系:继承、实现、依赖、关联、聚合、组合的联系与区别 这是一堂关于UML基础知识的补习课;现在我们做项目时间都太紧了,基本上都没有做过真正的class级别的详细设计,更别提使用UML来实现规范 建模了...
UML学习之依赖_关联_聚合_组合_继承
UML关系(泛化,实现,依赖,关联(聚合,组合))
UML中依赖泛化关联实现聚合组合的C#实现_配UML图.doc
UML的目标是以面向对象图的方式来描述任何类型的系统,具有很宽的应用领域。其中最常用的是建立软件系统的模型,但它同样可以用于描述非软件领域的系统,如机械系统、企业机构或业务过程,以及处理复杂数据的信息...
浅谈OOP之uml设计模式,北大UMLppt文档。
UML中几种类间关系:继承、实现、依赖、关联、聚合、组合的联系与区别
UML类关系-依赖,关联,聚合和组合 这几种关系很容易混淆,一个总结文档。
浅谈面向对象建模语言UML.pdf浅谈面向对象建模语言UML.pdf
UML中类图中的几个关系:关联、组合、聚 合、依赖关系
NULL 博文链接:https://newtime.iteye.com/blog/505170
UML中文参考手册UML中文参考手册UML中文参考手册
UML继承聚合泛化依赖的实用解释[整理].pdf
UML继承聚合泛化依赖的实用解释[收集].pdf
描述UML语言中的类目,介绍类目的种类、可见性和作用域
UML类图关系泛化、继承、实现、依赖、关联、聚合、组合.doc