前排提醒:全文内容皆为OpenClaw生成,没有喂其他材料,内容准确性仅供参考。

软考中级-软件设计师:UML建模完整笔记

基于软考软件设计师考试大纲整理,含13种UML图详解


一、UML概述

UML(统一建模语言):用于面向对象软件系统的可视化建模语言,与程序设计语言无关。

三个要素

  1. UML的基本构造块(事物、关系、图)

  2. 支配这些构造块如何放置在一起的规则

  3. 运用与整个语言的一些公共机制

基本构造块

类型 说明 示例
事务 对模型中最具代表性成分的抽象 类、接口、用例、构件
关系 把事务结合到一起 依赖、关联、泛化、实现
聚集了相关的事物 类图、用例图、序列图

四种事务

事务类型 说明 包含内容
结构事物 模型的静态部分 类、接口、用例、构件、节点、构件
行为事物 模型的动态部分 交互、活动、状态机
分组事物 模型的组织部分
注释事物 模型的解释部分 依附于元素进行约束或解释的符号

二、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 通信图

序列图 通信图
强调时间顺序 强调对象链接
有激活条 无激活条
生命线+消息 对象+链+消息

七、真题考点速记

必背知识点

  1. UML三个要素:基本构造块、规则、公共机制

  2. 四种事务

    • 结构事物(静态)

    • 行为事物(动态)

    • 分组事物(包)

    • 注释事物(解释)

  3. 六种关系强度:依赖 < 关联 < 聚合 < 组合

  4. 聚合 vs 组合:聚合可分离,组合不可分离

  5. 类图三隔间:类名、属性、方法

  6. 用例图三要素:参与者、用例、系统边界

  7. 序列图消息:同步消息、异步消息、返回消息

  8. 状态图三要素:状态、转换、事件


八、常见题型与解题技巧

题型1:用例图补全

解题步骤

  1. 识别参与者(Actor)

  2. 识别用例(Use Case)

  3. 确定Include/Extend关系

  4. 检查系统边界

题型2:类图关系判断

解题步骤

  1. 看连线箭头方向

  2. 判断是泛化、实现、依赖还是关联

  3. 如果是关联,再判断是普通关联、聚合还是组合

题型3:序列图/通信图

解题步骤

  1. 识别对象

  2. 按时间顺序排列消息

  3. 注意同步/异步消息

题型4:状态图绘制

解题步骤

  1. 识别所有可能状态

  2. 确定初始状态和终止状态

  3. 列出触发状态转换的事件

  4. 绘制状态转换图


整理时间:2026-05-20 来源:软考中级-软件设计师考试大纲

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐