欢迎大家关注我的新书《Spring Boot趣味实战课》

京东 当当 天猫

大家都知道UML的类图中一般包含五种关系即  关联 聚合 组合 泛化 依赖  有些人可能会感觉组合跟聚合有点难区分 说难其实是相对其他几种关系而言 实际上想分清这两种关系一点也不难

聚合跟组合其实都属于关联 只不过它们是两种特殊的关联 因为本是同根生 所以它们之间难免会有相似之处 下面让我们一起来看一下它们之间有何不同

聚合与组合的概念相信不用我在此赘述大家就已经了解了 下面直接上例子

程老师的《大话》里举大那个大雁的例子很贴切 在此我就借用一下 大雁喜欢热闹害怕孤独 所以它们一直过着群居的生活 这样就有了雁群 每一只大雁都有自己的雁群 每个雁群都有好多大雁 大雁与雁群的这种关系就可以称之为聚合 另外每只大雁都有两只翅膀 大雁与雁翅的关系就叫做组合 有此可见 聚合的关系明显没有组合紧密 大雁不会因为它们的群主将雁群解散而无法生存 而雁翅就无法脱离大雁而单独生存——组合关系的类具有相同的生命周期

聚合关系图:

组合关系图:

从从代码上看这两种关系的区别在于:

构造函数不同

雁群类:

    public  class GooseGroup{public Goose goose;public GooseGroup(Goose goose){this.goose = goose;}}

大雁类:

    public class Goose{public Wings wings;public Goose(){wings=new Wings();}}

聚合关系的类里含有另一个类作为参数

雁群类(GooseGroup)的构造函数中要用到大雁(Goose)作为参数把值传进来 大雁类(Goose)可以脱离雁群类而独立存在

组合关系的类里含有另一个类的实例化

大雁类(Goose)在实例化之前 一定要先实例化翅膀类(Wings) 两个类紧密耦合在一起 它们有相同的生命周期 翅膀类(Wings)不可以脱离大雁类(Goose)而独立存在

信息的封装性不同

在聚合关系中,客户端可以同时了解雁群类和大雁类,因为他们都是独立的

而在组合关系中,客户端只认识大雁类,根本就不知道翅膀类的存在,因为翅膀类被严密的封装在大雁类中。

浅谈UML中的聚合与组合相关推荐

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

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

  2. UML中的聚合与组合

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

  3. 浅谈UML中常用的几种图——鲁棒图

    什么是鲁棒图 鲁棒图包含 3 种元素(如图 8-2 所示),它们分别是边界对象.控制对象.实体对象: 边界对象对模拟外部环境和未来系统之间的交互进行建模.边界对象负责接收外部输入,处理内部内容的解释, ...

  4. 浅谈UML类图中类之间的5种关系

    什么是UML类图? 类图显示了一组类.接口.协作以及他们之间的关系.在UML中问题域最终要被逐步转化,通过类来建模,通过编程语言构建这些类从而实现系统.类加上他们之间的关系就构成了类图,类图中还可以包 ...

  5. python中zip的使用_浅谈Python中的zip()与*zip()函数详解

    前言 1.实验环境: Python 3.6: 2.示例代码地址:下载示例: 3.本文中元素是指列表.元组.字典等集合类数据类型中的下一级项目(可能是单个元素或嵌套列表). zip(*iterables ...

  6. rnss和rdss的应用_浅谈北斗二代RDSS和RNSS组合技术.doc

    浅谈北斗二代RDSS和RNSS组合技术 浅谈北斗二代RDSS和RNSS组合技术 [摘 要]正在组网建设的"北斗二代"系统不仅完全继承兼容"北斗一代",在用户容量 ...

  7. rnss和rdss的应用_浅谈北斗二代RDSS与RNSS组合技术

    龙源期刊网 http://www.qikan.com.cn 浅谈北斗二代 RDSS 与 RNSS 组合技术 作者:陈德旭 王成皇 刘延鹏 来源:<中国科技博览> 2015 年第 07 期 ...

  8. 浅谈Android中的MVP与动态代理的结合

    浅谈Android中的MVP与动态代理的结合 本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 在Android开发平台上接触MVP足足算起来大概已经有一个年头左右.从最开始到现在经 ...

  9. java 中的单元测试_浅谈Java 中的单元测试

    单元测试编写 Junit 单元测试框架 对于Java语言而言,其单元测试框架,有Junit和TestNG这两种, 下面是一个典型的JUnit测试类的结构 package com.example.dem ...

最新文章

  1. 运维开发笔记整理-前后端分离
  2. boost::function用法的测试程序
  3. WebSocket webshop后台服务器的一些全局数据结构
  4. jpannel设置位置xy_实用的摄影技巧!10种常见摄影场景的单反相机设置技巧!
  5. Android 底部上拉抽屉view
  6. java 正则匹配_正则表达式真的很强大,可惜你不会写
  7. 什么样的项目是成功的?
  8. Redis持久化配置
  9. django2.x/3.x 前端页面在debug模式中找不到动态文件static
  10. 人脸识别的三个评测标准
  11. 浙大PAT甲级1027. Colors in Mars (20)
  12. jquery select
  13. Reversing.Kr replace题解
  14. 前端工程化和Reactjs的模式
  15. caffe 实践程序3——caffe提取特征以及由模型test数据
  16. ajaxfileupload -- 一款不错的AJAX文件上传插件
  17. 路由器 接 交换机 接 路由器
  18. CDN缓存那些事 转载陈小龙哈2016-09-2
  19. PING用一生诠释了TCP/IP(4)------二三层转发为PING劈荆斩棘
  20. subplot中的图例

热门文章

  1. 着色器语言(GLSL)基础学习三
  2. Catalan Square
  3. 《计算机基础应用》理论题
  4. 【姿态估计】 深度图姿态识别应用调研
  5. Unity中的Lerp函数
  6. [ATL/WTL]_[Gdiplus]_[实现按钮的阴影效果]
  7. 蓝桥杯 1004 [递归]母牛的故事
  8. halcon 读取大图片 报错5504
  9. 新浪获取股票期货实时数据-最新方法
  10. Oracle日期常用函数(SYSDATE)