UML 学习资源与路线¶
适合已有编程经验,希望系统学习 UML,并能用它分析源码和设计软件的学习者。建议先用《UML 精粹》建立基础,再通过《UML 和模式应用》学习从需求到设计的完整过程,同时结合已有源码笔记练习。
推荐书籍¶
| 书籍 | 作者 | 推荐版本 | 定位 |
|---|---|---|---|
| 《UML 精粹》 | Martin Fowler | 第 3 版 | 入门首选,建立常用图与关系的整体认识 |
| 《UML 和模式应用》 | Craig Larman | 第 3 版 | 系统学习,串联需求分析、对象设计和设计模式 |
| 《UML 用户指南》 | Grady Booch、James Rumbaugh、Ivar Jacobson | 第 2 版 | 深入查阅,理解建模元素与语义细节 |
《UML 精粹》:先掌握常用表达¶
英文名:UML Distilled: A Brief Guide to the Standard Object Modeling Language。
篇幅精炼,适合先认识类图、时序图、用例图、状态图等常用图,以及它们分别适合表达什么。阅读时重点掌握类和接口、关系箭头、多重性与对象协作,配合代码画出自己的例子。
- 适合:希望先读懂设计模式和源码分析中的 UML 图。
- 建议读法:先读常用图,遇到不熟悉的符号时回查,不必一次记住全部符号。
- 入口:Martin Fowler 的书籍介绍。
《UML 和模式应用》:系统学习建模与设计¶
英文名:Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development。
通过案例将用例、领域模型、交互图、职责分配和设计模式联系起来。重点在于如何理解需求、识别概念、分配对象职责,并将设计逐步落实到代码。
- 适合:已经会编程,希望掌握面向对象分析与设计的完整过程。
- 建议读法:跟随书中的案例推进,重点理解领域模型与软件设计类图的区别,以及 GRASP 职责分配原则。
- 如果只选一本作为系统学习的主教材,优先选择这本;阅读前可先用《UML 精粹》熟悉基本表达。
《UML 用户指南》:作为深入查阅资料¶
英文名:The Unified Modeling Language User Guide。
更全面地介绍 UML 的建模元素、关系和图,适合在实际绘图时查阅语义细节。
- 适合:已有基本实践,希望理解符号含义和使用边界。
- 建议读法:围绕遇到的问题查阅,例如关联的多重性、聚合与组合、状态机和交互建模。
以上书籍出版较早,但其中的基础建模知识仍适合作为学习材料。学习时以理解模型表达的含义为主,工具界面与具体操作可参考当前工具文档。
视频课程¶
Object-Oriented Design¶
- 提供方:阿尔伯塔大学(University of Alberta)。
- 平台:Coursera。
- 入口:Object-Oriented Design。
- 内容定位:结合面向对象设计与 UML,学习类的职责、对象关系和设计表达。
- 适合:已有编程基础,希望通过视频与练习理解建模过程的学习者。
- 搭配方式:作为《UML 精粹》的视频补充,再通过《UML 和模式应用》深入学习完整案例。
课程当前是否开放、可用字幕、旁听和收费规则未实时核实,以课程页面的当前说明为准。
建议学习顺序¶
下面的顺序适合正在学习设计模式、阅读 Android 开源库源码的场景。每一步都保留一份自己绘制并能解释的图。
| 阶段 | 学习重点 | 练习产出 |
|---|---|---|
| 1. 类图 | 类、接口、继承、实现、关联、依赖、多重性、聚合与组合 | 一张只展示关键职责与关系的类图 |
| 2. 时序图 | 参与者、生命线、消息、返回、条件分支和循环 | 一次完整调用的关键协作过程 |
| 3. 状态图与活动图 | 对象状态、状态迁移、处理步骤、分支与并行 | 同一业务的状态图和流程图,并说明各自关注点 |
| 4. 用例与领域模型 | 参与者、目标、业务概念及概念之间的关系 | 一个小项目的用例描述与领域模型 |
| 5. 从需求到代码 | 职责分配、对象交互、设计类图和实现 | 一份能够对应代码的小型设计 |
先从现有代码反推模型,再尝试从需求建立模型并实现代码。两种练习分别帮助理解实现和训练设计能力。
结合已有笔记练习¶
| 练习 | 参考笔记 | 重点 |
|---|---|---|
| 画出 CallAdapter 的关键关系 | Retrofit 的设计模式分析 | 区分接口实现、对象持有和创建依赖 |
| 画出主图、缩略图与错误请求的结构 | Glide 的组合模式 | 区分 Request 与 RequestCoordinator 两个接口,理解请求树 |
| 画出一次图片加载的时序 | Glide 源码分析 | 区分配置、请求组装、启动与结果回调,标出必要的分支 |
| 对照通用模式和实际实现 | 观察者模式与Glide 生命周期观察者 | 解释具体角色,以及实际实现与通用结构的差异 |
| 从需求设计一个小项目 | 图书借阅、待办清单或图片加载器 | 先描述需求与业务概念,再分配职责、绘制交互图并实现 |
源码练习应记录项目版本,避免把不同版本的类和调用关系混在一张图中。完成后检查:每条关系是否有依据,图是否帮助解释当前问题,是否省略了无关实现细节。
绘图与笔记方式¶
日常笔记继续使用 Mermaid,使图和文字一起保存在 Markdown 中,便于修改和 Git 版本管理。练习时同时说明每张图的目的、关键角色和协作过程。
遇到 Mermaid 无法准确表达的 UML 元素时,可使用 PlantUML 等工具。建模语义以 UML 为准,不必为了工具支持而改变关系的含义。