10.4.2 UML概念
UML 的基本组成可以概括为三类:事物、关系、图。
这句话看似抽象,但它对应着建模的完整语法:事物是模型里的“名词”,关系是事物之间的“连接”,图则是把事物和关系组织成可读视图。
UML由什么构成
| 组成 | 可以理解为 | 典型内容 | 考试关注点 |
|---|---|---|---|
| 事物 | 模型中的基本元素 | 类、接口、协作、用例、活动类、构件、节点、包、注释 | 看到“类、接口、节点”等词,要知道它们是 UML 元素 |
| 关系 | 元素之间的联系 | 依赖、关联、泛化、实现、聚合、组合、包含、扩展 | 重点考关系含义、方向和图形符号 |
| 图 | 一个角度下的系统视图 | 类图、用例图、顺序图、状态图、活动图、部署图等 | 最常考“识图”和“图的用途” |
UML 的图不是随便画出来的。它是“事物 + 关系”的组合。例如类图里有类、接口、属性、方法,以及这些类之间的关联、泛化、实现等关系。
UML中的事物
课程把事物分成几类理解即可:
| 事物类型 | 含义 | 例子 |
|---|---|---|
| 结构事物 | 系统静态结构中的元素 | 类、接口、协作、用例、活动类、构件、节点 |
| 行为事物 | 系统运行过程中的动态行为 | 交互、状态机 |
| 分组事物 | 用来组织模型元素 | 包 |
| 注释事物 | 对模型进行解释说明 | 注释 |
这里最容易出现在题目里的,是“节点”。节点通常属于部署图语境,表示具有计算资源的物理或执行环境,如服务器、客户端、设备等。
常见UML图的准确含义
类图与对象图
类图描述一组类、接口、协作及其关系,是面向对象建模中最常用的静态视图。
对象图与类图结构相似,但关注某一时刻的对象实例。对象图里常出现 对象名:类名 的形式,它表达的是“这个对象属于哪个类”。
classDiagram
class Course {
+title
+price
+publish()
}
class Student {
+name
+study()
}
Student "0..*" --> "0..*" Course : enrolls如果把上面的 Course 和 Student 换成 javaCourse:Course、zhangsan:Student 这样的实例,就更接近对象图。对象图不是类设计的总蓝图,而是某一时刻系统对象关系的快照。
用例图
用例图包含参与者、用例以及它们之间的关系。它从外部用户的视角描述“系统提供哪些功能”,不负责描述功能内部如何一步步执行。
考试中看到小人和椭圆,通常就在用例图范围内思考。小人是参与者,椭圆是用例。
顺序图与通信图
顺序图和通信图都属于交互图,都描述对象之间通过消息协作。
| 对比项 | 顺序图/序列图 | 通信图/协作图 |
|---|---|---|
| 关注点 | 消息发生的时间顺序 | 对象之间的组织结构和连接关系 |
| 典型线索 | 生命线、从上到下的消息 | 对象连接、消息编号 |
| 适合回答 | 先调用谁,再调用谁 | 哪些对象参与协作,它们怎样连接 |
如果题干同时出现“交互”和“时间顺序”,优先选顺序图;如果强调“组织结构”“通信关系”,优先选通信图。
状态图与活动图
状态图描述状态机:对象处在某个状态,受到事件触发后迁移到另一个状态。它适合描述订单、设备、线程、连接等有明显生命周期的对象。
活动图更像增强版流程图:它描述活动之间的控制流,可以表达分支、循环、并发。课程中特别强调,活动图能够表达并行行为。
| 对比项 | 状态图 | 活动图 |
|---|---|---|
| 核心元素 | 状态、迁移、事件 | 活动、控制流、分支、并发 |
| 关注对象 | 某个对象的生命周期 | 某个业务或算法过程 |
| 题干线索 | “状态变化”“状态机”“事件触发” | “流程”“活动”“并行分支” |
构件图、部署图、包图
构件图描述一组构件及其依赖关系。构件可以理解为比类更大的软件单元,例如模块、库、服务、可部署组件。
部署图描述软件和硬件之间的映射。它会出现节点、服务器、PC、设备等物理或执行环境,是 UML 图中最典型地涉及物理部署的一类图。
包图描述如何把类或其他模型元素组织成包,并体现包之间的依赖关系。它解决的是模型组织问题,而不是业务流程问题。
图的识别规则
| 看到的画面或文字 | 判断方向 |
|---|---|
| 矩形分三层,上层类名,中间属性,下层方法 | 类图 |
对象名:类名,强调某一时刻 | 对象图 |
| 小人、椭圆、include、extend | 用例图 |
| 竖直生命线、横向消息、时间从上到下 | 顺序图 |
| 对象之间连线,消息带编号 | 通信图 |
| 圆角矩形活动、菱形分支、粗横线并发 | 活动图 |
| 状态节点、事件触发、迁移箭头 | 状态图 |
| 组件/构件、接口、依赖 | 构件图 |
| 服务器、PC、节点、硬件、物理映射 | 部署图 |
| 文件夹形状、包之间依赖 | 包图 |
为什么同一系统需要多种图
因为软件系统有多个“投影”。类图像结构图,告诉你系统由哪些概念组成;顺序图像调用剧本,告诉你一次业务如何发生;部署图像安装图,告诉你软件跑在哪里。只用一种图会丢失大量信息。
在下午题中,题目经常先给需求叙述,再让你补类图或用例图。此时不要只找名词,还要判断需求里的动词、条件、生命周期和角色边界分别应该落在哪一种 UML 元素上。
例题
自查要点
- UML 中“事物、关系、图”分别对应什么?
- 对象图为什么被称为某一时刻的快照?
- 顺序图和通信图都描述交互,为什么考试仍要区分?
- 部署图与构件图的关键差异是什么?