第三章 UML如何表现Whole-Part结构

为什么要讨论Whole-Part

在第一章中已经介绍过,将应用程序分割成许多小块(即:组件),在使用时可以随意调换其中一个或多个组件,以实现组件的快速淘汰和重组,从而快速满足客户的特殊需求或新需求。
这也就是说将应用程序分为多个Part,再组合成一个Whole。

要想真正实现快速淘汰和重组的效果,Part就不能随意划分。Part的划分要讲究“有机次序”。只有“分”得好,才能“合”得快,合得妙。
所以,下面专门讨论如何划分Part。

划分Part的常见原因和方法

我们可以分析Whole是否面临如下情况,如果有,那我们就可以把这部分划分出来,作为一个Part:

1 希望组合出多样化的Whole

2 希望分散开发生产,加快Whole的组合速度

3 希望组件提前开发,缩短Whole的生产时间

4 希望可外购现成组件,以降低成本

5 希望专注做小组件,并大量生产

我们还可以从以下角度来洞悉“稳定”的部分和“变化”的部分,将“稳定”和“变化”划分开,成为不同的Part:

1 根据客户而分:

比如:大部分人喜欢加糖咖啡,但正在减肥的女士则喜欢无糖或低糖咖啡。所以咖啡是稳定的,糖是变化的。因此将糖和咖啡划分开。

2 根据时间而分:

比如:汽车的车体在设计时就已固定,但汽车的颜色是在顾客购买时才确定的。因此将车体生产和车身上色划分开。

Whole-Part关系分类

常见的三种组合关系分类

分类 举例 符号
组合/部分 房子和门
房子和窗户
汽车和引擎
容器/内容 汽车和司机
巴士和乘客
集合/成员 雁群和大雁
东南亚总行程和香港观光行程

Odell提出的组合关系分类

担任过美国OMG主席的James Odell提出了一套关系分类方法,他根据3项特性将组合关系分为6种。

其中,3项特性分别是:配置、同质性、不变性。

配置:“部分”与“整体”有特定的功能和结构关系

同质性:“部分”与“整体”是一种东西

不变性:“部分”难以从“整体”中抽离出来

6种组合关系如下表:

说明:

1.我没有搞明白“配置”这项特性到底如何理解,所以下表中没法把对“配置”的解释写出来。

2.我个人认为这种分类方法过于繁琐,不如前一种方法简单明了。

3.我个人认为这种分类方法的3个特性中,不变性最为重要,因为是否具备不变性决定了使用哪种符号:不变使用composition,可变使用aggregation。

分类 举例 配置 同质性 不变性 符号
组件/整体对象的组合 CPU和电脑
风扇和电脑
非同质:
CPU、风扇和电脑不是一种东西
可变:
CPU、风扇可以冲电脑中取出来
材料/对象的组合 油和红龟粿
糖和红龟粿
糯米和红龟粿
非同质:
油、糖、糯米和红龟粿不是一种东西
不变:
油、糖、糯米一旦制成红龟粿就没法再取出来了
切割部分/对象的组合 一块饼干和一盒饼干 同质:
一块饼干和一盒饼干都是饼干
可变:
可以从一盒饼干中拿出一块饼干
地方/地区组合 东南亚总行程和香港观光行程 同质:
东南亚总行程和香港观光行程都是行程
可变:
可以单独进行香港观光行程,从另一个角度看也可以从东南亚总行程中去掉香港观光行程,这并不影响东南亚总行程的存在
成员/聚集组合
(同前一种分类法中的容器/内容)
会员与俱乐部 可变:
会员可退出俱乐部,这并不影响俱乐部的存在
成员/合伙组合
(同成员/聚集组合的区别就在于不变性)
父母亲一方和双亲家庭 不变:
缺少父母亲任一方就不再是双亲家庭了

高焕堂《嵌入式UML设计》读书笔记_第三章相关推荐

  1. 马丁福勒《UML精粹》读书笔记_第三章

    第三章 类图:基础部分 类图是使用最广泛的UML图,是UML的支柱. 类图用于表述各个对象的类型以及其间存在的各种静态关系. 附录 重数 重数指可以具有该特性的对象数目. 重数的常用表示如下: 1:重 ...

  2. 马丁福勒《UML精粹》读书笔记_第四章

    第四章 顺序图 顺序图是一个use case的一种实现.当考察单个use case内部若干对象的行为时,就应使用顺序图. 可参考"高焕堂<嵌入式UML设计>读书笔记_第五章&qu ...

  3. 【Python自然语言处理】读书笔记:第三章:处理原始文本

    本章原文链接:https://usyiyi.github.io/nlp-py-2e-zh/3.html 3 处理原始文本 import nltk, re, pprint from nltk impor ...

  4. 黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第三章 网络工程-原始套接字与嗅探(1)主机发现工具与包嗅探

    黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第三章 网络工程-原始套接字与嗅探(1)主机发现工具 文章目录 黑帽python第二版(Black Ha ...

  5. 《精通Python自然语言处理( Deepti Chopra)》读书笔记(第三章):形态学

    <精通Python自然语言处理> Deepti Chopra(印度) 王威 译 第三章 形态学:在实践中学习 3.1形态学简介 形态学可以定义为在语素的帮助下对标识符的构造进行研究. 语素 ...

  6. 马丁福勒《UML精粹》读书笔记_第七章

    第七章 包图 什么是包图? 包图是一种聚组构造,可以将UML中任一构造聚组在一起,以构成更高层的单位. 每个包表示一个名空间.在一个包内,类名要唯一,但不同包内,同一类名可以表示不同的类. 什么时候使 ...

  7. 马丁福勒《UML精粹》读书笔记_第六章

    第六章 对象图 什么是对象图? 对象图是在一个时间点上系统中各个对象的一个快照. 对象图也可被看做是不带消息的通信图(这点并不好理解,等"通信图"一章再说). 对象图和类图的区别? ...

  8. C++ Primer Plus_读书笔记_第2章 开始学习C++

    第2章 开始学习C++ 54 2.1 进入C++ 54 第一个C++程序 #include<iostream> int main() {using namespace std;cout & ...

  9. Java编程思想读书笔记_第6章(访问权限)

    四种访问权限: public private 包访问权限 protected 如果没有明确指定package,则属于默认包 1 package access.dessert; 2 3 public c ...

最新文章

  1. android 选择ppt模板,微软Office安卓手机版使用攻略:巧用模板可事半功倍
  2. ISC2015听会小计
  3. request获取各种路径 转,记下来免得 以后忘记了。
  4. 谈Elasticsearch下分布式存储的数据分布
  5. C# HTTP请求后对gzip页面实现解压缩
  6. GNU make 与 override指令
  7. 云计算技术背后的那些天才程序员:KVM之父Avi Kivity
  8. 亲测无限坐席在线客服系统源码
  9. linux设置环境变量_Linux怎么设置系统环境变量之export命令详解
  10. OpenSSL windows 下编译
  11. leetcode力扣64. 最小路径和
  12. 管理感悟:看清软件功能的“二八定律”
  13. Android项目实战之高仿网易云音乐创建项目和配置
  14. 【历史上的今天】2 月 1 日:网景浏览器停止支持;id Software 成立;Intel 80286 芯片问世
  15. python 关联矩阵_创建关联矩阵
  16. SpringBoot配置国际化语言包
  17. VS2017+DirectX9环境配置
  18. FFT蝶形算法,IFFT
  19. oss文件服务器是什么,对象存储oss是什么
  20. 数据分析实战(二):流浪地球8W多条评论分析

热门文章

  1. 我的个人网站CuteKe
  2. 【内网安全-隧道搭建】内网穿透_Ngrok上线(美版、国版二开)
  3. matlab大圆航线,基于MATLAB和C#混合编程的大圆航线计算器设计
  4. 一名大学毕业生的心酸求职历程全记录
  5. 如何将EXCEL表格中整列的单元格设置成文本格式
  6. python透明的桌面时钟_透明桌面时钟-透明桌面时钟下载 v2018.07.16免费版--pc6下载站...
  7. NavicatPremium12.1.11破解安装
  8. 什么是Push Mail?
  9. POJ3041 Asteroids 二分图最小顶点覆盖 Dinic求解最大流
  10. 视频建站系统Pocle v2.6 简体中文 GBK