高焕堂《嵌入式UML设计》读书笔记_第三章
第三章 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设计》读书笔记_第三章相关推荐
- 马丁福勒《UML精粹》读书笔记_第三章
第三章 类图:基础部分 类图是使用最广泛的UML图,是UML的支柱. 类图用于表述各个对象的类型以及其间存在的各种静态关系. 附录 重数 重数指可以具有该特性的对象数目. 重数的常用表示如下: 1:重 ...
- 马丁福勒《UML精粹》读书笔记_第四章
第四章 顺序图 顺序图是一个use case的一种实现.当考察单个use case内部若干对象的行为时,就应使用顺序图. 可参考"高焕堂<嵌入式UML设计>读书笔记_第五章&qu ...
- 【Python自然语言处理】读书笔记:第三章:处理原始文本
本章原文链接:https://usyiyi.github.io/nlp-py-2e-zh/3.html 3 处理原始文本 import nltk, re, pprint from nltk impor ...
- 黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第三章 网络工程-原始套接字与嗅探(1)主机发现工具与包嗅探
黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第三章 网络工程-原始套接字与嗅探(1)主机发现工具 文章目录 黑帽python第二版(Black Ha ...
- 《精通Python自然语言处理( Deepti Chopra)》读书笔记(第三章):形态学
<精通Python自然语言处理> Deepti Chopra(印度) 王威 译 第三章 形态学:在实践中学习 3.1形态学简介 形态学可以定义为在语素的帮助下对标识符的构造进行研究. 语素 ...
- 马丁福勒《UML精粹》读书笔记_第七章
第七章 包图 什么是包图? 包图是一种聚组构造,可以将UML中任一构造聚组在一起,以构成更高层的单位. 每个包表示一个名空间.在一个包内,类名要唯一,但不同包内,同一类名可以表示不同的类. 什么时候使 ...
- 马丁福勒《UML精粹》读书笔记_第六章
第六章 对象图 什么是对象图? 对象图是在一个时间点上系统中各个对象的一个快照. 对象图也可被看做是不带消息的通信图(这点并不好理解,等"通信图"一章再说). 对象图和类图的区别? ...
- C++ Primer Plus_读书笔记_第2章 开始学习C++
第2章 开始学习C++ 54 2.1 进入C++ 54 第一个C++程序 #include<iostream> int main() {using namespace std;cout & ...
- Java编程思想读书笔记_第6章(访问权限)
四种访问权限: public private 包访问权限 protected 如果没有明确指定package,则属于默认包 1 package access.dessert; 2 3 public c ...
最新文章
- android 选择ppt模板,微软Office安卓手机版使用攻略:巧用模板可事半功倍
- ISC2015听会小计
- request获取各种路径 转,记下来免得 以后忘记了。
- 谈Elasticsearch下分布式存储的数据分布
- C# HTTP请求后对gzip页面实现解压缩
- GNU make 与 override指令
- 云计算技术背后的那些天才程序员:KVM之父Avi Kivity
- 亲测无限坐席在线客服系统源码
- linux设置环境变量_Linux怎么设置系统环境变量之export命令详解
- OpenSSL windows 下编译
- leetcode力扣64. 最小路径和
- 管理感悟:看清软件功能的“二八定律”
- Android项目实战之高仿网易云音乐创建项目和配置
- 【历史上的今天】2 月 1 日:网景浏览器停止支持;id Software 成立;Intel 80286 芯片问世
- python 关联矩阵_创建关联矩阵
- SpringBoot配置国际化语言包
- VS2017+DirectX9环境配置
- FFT蝶形算法,IFFT
- oss文件服务器是什么,对象存储oss是什么
- 数据分析实战(二):流浪地球8W多条评论分析
热门文章
- 我的个人网站CuteKe
- 【内网安全-隧道搭建】内网穿透_Ngrok上线(美版、国版二开)
- matlab大圆航线,基于MATLAB和C#混合编程的大圆航线计算器设计
- 一名大学毕业生的心酸求职历程全记录
- 如何将EXCEL表格中整列的单元格设置成文本格式
- python透明的桌面时钟_透明桌面时钟-透明桌面时钟下载 v2018.07.16免费版--pc6下载站...
- NavicatPremium12.1.11破解安装
- 什么是Push Mail?
- POJ3041 Asteroids 二分图最小顶点覆盖 Dinic求解最大流
- 视频建站系统Pocle v2.6 简体中文 GBK