前言
学习一种工具或者技术时,我并不喜欢去用背字典的形式去吸收,而是保持思考,思考它能为我带来什么。希望有兴趣的小伙伴留下你对于UML的感悟。
“人对于复杂事物单凭记忆需要消耗大量精力,也会一定几率出错,随着项目复杂性加深,项目的优化、拓展、变更、工作交接的难度和成本将会指数爆炸。通过UML,可以有条不紊地将复杂系统的内容表达出来,在深入细节时可以随时俯视全局,所以UML设计做为项目开发前置工作是必要的”
在线工具proceesOn离线工具xmind
相关文章:工具篇——UML设计技巧(二)时序图设计
UML介绍
定义
统一建模语言(Unified Modeling Language )简称UML,一种面向对象设计的建模工具,其独立于任何程序语言,抽象地描述各个事物之间的关系。
类图结构规范
事物关系
- 继承
实线+空心箭头指向父类表示继承关系 - 实现
虚线+空心箭头指向接口表示实现关系
tip: 通过继承和实现发现,实线比虚线的关系更加紧密,下面的关系也是如此 - 组合
组合端为实心菱形,实线指向被组合端 - 聚合
聚合端为空心菱形,虚线指向被聚合端
tip:菱形类比容器装东西。组合的实线实心说明关系比聚合更加强烈,组合关系的生命周期相同,聚合关系的生命周期独立。 - 关联
实线指向被关联端 - 依赖
虚线指向被依赖端
tip:强弱排序
综合用例
动物衍生关系
预览地址
示例参考《大话设计模式》
12306自助售票机案例实战
售票机面板相关部件的作用如下所述
- 在身份证识别区放入二代身份证
- 显示屏显示所有的车次、车票种类(单程票、多次往返票和座席种类)
- 乘客选择车次和座位类型确定下单
- 继续/取消键盘上的取消按钮用于取消购票过程,继续按钮允许乘客连续购买多张票。
- 插卡口接受 PayCard(银行卡)和纸币槽接受现金。
- 打印机用于输出车票。
- 所有部件均可实现自检并恢复到初始状态。
要素提取
建模期不用去思考具体的业务实现,从实际角度出发解析需求,提取要素
- 需求1的部件为IdCardScanner,拥有scannerCard方法
- 需求2和需求3的部件为Screen,拥有show和touch方法
- 需求4的部件为ActionKeyboard(由此需求联想到还会有InputKeyboard等类),拥有action方法
- 需求5的部件为CardDriver拥有交互银行卡的多种方法和CashSlot拥有多种交互现金的方法
- 需求6的部件为Printer拥有printTackter方法
- 需求7说明顶级父类Component拥有init和doShelfCheck方法
类名 | 类说明 | 方法名 | 方法说明 |
---|---|---|---|
Component | 抽象部件类,所有组件的父类 | init() | 初始化 |
doShelfCheck() | 自检 | ||
IdCardScanner | 身份证扫码类 | scannerCard() | 扫码身份证 |
Keyboard | 键盘抽象类 | getSelectedKey() | 获取被选择的键盘 |
ActionKeyboard | 执行键盘类 | action() | 执行 |
CardDriver | 卡驱动类 | gulpCard | 吞卡 |
readCardInfo | 读取信息 | ||
ejectCard | 退卡 | ||
CashSlot | 现金槽类 | gulpCash | 收入现金 |
ejectCash | 退出现金 | ||
Printer | 打印类 | prinitTicket | 打印票 |
UML绘制
预览地址