← 返回博客列表

一、引言:UML 概述与发展历史

统一建模语言(Unified Modeling Language,UML)是软件工程领域用于可视化描述、构造和文档化软件系统的一种标准化建模语言。它提供了一组图形化的表示法,帮助开发者、架构师和业务人员在统一的"语言"下沟通系统的结构与行为。在软考(系统架构设计师)中,UML 是每年必考的核心知识点,尤其在面向对象分析与设计、软件建模部分占据重要分值。

UML 的标准定义
UML 是一种通用的、可视化的建模语言,用于对软件密集型系统进行规约、构造和文档化。它不是一种编程方法,也不是一种开发过程,而是一套表示法(Notation)。UML 独立于开发过程,可结合瀑布、RUP、敏捷等各类过程使用。

1.1 UML 的发展历史

UML 的诞生是面向对象方法学"三巨头"融合的结果。在 20 世纪 90 年代,面向对象分析与设计(OOAD)领域出现了多种建模方法并存的局面,其中最具影响力的三种是:

方法林立导致开发者无所适从,"统一"呼声渐起。1994 年 Booch 与 Rumbaugh 相聚 Rational 公司,开始统一工作;1995 年 Jacobson 加入。三人被称为"三个朋友"(The Three Amigos)。1997 年 OMG(对象管理组织)采纳 UML 1.1 作为标准,标志着 UML 正式成为业界统一的建模语言。

1994 Booch + Rumbaugh 开始统一工作 1995 Jacobson 加入 三巨头汇合 1997 OMG 采纳 UML 1.1 正式成为标准 2005 UML 2.0 发布 面向构件/MDA 2.5.1 现行版本 持续演进 UML 发展历程 从方法纷争到统一标准 核心人物:Booch · Rumbaugh · Jacobson(三朋友) 标准化组织:OMG(Object Management Group)
图 1:UML 发展历程时间线

1.2 UML 2.x 的图分类

UML 2.x(从 UML 2.0 到当前的 2.5.1)定义了 13 种图(部分文献计为 14 种,将"包图"独立或计入交互概览图)。所有图按语义分为两大类:结构图(Structure Diagram)描述系统的静态组成,行为图(Behavior Diagram)描述系统的动态行为。行为图中又包含一个交互图(Interaction Diagram)子集,专门刻画对象间的消息交互。

UML 图(13 种) 结构图 Structure (7) 行为图 Behavior (6+1) 类图 Class 对象图 Object 组件图 Component 部署图 Deployment 包图 Package 复合结构图 轮廓图 Profile 用例图 Use Case 活动图 Activity 状态机图 State 交互图 Interaction 交互图(4 种子类型) 序列图 Sequence 通信图 Communication 定时图 Timing 交互概览图 Interaction Overview 结构图=静态视图(7 种);行为图=动态视图(6 种),其中交互图是行为图的子集(4 种)
图 2:UML 2.x 全部图的分类树
易混淆点
· UML 1.x 定义了 9 种图,UML 2.x 扩展为 13 种(新增对象图、包图、组件图、部署图细节、复合结构、通信、定时、交互概览等)。
· 交互图不是独立于行为图的第三类,而是行为图的子集,包含序列、通信、定时、交互概览四种。
· 软考中"UML 有多少种图"按 13 种作答。

二、UML 图分类总览

本节给出 13 种 UML 图的完整清单及其用途,帮助建立全局认知。结构图关注系统"由什么构成",行为图关注系统"做什么、如何做"。

2.1 结构图(Structure Diagrams,7 种)

结构图描述系统的静态构成要素及其关系,包括类、对象、组件、节点、包等。它们回答"系统有哪些部分、如何组织"。

2.2 行为图(Behavior Diagrams,6 种)

行为图描述系统的动态行为:功能的组织(用例)、流程的控制(活动)、状态的变化(状态机)以及对象间的交互。

此外还有交互概览图(Interaction Overview Diagram),它是活动图与交互图的混合,把交互片段作为活动节点。四种交互图(序列、通信、定时、交互概览)共同构成"交互图"这一子类。

结构图(静态) 类图 Class Diagram 类的结构、属性、操作、关系 对象图 Object 类图的实例快照 组件图 Component 可替换单元、接口依赖 部署图 Deployment 软件到硬件的物理映射 包图 Package 模块组织、依赖 复合结构 Composite 类内部端口、连接器 轮廓图 Profile UML 扩展机制(stereotype) 回答:系统由什么构成? 关注静态结构与组织 行为图(动态) 用例图 Use Case 功能、参与者、系统边界 活动图 Activity 业务流程、控制流 状态机图 State Machine 状态与转换 序列图 Sequence 时间顺序消息交互 通信图 Communication 结构关系上的消息 定时图 Timing 状态随时间变化 交互概览图 Overview 活动+交互的混合 回答:系统做什么、如何做? 关注动态行为与交互 互补
图 3:UML 13 种图总览 —— 结构图与行为图互补

2.3 各图用途对照表

图类型 分类 核心用途 软考出现频率
类图 结构图 描述类的结构及六种关系,面向对象设计核心 ★★★★★
用例图 行为图 需求建模,描述功能与参与者 ★★★★★
序列图 交互图 按时间顺序描述对象消息交互 ★★★★★
活动图 行为图 描述业务流程/算法流程 ★★★★
状态机图 行为图 描述对象生命周期状态转换 ★★★★
组件图 结构图 描述组件及接口依赖 ★★★
部署图 结构图 描述物理部署与节点通信 ★★★
对象图 结构图 类图的实例快照 ★★
包图 结构图 模块组织与依赖 ★★
通信图 交互图 对象结构上的消息(序列图变体) ★★
复合结构图 结构图 类内部端口与连接器 ★
定时图 交互图 状态随时间变化 ★
轮廓图 结构图 UML 扩展机制 ★
记忆口诀
结构七:类、对、组、部、包、复、轮(类图、对象图、组件图、部署图、包图、复合结构图、轮廓图)
行为六:用、活、状、序、通、定(用例、活动、状态机、序列、通信、定时)+ 交互概览
交互四:序、通、定、概(序列、通信、定时、交互概览)

三、类图(Class Diagram)详解

类图是 UML 中使用最广泛、软考中考查最细致的图。它描述系统的静态结构:类的内部构成(属性、操作)以及类与类之间的各种关系。掌握类图,是掌握面向对象设计的基础。

3.1 类的表示法

在 UML 中,一个类用一个被分成三层的矩形表示:最上层是类名,中间层是属性,最下层是操作(方法)。每一行的可见性用符号表示。

Student - id : Long - name : String # score : int ~ remark : String + enroll() : void + getScore() : int - validate() : boolean
图 4:类的标准表示法(类名 / 属性 / 操作三栏)

可见性符号

符号 名称 含义 Java 等价
+ 公有(Public) 所有类均可访问 public
- 私有(Private) 仅本类可访问 private
# 受保护(Protected) 本类及子类可访问 protected
~ 包内(Package) 同包内可访问 default

属性的标准格式为:可见性 名称 : 类型 [多重性] = 默认值;操作的格式为:可见性 名称(参数列表) : 返回类型。

3.2 类间的六种关系(重点)

类间关系是软考最高频的考点,必须精确掌握每种关系的箭头样式和语义。从强到弱依次为:泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖。下面逐一详解并给出 SVG 示例。

关系强弱总览(必须牢记)
泛化(继承) ≈ 实现 > 组合(强拥有,同生共死) > 聚合(弱拥有,可分离) > 关联(平等连接) > 依赖(临时使用)

① 泛化 / 继承(Generalization)

泛化描述"是一种(is-a)"关系,子类继承父类。表示为实线 + 空心三角箭头,箭头指向父类(超类)。

Animal Dog Cat 实线 + 空心三角
图 5:泛化关系 —— 子类指向父类,空心三角箭头

② 实现(Realization)

实现描述类与接口的关系,类实现接口中定义的操作。表示为虚线 + 空心三角箭头,箭头指向接口。

«interface» Flyable Bird 虚线 + 空心三角
图 6:实现关系 —— 类指向接口,虚线空心三角

③ 关联(Association)

关联表示两个类之间存在结构上的联系(如"拥有""知道")。表示为实线,可带方向(单向关联用开箭头)、角色名和多重性。关联是平等的双向或单向引用关系。

Teacher Student 1 * teaches 实线 + 多重性(1..*),单向关联带开箭头
图 7:关联关系 —— 实线连接,可带多重性与角色名

④ 聚合(Aggregation)

聚合表示"整体与部分"的弱关系:部分可以脱离整体独立存在。表示为实线 + 空心菱形,菱形在整体一端。例如球队与球员,球队解散后球员仍存在。

Team Player 1 .. * 实线 + 空心菱形(在整体端),弱拥有
图 8:聚合关系 —— 空心菱形表示弱拥有,部分可独立

⑤ 组合(Composition)

组合表示"整体与部分"的强关系:部分不能脱离整体存在,整体消亡则部分同时消亡。表示为实线 + 实心菱形,菱形在整体一端。例如鸟与翅膀、订单与订单明细。

Bird Wing 2 实线 + 实心菱形(在整体端),强拥有、同生共死
图 9:组合关系 —— 实心菱形表示强拥有,部分随整体消亡

⑥ 依赖(Dependency)

依赖表示一个类的变化会影响另一个类(如作为方法参数、局部变量使用)。表示为虚线 + 开箭头,箭头指向被依赖的类。依赖是最弱的关系,是"使用"而非"拥有"。

Person Car «use» 虚线 + 开箭头,临时使用关系
图 10:依赖关系 —— 虚线开箭头,表示使用

3.3 六种关系对比表

关系 语义 线型 箭头/端点 强弱 示例
泛化 is-a 继承 实线 空心三角→父类 最强 Dog → Animal
实现 实现接口 虚线 空心三角→接口 最强 Bird ⇢ Flyable
组合 强拥有,同生共死 实线 实心菱形◆整体端 强 Bird ◆— Wing
聚合 弱拥有,可分离 实线 空心菱形◇整体端 较强 Team ◇— Player
关联 结构联系,平等引用 实线 无/开箭头 中 Teacher — Student
依赖 临时使用 虚线 开箭头→被依赖 最弱 Person ⇢ Car
区分聚合 vs 组合的关键
看"部分能否脱离整体独立存在":
· 能独立 → 聚合(空心菱形):球队-球员、图书馆-书、班级-学生
· 不能独立 → 组合(实心菱形):鸟-翅膀、公司-部门、订单-订单明细

3.4 多重性(Multiplicity)规则

多重性标注在关联线两端,表示一个对象与对方多少个对象相关联。

表示 含义 说明
1 恰好一个 必须且只能有一个对象
0..1 零或一个 可选,最多一个
* 或 0..* 零或多个 任意数量
1..* 一或多个 至少一个
m..n m 到 n 个 指定区间,如 2..5
n 恰好 n 个 如 2 表示固定 2 个

3.5 完整类图示例:Shape 图形体系

下面是一个综合了泛化、实现、组合、依赖等关系的完整类图示例:抽象类 Shape 派生 Circle 和 Rectangle,Shape 组合了 Color,依赖 Canvas,Circle 实现 Drawable 接口。

Color - rgb : int + value() : int «abstract» Shape - name : String # color : Color + draw() : void + area() : double «interface» Drawable + draw() : void + render() : void Circle - radius : double + area() : double + draw() : void Rectangle - width, height + area() : double + draw() : void Canvas + paint() : void 1 has «use» 图例: 泛化(实线空心三角) 实现(虚线空心三角) 组合(实心菱形) 依赖(虚线开箭头)
图 11:完整类图示例 —— Shape 图形体系(综合泛化/实现/组合/依赖)

类图设计要点

  • 抽象类名用斜体,抽象方法也用斜体(如 Shape 及其 area())。
  • 接口用 «interface» 构造型标注。
  • 菱形(聚合/组合)总是画在整体一端,不是部分端。
  • 三角箭头(泛化/实现)总是指向父类/接口。
  • 静态成员用下划线表示。

四、用例图(Use Case Diagram)

用例图是从外部视角描述系统功能的利器,常用于需求分析阶段。它回答"系统能为谁做什么",是软件需求规约的重要组成部分。

4.1 基本元素

4.2 用例间的关系

关系 表示 语义
包含 include 虚线箭头,«include»,指向被包含用例 基用例必然执行被包含用例,用于提取公共行为
扩展 extend 虚线箭头,«extend»,指向基用例(扩展指向基) 扩展用例在特定条件下才执行,是可选行为
泛化 generalization 实线空心三角,指向父用例 子用例继承并特化父用例
include vs extend 方向辨析(高频考点)
· include:基用例 →(«include»)→ 公共用例。例如"取款"必然"身份验证"。
· extend:扩展用例 →(«extend»)→ 基用例。例如"打印凭条"扩展"取款"(可选)。
记忆:包含是"必须",扩展是"可选"。

4.3 ATM 用例图示例

ATM 系统 客户 银行 系统 取款 存款 查询余额 转账 身份验证 打印凭条 «include» «extend»
图 12:ATM 用例图 —— include(身份验证)与 extend(打印凭条)

案例研究:在线购物用例图

参与者:买家、卖家、支付系统(外部)。核心用例:浏览商品、加入购物车、下单、支付、物流跟踪。其中"下单"必然包含"库存校验";"使用优惠券"扩展"下单"(可选);"支付"包含"身份验证"。

  • «include»:下单 → 库存校验;支付 → 身份验证(必须执行)
  • «extend»:使用优惠券 → 下单(满足条件时执行)
  • 泛化:买家 → VIP买家(特化,享受更多权益)
常见错误
· 把"扩展"和"包含"的方向画反。记住:扩展用例指向基用例,包含基用例指向公共用例。
· 把参与者画成系统内部模块。参与者必须是系统外部的实体。
· 用例描述过于细碎(如"点击按钮"不是用例,用例应是完整的功能)。

五、序列图(Sequence Diagram)

序列图按时间顺序展示对象之间的消息交互,是交互图中最常用的一种。它强调"谁在什么时候给谁发了什么消息"。

5.1 基本元素

消息类型 表示 含义
同步消息 实线 + 实心箭头 ▶ 调用者等待返回
异步消息 实线 + 开箭头 > 调用者不等待,立即继续
返回消息 虚线 + 开箭头 返回结果
创建消息 带 «create» 的箭头 创建新对象
删除消息 箭头末端加 X 销毁对象

5.2 组合片段(Combined Fragment)

组合片段用于表达更复杂的控制逻辑,是序列图的高级特性,也是软考常考点。

片段 含义 等价程序结构
alt 备选(多分支,互斥) if-else if-else
opt 可选(单分支) if(无 else)
loop 循环 for / while
break 中断(条件成立时跳出) break
par 并行(多区域同时执行) 并行任务
ref 引用(复用其他序列图) 调用子流程

5.3 在线支付序列图

:User :OrderUI :PayService :PayGateway 1: clickPay() 2: createOrder() 3: requestPay() alt [支付成功] 4: success 5: notifyResult(ok) [支付失败] 6: fail 7: showResult() 在线支付流程,含 alt 组合片段处理成功/失败分支
图 13:在线支付序列图 —— 含 alt 组合片段

案例研究:用户登录序列

对象:User、LoginUI、AuthService、UserDAO。流程:User 输入凭证 → LoginUI 调用 AuthService.login() → AuthService 查询 UserDAO → UserDAO 返回用户信息 → AuthService 校验密码 → 返回 token 给 LoginUI → 显示登录成功。其中"密码校验失败"可用 opt 片段表示重试逻辑,三次失败用 loop + break 跳出锁定账户。

六、活动图(Activity Diagram)

活动图类似流程图,用于描述业务流程、算法步骤或工作流。它能清晰表达控制流、分支、并发与数据流,是需求分析与流程设计的利器。

6.1 基本节点

6.2 订单处理活动图(含泳道)

客户 系统 仓库 提交订单 库存充足? [否] 提示缺货 [是] 扣减库存 接收拣货单 发货 确认收货
图 14:订单处理活动图 —— 泳道 + 判断 + 并发分叉/汇合
Fork/Join 与 Decision/Merge 的区别
· Fork/Join(粗实线):表示并发执行,多流同时进行,Join 等待全部完成。
· Decision/Merge(菱形):表示互斥选择,根据条件走其中一条,Merge 汇合。
这是活动图最高频考点,切勿混淆。

案例研究:退款流程活动图

客户发起退款 → 系统校验订单状态 → 判断是否在退款期内:[是] 进入审核流程,[否] 拒绝并通知客户;审核通过则退款到原账户 → 通知客户完成;审核拒绝则驳回。该流程可用泳道划分为"客户、客服、系统、财务"四条泳道,清晰体现各角色职责与流程并发。

七、状态图(State Machine Diagram)

状态图描述一个对象在其生命周期内所经历的各种状态、状态间的转换以及触发转换的事件。它特别适合描述具有明显状态特征的实体(如订单、连接、文档审批)。

7.1 基本元素

7.2 订单状态机示例

已创建 Created 支付 已支付 Paid 发货 已发货 Shipped 签收 已签收 Delivered 完成 已关闭 Closed [超时未发货]/退款 取消订单
图 15:订单状态机 —— 已创建→已支付→已发货→已签收→已关闭

案例研究:TCP 连接状态图

TCP 连接的有限状态机是状态图的经典案例。主要状态:CLOSED → SYN_SENT → ESTABLISHED → FIN_WAIT_1 → FIN_WAIT_2 → TIME_WAIT → CLOSED(主动关闭方);服务端则 LISTEN → SYN_RCVD → ESTABLISHED → CLOSE_WAIT → LAST_ACK → CLOSED。事件包括 SYN、SYN+ACK、ACK、FIN、RST 等报文。绘制时注意 TIME_WAIT 的 2MSL 定时器转换。这是软考论述题常考的综合性状态图。

八、组件图与部署图

组件图与部署图都属于结构图,用于描述系统的物理视角:组件图关注软件的模块化构成,部署图关注软件到硬件的映射。

8.1 组件图(Component Diagram)

组件图描述系统中可替换的物理单元(组件)及其通过接口的依赖关系。组件用带 «component» 构造型或右上角小图标的矩形表示。接口分为提供接口(lollipop 棒糖符号)和需求接口(半圆符号)。

«component» Web 前端 需求接口: 订单API «component» 订单服务 提供 需求 «component» 支付服务 «component» DB 订单数据库 JDBC 电商系统组件图 组件通过提供/需求接口协作,虚线表示依赖
图 16:组件图 —— 组件通过棒糖接口(提供)与半圆接口(需求)协作

8.2 部署图(Deployment Diagram)

部署图描述软件构件(Artifact)部署到硬件节点(Node)上的物理拓扑,以及节点间的通信路径。节点用立体方块表示,构件画在节点内部。

«node» 客户端 «artifact» 浏览器 «node» 应用服务器 «artifact» order.war «artifact» pay.war «node» 数据库服务器 «artifact» MySQL HTTPS JDBC 三层部署架构 部署图要点: · 节点(Node):硬件设备或执行环境,用立体方块表示 · 构件(Artifact):部署在节点上的物理文件(.war/.jar/可执行文件) · 通信路径:节点间的连接,标注协议(HTTP/JDBC/RMI 等) · 适用场景:分布式系统部署、微服务部署、软硬件映射
图 17:部署图 —— 客户端/应用服务器/数据库三层部署

案例研究:微服务部署图

一个典型微服务部署:网关节点(Nginx + API Gateway)部署在 DMZ;多个应用节点(K8s Worker)分别运行订单服务、支付服务、商品服务容器;缓存节点(Redis);数据库主从节点;消息队列节点(Kafka)。节点间通过内部网络通信,对外通过 HTTPS 网关。绘制时把每个容器作为构件画在对应 Worker 节点内,节点间标注 gRPC/MQ 协议。

九、其他 UML 图简介

9.1 对象图(Object Diagram)

对象图是类图在某一时刻的实例化快照,展示具体的对象及其链接(Link)。对象名格式为 对象名:类名,下方列出属性的具体值。常用于验证类图设计、理解复杂场景。

john:Student id = 1001 name = "张三" score = 95 c1:Course code = "CS101" title = "UML" credit = 3 选课 对象名下加下划线,属性给出具体值
图 18:对象图 —— Student 与 Course 的实例快照

9.2 包图(Package Diagram)

包图以包(文件夹形状)为组织单元,描述模块间的依赖关系。包可用于组织类、用例等元素,依赖用虚线开箭头表示。它体现系统的分层与模块化。

UI 界面层 Business 业务层 DAO 数据层 依赖 依赖 包间依赖虚线开箭头,体现分层
图 19:包图 —— UI / Business / DAO 分层依赖

9.3 通信图(Communication Diagram)

通信图(UML 1.x 称协作图)与序列图表达相同信息,但更强调对象间的结构关系而非时间顺序。消息用带序号的箭头标注在连接线上,序号表示发送顺序。

:User :OrderUI :PayService 1: clickPay() 2: createOrder() 3: result 消息带序号表示顺序,强调对象结构关系
图 20:通信图 —— 序列图的另一视角,强调对象结构

9.4 定时图(Timing Diagram)

定时图描述对象状态或属性值随时间轴(横轴)的变化,常用于实时系统、嵌入式系统,刻画时序约束。状态用水平条带表示,时间轴上标注事件。

Closed Open Closing open() close() closed 时间 门状态定时图
图 21:定时图 —— 门状态随时间变化(Closed→Open→Closing→Closed)
对象图 vs 类图
对象图是类图的实例化。类图描述"结构定义",对象图描述"某一时刻的实例快照"。类图中属性只有类型,对象图中属性有具体值;类图中类名不加下划线,对象图中对象名加下划线。
通信图 vs 序列图(高频考点)
· 序列图:强调时间顺序,生命线自上而下。
· 通信图:强调对象结构关系,消息带序号。
两者语义等价,可相互转换,都是交互图的子类型。

十、UML 建模实战案例:在线考试系统

本节以"在线考试系统"为例,完整演示如何从需求出发,逐步用多种 UML 图进行建模。一个典型的建模流程是:用例图(需求)→ 类图(静态结构)→ 序列图(关键交互)→ 活动图(业务流程)→ 部署图(物理架构)。

10.1 用例图:需求建模

参与者:学生、教师、管理员。学生参加考试;教师出题、阅卷;管理员管理用户与系统。核心用例:登录、参加考试、自动判分、出题、阅卷、统计成绩。

在线考试系统 学生 教师 管理 员 登录 参加考试 自动判分 出题 阅卷 统计成绩 «include»
图 22:在线考试系统用例图 —— 学生/教师/管理员三方协作

10.2 类图:静态结构建模

识别核心实体类:User(用户基类)、Student、Teacher(继承 User)、Exam(考试)、Paper(试卷)、Question(题目)、Answer(作答)、Score(成绩)。关系:Student/Teacher 泛化自 User;Exam 组合 Paper;Paper 聚合 Question;Student 关联 Answer;Answer 关联 Score。

User # id : Long - name : String + login() : boolean Student - stuNo : String + takeExam() : void Teacher - dept : String + grade() : void Exam - title : String - duration : int + start() : void Paper - totalScore : int 1 Question - content : Text * Answer - content : Text 提交 Score - value : double 1
图 23:在线考试系统类图 —— User 泛化、Exam 组合 Paper、聚合 Question

10.3 序列图:关键交互建模

描述学生参加考试的关键交互:Student → ExamUI → ExamService → Paper → Question,含 loop 循环答题与提交判分。

:Student :ExamUI :ExamService :Paper 1: startExam() 2: getPaper() 3: load() paper loop [未答完] 4: answer(q) 5: submitAnswer() 6: next() 7: submit() 8: grade() 9: score
图 24:在线考试系统序列图 —— 含 loop 循环答题片段

10.4 活动图:考试流程建模

考试流程:登录 → 选择考试 → 加载试卷 → 判断是否客观题:客观题自动判分,主观题教师阅卷 → 汇总成绩 → 发布。用泳道划分学生、系统、教师三方。

学生 系统 教师 加载试卷 答题 客观题? [否] 主观题阅卷 [是] 自动判分 汇总成绩 查看成绩
图 25:在线考试系统活动图 —— 三泳道含判断分支

10.5 部署图:物理架构建模

部署架构:客户端浏览器 → Web 服务器(考试应用)→ 应用服务器(判分服务)→ 数据库服务器;外部对接题库服务。

«node» 客户端 «artifact» 浏览器 «node» Web服务器 «artifact» exam.war «artifact» grade.jar «node» DB服务器 «artifact» MySQL HTTPS JDBC «node» 题库服务(外部) Question Bank API REST
图 26:在线考试系统部署图 —— 三层部署 + 外部题库
建模流程总结
用例图明确"做什么" → 类图明确"由什么组成" → 序列图明确"如何交互" → 活动图明确"流程如何走" → 部署图明确"部署在哪里"。五种图从需求到实现逐层细化,构成完整的建模链条。

十一、软考考点总结与真题

11.1 必背考点清单

核心记忆要点

  • UML 起源:Booch + OMT + OOSE 三方法统一,OMG 标准化,UML 2.x 共 13 种图。
  • 两大分类:结构图(7 种,静态)+ 行为图(6 种,动态,含 4 种交互图子集)。
  • 六种关系及箭头(最高频):泛化(实线空心三角)、实现(虚线空心三角)、组合(实心菱形)、聚合(空心菱形)、关联(实线)、依赖(虚线开箭头)。
  • 关系强弱:泛化=实现 > 组合 > 聚合 > 关联 > 依赖。
  • 菱形方向:聚合/组合的菱形总在整体一端;三角总指向父类/接口。
  • 用例关系:include(必须,基→公共)、extend(可选,扩展→基)、泛化。
  • 序列图组合片段:alt(分支)、opt(可选)、loop(循环)、break(中断)、par(并行)。
  • 活动图:Fork/Join 表并发,Decision/Merge 表选择,二者不可混淆。
  • 可见性符号:+ 公有、- 私有、# 受保护、~ 包内。
  • 多重性:1、0..1、*、1..*、m..n。

11.2 历年真题精讲

真题一(类图关系辨析)

在某在线交易系统中,"订单"与"订单明细"之间的关系是:订单删除时其所有订单明细一并删除。则订单与订单明细之间应使用 UML 类图中的哪一种关系?请给出表示符号。

答案:组合(Composition)关系。
解析:订单明细不能脱离订单独立存在,订单删除则明细同时删除,属于"同生共死"的强整体-部分关系,故为组合。表示为实线 + 实心菱形,菱形画在订单(整体)一端。
易错点:若题目说明"部分可独立存在"(如球队-球员),则为聚合(空心菱形)。

真题二(用例图 include/extend)

某 ATM 系统,"取款"用例执行时必然执行"身份验证"用例;而"打印凭条"用例仅在用户选择打印时才执行。请分别说明这两个用例关系类型及箭头方向。

答案:
1. 取款与身份验证为 «include»(包含)关系:取款(基用例)→(«include»虚线箭头)→ 身份验证(被包含用例)。"必然执行"是 include 的标志。
2. 打印凭条与取款为 «extend»(扩展)关系:打印凭条(扩展用例)→(«extend»虚线箭头)→ 取款(基用例)。"可选/条件执行"是 extend 的标志。
记忆:包含是"必须"(基→公共),扩展是"可选"(扩展→基)。

真题三(UML 图分类与序列图片段)

UML 2.0 共提供了多少种图?请说明其分类。在序列图中,用于表示"条件成立时执行,否则跳过"的组合片段是哪一个?表示"多分支互斥选择"的又是哪一个?

答案:
UML 2.0 共提供 13 种图,分为两大类:结构图(7 种)——类图、对象图、组件图、部署图、包图、复合结构图、轮廓图;行为图(6 种)——用例图、活动图、状态机图、序列图、通信图、定时图(其中序列/通信/定时/交互概览统称交互图)。
序列图中:"条件成立时执行,否则跳过"对应 opt(可选片段);"多分支互斥选择"对应 alt(备选片段)。
辨析:opt 等价于无 else 的 if;alt 等价于 if-else if-else;loop 表循环;par 表并行。

11.3 记忆技巧与易错点

高效记忆法
· 六关系速记:"泛实组聚关依"(泛化、实现、组合、聚合、关联、依赖),强弱从左到右递减。
· 菱形口诀:"空聚实组"——空心菱形是聚合(弱),实心菱形是组合(强)。
· 三角口诀:"实泛虚实"——实线三角是泛化,虚线三角是实现。
· 图分类口诀:结构七(类对组部署包复轮),行为六(用活状序通定)+ 交互概览。
· 组合片段:alt 选一、opt 可选、loop 循环、par 并行、break 中断。
高频易错点警示
1. 把 include 和 extend 方向画反——记住 include 是基指向公共,extend 是扩展指向基。
2. 把聚合和组合搞混——关键看"部分能否脱离整体独立存在"。
3. 把 Fork/Join(并发)与 Decision/Merge(选择)混淆——前者是粗实线,后者是菱形。
4. 把序列图与通信图混为一谈——前者强调时间顺序,后者强调对象结构。
5. 把交互图当成独立于行为图的第三类——交互图是行为图的子集。
6. 把 UML 1.x 的 9 种图与 UML 2.x 的 13 种图混淆——考试按 13 种作答。
对比维度 序列图 通信图 活动图
强调重点 时间顺序 对象结构关系 控制流与数据流
消息表示 纵向生命线箭头 带序号的连线箭头 不直接表示消息
适合场景 方法调用时序 对象协作结构 业务流程/算法
所属类别 交互图 交互图 行为图

11.4 结语

UML 是软件架构师与系统分析师的"通用语言"。掌握 UML 不仅是应对软考的需要,更是进行规范化软件设计的基础。在实际工程中,不必拘泥于画出所有 13 种图,而应根据建模目的选择最合适的图:需求阶段多用用例图,设计阶段多用类图与序列图,流程梳理用活动图,状态复杂的对象用状态机图,部署交付用组件图与部署图。建模的核心价值在于"沟通与思考"——把脑中模糊的设计可视化、可讨论、可验证。

建议结合本系列其他文章(软件架构风格、质量属性、ATAM 评估等)一起复习,形成从建模→架构→评估的完整知识体系。多动手画图、多做真题,是掌握 UML 建模的不二法门。