10.4.1 UML知识点概述
UML(Unified Modeling Language,统一建模语言)不是编程语言,也不是某一种开发方法。它更像软件工程里的“工程图纸语言”:用一组统一的图形符号,把面向对象系统的结构、行为、交互、部署环境表达出来,方便分析人员、设计人员、开发人员和测试人员沟通。
这一节在考试里通常有两种价值:上午题会直接考“某个描述对应哪一种 UML 图”;下午 UML 建模题会把这些图当作填类名、填关系、填用例的基础语言。
UML为什么重要
软件系统不能只靠代码来理解。代码描述“机器如何执行”,UML 更强调“人如何理解系统”。
| 学习角度 | UML解决的问题 | 典型例子 |
|---|---|---|
| 需求分析 | 系统要为谁提供哪些功能 | 用例图:用户、管理员、支付系统分别参与哪些用例 |
| 静态设计 | 系统有哪些类、接口、部件,它们怎样组织 | 类图、对象图、包图、构件图 |
| 动态行为 | 业务如何流转,状态如何变化 | 活动图、状态图 |
| 对象协作 | 对象之间按什么顺序发消息 | 顺序图、通信图 |
| 物理部署 | 软件构件部署到哪些硬件节点上 | 部署图 |
所以,学 UML 时不要把它背成一串图名,而要问:这张图回答的是系统的哪一个问题?
UML 2.0图的总体分类
课程里把 UML 图分成“结构/静态”和“行为/动态”两大类。实际考试不用死背全部 14 种图,但要能根据关键词认出常考图。
mermaid
flowchart TB
UML["UML图"]
UML --> S["结构图:系统有什么"]
UML --> B["行为图:系统怎么动"]
S --> C["类图"]
S --> O["对象图"]
S --> P["包图"]
S --> Comp["构件图"]
S --> D["部署图"]
S --> Art["制品图"]
S --> CS["组合结构图"]
B --> UC["用例图"]
B --> A["活动图"]
B --> ST["状态图"]
B --> I["交互图"]
I --> Seq["顺序图/序列图"]
I --> Com["通信图/协作图"]
I --> T["定时图"]
I --> IO["交互概览图"]结构图回答“系统由哪些静态元素组成”。类、接口、对象、包、构件、部署节点都属于这种视角。
行为图回答“系统运行时发生什么”。用例描述外部可见功能,活动图描述流程,状态图描述对象状态迁移,交互图描述对象之间的消息。
常考图的识别地图
| UML图 | 题干常见关键词 | 它真正表达的内容 | 容易混淆点 |
|---|---|---|---|
| 类图 | 类、接口、属性、方法、泛化、关联 | 一组类、接口、协作以及它们之间的关系 | 类图是静态视图,不描述某一次运行过程 |
| 对象图 | 对象名、某一时刻、快照、实例 | 类图在某一时刻的实例快照 | 对象图看的是对象,不是类定义本身 |
| 用例图 | 参与者、系统功能、用例、include、extend | 外部角色与系统功能之间的关系 | 用例图不是流程图,不描述算法步骤 |
| 顺序图/序列图 | 时间顺序、生命线、消息先后 | 对象交互按时间展开 | 强调“先后顺序” |
| 通信图/协作图 | 组织结构、对象连接、消息编号 | 对象如何连接并协作 | 强调“对象之间的组织关系” |
| 状态图 | 状态、事件、迁移、状态机 | 一个对象在生命周期中的状态变化 | 适合有明显状态的对象,如订单、设备 |
| 活动图 | 活动、分支、并发、流程 | 业务过程或算法流程 | 类似流程图,但能表达并行 |
| 构件图 | 构件、接口、依赖 | 软件构件及其依赖关系 | 构件粒度通常大于类 |
| 部署图 | 节点、服务器、PC、硬件、物理关系 | 软件构件与硬件节点的映射 | 看到“物理”“硬件”“节点”优先想到部署图 |
| 包图 | 包、分组、包之间依赖 | 类或其他模型元素如何组织成包 | 主要体现组织结构,不是运行流程 |
识图的三个层次
上午题常把 UML 考得很“关键词化”,但下午题会把这些知识用在建模中。可以按三个层次学习:
- 先识别图:看到“物理节点”知道是部署图;看到“时间顺序”知道是顺序图。
- 再识别元素:类图里有类名、属性、方法;用例图里有参与者和椭圆;状态图里有状态和迁移。
- 最后识别关系:类图中的关联、依赖、泛化、实现、聚合、组合;用例图中的包含、扩展、泛化。
一个简单的对照例子
假设要描述“在线课程系统”,不同 UML 图会从不同角度看同一个系统:
| 想表达的问题 | 应选UML图 | 可能出现的内容 |
|---|---|---|
| 学员能做哪些事情 | 用例图 | 学习课程、课程测试、课程注册 |
| 课程、学员、订单有什么结构关系 | 类图 | Student、Course、Order 及关联 |
| 学员购买课程时对象如何发消息 | 顺序图 | 学员界面、订单服务、支付服务之间的消息顺序 |
| 订单从创建到支付成功怎样变化 | 状态图 | 已创建、待支付、已支付、已取消 |
| 课程学习和测试的业务步骤 | 活动图 | 检查权限、播放课程、提交测试 |
| 系统部署在哪些机器上 | 部署图 | Web服务器、数据库服务器、客户端 |
同一系统需要多种图,是因为一个图不可能同时清晰表达“功能边界、静态结构、运行过程、物理部署”。
考试抓分提示
- 问“交付系统中软件组件与硬件之间的物理关系”时,选部署图。
- 问“对象交互的时间顺序”时,选顺序图/序列图。
- 问“对象之间的组织结构和通信关系”时,选通信图/协作图。
- 问“构件及构件之间依赖关系”时,选构件图。
- 问“类、接口、协作及其关系”时,选类图。
例题
在 UML 图中,用于展示交付系统中软件构件以及硬件之间物理关系的图是:
如果题干强调对象之间消息传递的时间先后顺序,最适合使用:
自查要点
- UML 为什么不是编程语言?
- 结构图和行为图分别回答什么问题?
- 顺序图和通信图都属于交互图,它们的侧重点有什么不同?
- 为什么看到“硬件节点、物理部署”要优先想到部署图?