前排提醒:全文内容皆为OpenClaw生成,没有喂其他材料,内容准确性仅供参考。
软考中级-软件设计师:UML建模完整笔记
基于软考软件设计师考试大纲整理,含13种UML图详解
一、UML概述
UML(统一建模语言):用于面向对象软件系统的可视化建模语言,与程序设计语言无关。
三个要素
UML的基本构造块(事物、关系、图)
支配这些构造块如何放置在一起的规则
运用与整个语言的一些公共机制
基本构造块
| 类型 | 说明 | 示例 |
|---|---|---|
| 事务 | 对模型中最具代表性成分的抽象 | 类、接口、用例、构件 |
| 关系 | 把事务结合到一起 | 依赖、关联、泛化、实现 |
| 图 | 聚集了相关的事物 | 类图、用例图、序列图 |
四种事务
| 事务类型 | 说明 | 包含内容 |
|---|---|---|
| 结构事物 | 模型的静态部分 | 类、接口、用例、构件、节点、构件 |
| 行为事物 | 模型的动态部分 | 交互、活动、状态机 |
| 分组事物 | 模型的组织部分 | 包 |
| 注释事物 | 模型的解释部分 | 依附于元素进行约束或解释的符号 |
二、UML关系
六种关系(重要)
| 关系类型 | 符号 | 说明 | 强度排序 |
|---|---|---|---|
| 依赖 | ---→ | 一个事物变化影响另一个事物 | 最弱 |
| 关联 | 表示对象之间的连接 | 中 | |
| 聚合 | 整体与部分的关系,可分离 | 中强 | |
| 组合 | 整体与部分的关系,不可分离 | 最强 | |
| 泛化 | 继承关系(子类继承父类,父类泛化子类) | — | |
| 实现 | 接口与类的实现关系 | — |
强度排序
依赖 < 关联 < 聚合 < 组合 < 泛化 = 实现 记忆口诀:用 < 认识 < 可以拆 < 分不开 < 继承
此处原本生成的符号无法辨别虚实线,修改为图片
通俗易懂解释版:
关系1:依赖(uses a)—— 最弱
什么意思:我用你一下,但不是"拥有"你生活类比:你打车,用了出租车,但你不是出租车的主人
乘客 ────使用────→ 出租车 代码表现: class 乘客 { void 出行() { 出租车 t = new 出租车(); // 只是临时用一下 } }考试记忆:依赖 = "用一下" = 虚线箭头
关系2:关联(has a)—— 中等
什么意思:你"认识"某个人,长期关系,但不一定"拥有"生活类比:老师认识学生,但老师不是学生的"主人"
老师 ────────── 学生 代码表现: class 老师 { 学生 s; // 老师"关联"学生 }考试记忆:关联 = "认识" = 实线
关系3:聚合(has a,可分离)—— 中强
什么意思:你是整体的一部分,但这个部分可以独立存在生活类比:车队由汽车组成,但汽车可以离开车队
◇ 车队 ────── 汽车 解读:车队"拥有"汽车,但汽车可以离开车队去别的地方
考试记忆:聚合 = "可以拆开" = 空心菱形
关系4:组合(has a,不可分离)—— 最强
什么意思:你是整体的一部分,而且这个部分不能独立存在生活类比:人由心脏、大脑等器官组成,少了心脏人就活不了
◆ 人 ────── 心脏 解读:心脏是人的一部分,心脏不能独立存在
考试记忆:组合 = "分不开" = 实心菱形
关系5:泛化(is a)—— 继承
什么意思:是...的一种生活类比:狗是动物的一种
△ │ 动物 ────── 狗 解读:狗"是"动物的一种
考试记忆:泛化 = "是...一种" = 空心三角箭头
关系6:实现(can do)—— 接口
什么意思:承诺能做某事生活类比:只要承诺"会飞",不管是鸟还是飞机都能飞
△ │ 会飞 ◁────── 飞机 解读:飞机实现了"会飞"这个接口
考试记忆:实现 = "承诺能做到" = 虚线三角箭头
三、结构图(静态图)
1. 类图(Class Diagram)
定义:展示系统中的类以及类之间的关系。
主要关系:
依赖
关联(含聚合、组合)
泛化(继承)
实现
类图的三个隔间:
+-------------------+ | 类名 | +-------------------+ | 属性(-/+/#) | +-------------------+ | 方法(-/+/#) | +-------------------+ - private + public # protected
常见类图关系示例:
△继承 ┌────────────┐ ┌────────────┐ │ Animal │ │ Interface │ └──────┬─────┘ └──────┬─────┘ │ │ ▼ │实现 ┌────────────┐ │ │ Dog │ │ └────────────┘ ▼
2. 对象图(Object Diagram)
定义:表示某一时点系统中对象的快照。
特点:
是类图的实例
展示对象和对象之间的链
对象名下有下划线
student1:Student ←→ course1:Course (具体的对象) (具体的对象)
3. 构件图(Component Diagram)
定义:展示构件之间的组织及依赖关系。
用途:
展示代码构件的结构
反映系统的物理结构
支持构件的复用
┌─────────────┐ 接口 ┌─────────────┐ │ 构件A │──────────→│ 构件B │ └─────────────┘ └─────────────┘
4. 部署图(Deployment Diagram)
定义:展示硬件结点以及软件构件的部署。
组成:
结点:硬件设备(如服务器、工作站)
连接:结点之间的通信路径
┌─────────────────┐ │ 服务器结点 │ │ ┌───────────┐ │ │ │ 构件组件 │ │ │ └───────────┘ │ └───────┬─────────┘ │ ▼ ┌─────────────────┐ │ 客户端结点 │ └─────────────────┘
四、行为图(动态图)
5. 用例图(Use Case Diagram)
定义:展示系统功能的外部视图,描述用户与系统交互。
六个要素:
| 要素 | 符号 | 说明 |
|---|---|---|
| 参与者(Actor) | 🧑 | 系统外部的人/系统 |
| 用例(Use Case) | ○ | 系统提供的功能 |
| 关系 | — | Actor与Use Case的交互 |
| 系统边界 | [ ] | 界定系统范围 |
| 关联关系 | ─── | Actor参与Use Case |
| 扩展/包含 | <<extend>>/<<include>> | 用例之间的关系 |
include和extend的区别
include(包含)—— 必定执行
生活类比:你去银行存款,必定要验证身份
取款 ────包含────→ 验证身份 转账 ────包含────→ 验证身份 解读:无论取款还是转账,都要先验证身份!
extend(扩展)—— 条件触发
生活类比:你取钱的时候,如果"需要"才打印凭条
取款 ────扩展────→ 打印凭条 ↑ 仅在用户需要时触发
记忆口诀:
include = 包含 = 必须 = 子功能复用
extend = 扩展 = 可选 = 额外功能
示例:
┌──────────────────────────┐ │ 银行系统边界 │ │ │ │ ┌────────┐ ┌──────┐ │ │ │ 取款 │ │ 查询 │ │ │ └────────┘ └──────┘ │ │ │ │ │ │ ▼ ▼ │ └───────┼──────────────┼────┘ │ │ ┌────┴──┐ ┌───┴──┐ │ 🧑客户 │ │ 🧑客户 │ └────┬──┘ └───┬──┘
6. 序列图(Sequence Diagram / 时序图)
定义:描述对象之间按时间顺序的消息交互。
组成:
对象:矩形的顶部
生命线:虚线向下
激活条:窄矩形(对象执行时)
消息:箭头(有同步/异步之分)
消息类型:
| 消息类型 | 符号 | 说明 |
|---|---|---|
| 同步消息 | ──→ | 发送者等待接收者返回 |
| 异步消息 | ──⇒ | 发送者不等待继续执行 |
| 返回消息 | ←── | 返回值 |
示例:
客户 系统 银行 │ │ │ │──登录请求──→│ │ │ │──验证请求──→│ │ │←──验证结果──│ │←─登录成功──│ │
7. 通信图(Communication Diagram)
定义:强调对象之间的组织结构和消息传递。
与序列图的区别:
序列图强调时间顺序
通信图强调对象之间的链接关系
示例:
┌─────┐ 1: 发起请求 ┌─────┐ │对象1│──────────────────────────→│对象2│ └──┬──┘←─────────────────────────│──┬──┘ │ 2: 返回结果 │ │←────────────────────────────────┘
8. 状态图(State Diagram)
定义:描述对象的状态变化以及触发事件。
组成:
状态:圆角矩形
初始状态:实心圆●
终止状态:实心圆外加圈◉
转换:带箭头的线(标注触发事件)
状态图的要素:
事件/动作 ┌───────────┐ │ 状态 │ └───────────┘ │ ▼ (转换到下一状态)
示例(订单状态):
●──→[下单]──→[支付中]──→[已支付]──→[发货中]──→[已完成]──→◉ │ ▼ [取消]
9. 活动图(Activity Diagram)
定义:描述活动的执行流程,类似于流程图。
与状态图的区别:
状态图:描述对象的状态
活动图:描述活动的流程
组成:
活动:圆角矩形
决策节点:菱形(分支判断)
并行:分叉/汇合(fork/join)
泳道:分区域(区分不同责任)
示例:
┌─────────┐ ┌─────────┐ ┌─────────┐ │ 开始 │──→│ 处理1 │──→│ 决策 │ └─────────┘ └─────────┘ └────┬────┘ │ ┌─────────┴─────────┐ │ │ [是] [否] ▼ ▼ ┌───────────┐ ┌───────────┐ │ 处理2 │ │ 结束 │ └─────┬─────┘ └───────────┘ │ ▼ ┌───────────┐ │ 结束 │ └───────────┘
五、UML图分类汇总
结构图(静态图)
| 图名 | 说明 | 用途 |
|---|---|---|
| 类图 | 展示类及类之间的关系 | 系统静态结构 |
| 对象图 | 类图的实例 | 某时刻的对象快照 |
| 构件图 | 展示构件及依赖 | 物理代码构件 |
| 部署图 | 展示硬件部署 | 系统硬件结构 |
行为图(动态图)
| 图名 | 说明 | 用途 |
|---|---|---|
| 用例图 | 展示系统功能 | 外部视图、需求分析 |
| 序列图 | 按时间顺序描述消息 | 对象交互时间顺序 |
| 通信图 | 强调对象链接 | 对象交互组织结构 |
| 状态图 | 描述状态变化 | 对象状态行为 |
| 活动图 | 描述活动流程 | 业务流程、并行活动 |
六、软考常考知识点
1. 九种图的关系
UML 2.0 定义了13种图: 结构图(4种): ├── 类图 ★★★ ├── 对象图 ★★ ├── 构件图 ★★ └── 部署图 ★★ 行为图(9种): ├── 用例图 ★★★ ├── 序列图 ★★★ ├── 通信图 ★★ ├── 状态图 ★★ ├── 活动图 ★★ ├── 计时图 ├── 交互概览图 ├── 复合结构图 └── 包图
2. 类图关系判断技巧
题目常见考法:
给出类图,问属于哪种关系
问聚合和组合的区别
问多重度(如 1..* 表示多少)
多重度标记:
| 标记 | 含义 |
|---|---|
| 0..1 | 零或一 |
| 1 | 恰好一 |
| 0..* | 零或多 |
| 1..* | 一或多 |
| * | 任意多 |
3. 用例图关系判断
包含(include):
Base用例 → 包含 Target用例
执行Base时,必定执行Target
扩展(extend):
Base用例 ← 扩展 Target用例
在特定条件下扩展Base
4. 序列图 vs 通信图
| 序列图 | 通信图 |
|---|---|
| 强调时间顺序 | 强调对象链接 |
| 有激活条 | 无激活条 |
| 生命线+消息 | 对象+链+消息 |
七、真题考点速记
必背知识点
UML三个要素:基本构造块、规则、公共机制
四种事务:
结构事物(静态)
行为事物(动态)
分组事物(包)
注释事物(解释)
六种关系强度:依赖 < 关联 < 聚合 < 组合
聚合 vs 组合:聚合可分离,组合不可分离
类图三隔间:类名、属性、方法
用例图三要素:参与者、用例、系统边界
序列图消息:同步消息、异步消息、返回消息
状态图三要素:状态、转换、事件
八、常见题型与解题技巧
题型1:用例图补全
解题步骤:
识别参与者(Actor)
识别用例(Use Case)
确定Include/Extend关系
检查系统边界
题型2:类图关系判断
解题步骤:
看连线箭头方向
判断是泛化、实现、依赖还是关联
如果是关联,再判断是普通关联、聚合还是组合
题型3:序列图/通信图
解题步骤:
识别对象
按时间顺序排列消息
注意同步/异步消息
题型4:状态图绘制
解题步骤:
识别所有可能状态
确定初始状态和终止状态
列出触发状态转换的事件
绘制状态转换图
整理时间:2026-05-20来源:软考中级-软件设计师考试大纲