专题(四-九):UML合集
UML图像建模合集
专题 4 — UML 用例图 (Use Case Diagram)
4.1 概述与定位
定义:用例图是从用户视角出发的、描述系统功能范围与外部实体交互的行为静态模型。
定位:主要应用于需求分析阶段,作为建立系统范围标尺(System Boundary)以及与业务方(客户、产品经理)沟通功能需求的通用语言。
4.2 核心元素与关系规范
| 核心元素/关系 | 标准图形语义 | 核心规则 / 避坑禁忌 |
|---|---|---|
| 参与者 (Actor) | 系统边界外侧的外部实体 | 代表与系统发生直接交互的角色、外部系统或定时器。 |
| 用例 (Use Case) | 椭圆,内部标注名称 | 命名必须是“动词 + 名词”的动宾短语(例如 借阅图书)。 |
| 系统边界 (Boundary) | 实线矩形框 | 框内为系统用例,框外为参与者,定义系统范围。 |
| 关联 (Association) | 无箭头实线 | 连接参与者与用例,描述交互通路。绝不能连接用例与用例。 |
| 包含 (Include) | 带箭头虚线 <<include>> | 基础用例在执行过程中强制必选调用子用例。箭头指向子用例。 |
| 扩展 (Extend) | 带箭头虚线 <<extend>> | 扩展用例在特定守卫条件满足时,可选插入基用例。箭头指向基用例。 |
| 泛化 (Generalization) | 空心三角箭头实线 | 父子类型之间的继承关系(参与者或用例均可泛化)。箭头指向父元素。 |
4.3 场景例图:高校图书馆管理系统
代码段
graph LR
subgraph 高校图书馆管理系统
UC1(查询图书)
UC2(预约图书)
UC3(借阅图书)
UC4(登记登记)
UC5(验证读者身份)
UC6(图书入库)
end
Reader(普通读者) --- UC1
VIPReader(VIP读者) --- UC3
Admin(图书管理员) --- UC6
%% 泛化关系
VIPReader --> Reader
UC2 --> UC1
%% 包含与扩展
UC3 -. "<<include>>" .-> UC5
UC6 -. "<<include>>" .-> UC5
UC4 -. "<<extend>>" .-> UC3
专题 5 — UML 类图 (Class Diagram)
5.1 概述与定位
定义:类图是描述系统静态结构的核心模型,展示系统中的类、接口、内部组成及彼此间的静态结构关系。
定位:贯穿分析阶段(概念类图)与设计阶段(设计类图),是代码生成与逆向工程的基石。
5.2 类关系强弱度与标准规范(由弱到强)
| 关系类型 | 语义描述 | 代码/静态特征 | Mermaid 画法规范 |
|---|---|---|---|
| 依赖 (Dependency) | 临时使用关系(“use a”) | 表现为方法参数、局部变量或返回值 | ClassA ..> ClassB (虚线单箭头) |
| 关联 (Association) | 长期结构化连接(“know a”) | 类持有另一个类的实例作为成员变量 | ClassA --> ClassB (实线单箭头) |
| 聚合 (Aggregation) | 弱拥有关系(“has-a”) | 部分可脱离整体独立存在(生命周期独立) | ClassA o-- ClassB (空心菱形实线) |
| 组合 (Composition) | 强拥有一体化(“contains-a”) | 部分不能脱离整体,生死与共 | ClassA *-- ClassB (实心菱形实线) |
| 接口实现 (Realization) | 类实现接口的行为契约 | 实现多态原则 | ClassA ..\|> InterfaceB (空心三角虚线) |
| 泛化 (Generalization) | 类继承父类 | 封装继承,子承父业 | ClassA --\|> ParentClassB (空心三角实线) |
5.3 场景例图:外卖配送平台类结构设计
代码段
classDiagram
class Traffic {
<<interface>>
+start() void
}
class Ebike {
-brand: String
#speed: double
+start() void
+drive(driver: Driver) void
}
class Battery {
-capacity: int
}
class License {
-code: String
}
class Driver {
-id: String
+route(bike: Ebike) void
}
class DeliveryPlayer {
-onlineTime: int
}
class DeliveryPlatform {
+name: String
}
Traffic <|.. Ebike : 实现关系
Ebike *-- Battery : 1对1 组合关系
Ebike --> "0..1" License : 单向关联
Driver ..> Ebike : 依赖关系
Driver <|-- DeliveryPlayer : 泛化关系
DeliveryPlatform "1" o-- "1..*" DeliveryPlayer : 聚合关系
专题 5.6 — UML 对象图 (Object Diagram)
5.6.1 概述与定位
定义:对象图是类图在某一特定时间点的运行实例快照,展示了具体的对象实体、当前属性值以及彼此间的链(Link)。
定位:主要应用于系统设计与测试验证阶段,用于验证复杂类图结构、递归关系(如链表、树)或边界测试用例的合理性。
5.6.2 类图与对象图横向对比
| 维度 | 类图 (Class Diagram) | 对象图 (Object Diagram) |
|---|---|---|
| 时态特征 | 静态的、通用的、永久的设计蓝图 | 某一特定时刻的运行时“状态快照” |
| 命名语法 | 类名(如 Student) | 对象名 : 类名 且带下划线 |
| 属性展现 | 只展现属性类型(如 age: int) | 必须展现具体静态取值(如 age = 21) |
| 内部组成 | 拥有完整的属性栏和方法栏 | 无方法栏,仅有属性快照栏 |
| 连线关系 | 关联、聚合、组合(带多重度) | 链 (Link)(无箭头实线,无多重度) |
5.6.3 场景例图:双向链表运行期内存快照
代码段
classDiagram
class node1_LinkNode {
<u>node1 : LinkNode</u>
data = "Head"
index = 1
}
class node2_LinkNode {
<u>node2 : LinkNode</u>
data = "ElementA"
index = 2
}
node1_LinkNode -- node2_LinkNode : link
专题 5.7 — UML 包图 (Package Diagram)
5.7.1 概述与定位
定义:包图是通过“包(Package)”容器元素对系统复杂的类、用例等逻辑组件进行高层分层分组、高维模块化管理的静态结构图。
定位:应用于架构设计阶段,用于规划大型软件的宏观解耦分层(如三层架构、MVC 模型),控制元素可见性及团队边界开发划分。
5.7.2 包图依赖关系对照表
| 依赖构型 | 语义解释 | 传递性与作用域范围 |
|---|---|---|
<<use>> | 通用调用关系 | 客户包内的元素调用或实例化了提供者包内的类。 |
<<import>> | 公共导入 | 将目标包的公有元素并入自身包,且该可见性可向其上层继续传递。 |
<<access>> | 私有导入 | 引入目标包元素,但引入后的元素在自身包内降格为私有,不可向外传递。 |
5.7.3 场景例图:典型三层架构分层包依赖关系
代码段
graph TB
subgraph Controller_Package [Controller]
direction TB
end
subgraph Service_Package [Service]
direction TB
end
subgraph DAO_Package [DAO]
direction TB
end
subgraph DB_Package [Database]
MySQLImpl[MySQLImpl]
end
Controller_Package -. "<<use>>" .-> Service_Package
Service_Package -. "<<import>>" .-> DAO_Package
DAO_Package --- DB_Package
专题 6 — UML 活动图 (Activity Diagram)
6.1 概述与定位
定义:活动图是专注于建模一个业务流程、用例事件流或底层复杂算法逻辑中控制流与对象流转的动态行为图。
定位:在分析阶段用于描绘跨角色多部门的业务泳道图;设计阶段用于刻画精细算法流。是传统软件“流程图”在面向对象领域的增强替代版。
6.2 核心控制元素表
| 元素名称 | 标准图形 | 核心规则约束 |
|---|---|---|
| 动作节点 (Action) | 圆角矩形 | 表示原子级不可再分的单步操作,使用动宾短语命名。 |
| 判定与合并 (Decision) | 空心菱形 | 判定为单入多出,每条出线必须有带方括号的 [守卫条件];合并为多入单出。 |
| 分叉与汇合 (Fork/Join) | 粗黑长实线条 | 分叉(Fork)将单流拆分为多线程并发流;汇合(Join)充当所有并发流的同步屏障。 |
| 对象节点 (Object Node) | 标准矩形 | 代表控制流中产生或消费的数据对象/数据状态(带对象流虚线箭头)。 |
6.3 场景例图:电商系统后台订单并发处理与风控流转
代码段
graph TD
%% 统一使用标准流程图节点模拟,避免复杂语法的渲染异常
startNode((开始)) --> A(提交订单)
%% 并发分叉
A --> forkBar{=== FORK 并发分叉 ===}
forkBar --> B(扣减商品库存)
forkBar --> C(生成流水账单)
%% 并发汇合
B --> joinBar{=== JOIN 并发汇合 ===}
C --> joinBar
%% 风控判定
joinBar --> decision{风控安全判定}
decision -->|风控通过| D(发起在线支付)
decision -->|触发洗钱嫌疑| E(挂起订单审计)
decision -->|黑名单拦截| F(流终止)
D --> endNode((结束))
E --> endNode
F --> termNode((X))
专题 7 — UML 时序图 (Sequence Diagram)
7.1 概述与定位
定义:时序图(序列图)是捕获一组业务对象在时间递进维度上进行高频消息通信、方法调用、生命线存续的动态交互图。
定位:用于系统详细设计阶段。它是实现用例核心逻辑(Use Case Realization)最强有力的技术工具,是微服务接口设计的直接蓝图。
7.2 核心消息与组合片段规范
| 消息与片段类型 | 视觉线条规范 | 运行期阻塞行为及语义 |
|---|---|---|
| 同步消息 | 实线 + 实心三角箭头 | 调用方处于阻塞状态,必须等待承接方方法执行完毕返回。 |
| 异步消息 | 实线 + 开口普通箭头 | 调用方不等待返回,发出信号后直接继续执行自身后续逻辑。 |
| 返回消息 | 虚线 + 开口普通箭头 | 从承接方的方法栈中,将执行结果/返回值输送回调用方。 |
alt 片段 | 框体 + 水平虚线分隔 | 多重条件分支(等价于 if-else),根据守卫条件选择其一。 |
opt 片段 | 单个独立控制框体 | 单向可选分支(等价于单 if),满足条件则执行,不满足跳过。 |
loop 片段 | 单个独立控制框体 | 循环片段,在框体边缘标注循环的边界条件与终止阈值。 |
7.3 场景例图:用户下单及库存同步校验交互
代码段
sequenceDiagram
autonumber
actor User as :User
participant OC as :OrderController
participant SS as :StockService
participant OE as :OrderEntity
User->>OC: submitOrder()
activate OC
OC->>SS: checkStock()
activate SS
SS-->>OC: return true
deactivate SS
alt 库存充足
OC->>+OE: <<create>>
OE->>OE: doSave()
OE-->>-OC: success
else 库存不足
OC-->>User: throw StockException
end
OC-->>User: HTTP 200 (OK)
deactivate OC
专题 7.6 — UML 通信图 (Communication Diagram)
7.6.1 概述与定位
定义:通信图(早期称协作图)与时序图语义完全等价且可无损互转,但它不依赖时间轴,而是以空间网络拓扑布局凸显对象间链接和消息调用关系。
定位:当架构师需要在一个页面中总览系统类对象的调用拓扑关系(即显式看清“谁和谁存在直接通信连线”)时,提供比时序图更紧凑的架构概览。
7.6.2 时序图与通信图的横向对立性
| 维度特征 | 时序图 (Sequence Diagram) | 通信图 (Communication Diagram) |
|---|---|---|
| 核心一维横轴 | 时间轴(自上而下递进演进) | 空间轴(纯粹的对象空间拓扑网络布局) |
| 对象关系表现 | 隐含(仅通过交互消息箭头横跨体现) | 显式绘制链接线(凸显结构依赖) |
| 消息顺序读取 | 物理位置高低决定先后,一目了然 | 必须通过严格的嵌套小数值序号(如 1.1.1)进行阅读 |
7.6.3 场景例图:订单控制器与服务组件的空间拓扑协作
代码段
graph LR
%% 使用双引号包裹带方括号的复杂文本,彻底修复了解析报错问题
OC[<u>:OrderController</u>] -->|"1: checkStock()"| SS[<u>:StockService</u>]
OC -->|"1.1 [库存足]: create"| OE[<u>:OrderEntity</u>]
OC -->|"2: asyncNotify()"| NQ[<u>:NotifyQueue</u>]
专题 7.7 — UML 定时图 (Timing Diagram)
7.7.1 概述与定位
定义:定时图将“物理时间轴”作为绝对的核心一维横轴,专门用于精确、定量地描述对象状态随时间轴流逝所产生的变迁,以及状态持续周期的硬性时间约束图。
定位:主要应用于嵌入式开发、物联网硬件协议设计、工业控制系统及高并发网络协议的硬实时(Real-time)建模。
7.7.2 场景例图:工业加热清洗装置状态变迁与时序硬约束
代码段
gantt
title 硬件抽吸与加热板定时状态变迁图 (单位: 秒)
dateFormat X
axisFormat %s
section 抽吸装置状态
关状态 :active, 0, 10
开状态 :crit, 10, 35
关状态 : 35, 50
section 加热板状态
关状态 : 0, 20
开状态 :active, 20, 50
专题 7.8 — UML 交互纵览图 (Interaction Overview Diagram)
7.8.1 概述与定位
定义:交互纵览图是高级行为编排模型,它将活动图的控制流网格框架与时序图(或其他交互图)无缝融合,用控制节点编排大流程,而每个动作节点直接内嵌一张微型时序图。
定位:用于系统高级架构设计与宏观逻辑推演。当一个复杂业务流包含多个独立的大子场景切换时,用它进行整体工作流的高维可视化架构串联。
7.8.2 场景例图:多数据源(API/缓存)动态路由选择的高维编排
代码段
graph TD
start(( )) --> decision{判定数据源}
decision -->|外部API| SD1[时序图: sd 抓取外部数据]
decision -->|本地缓存| SD2[时序图: sd 读取本地数据库]
SD1 --> merge{ }
SD2 --> merge
merge --> Action[动作节点: 生成综合数据报表]
Action --> stop((( )))
专题 8 — UML 状态图 (State Machine Diagram)
8.1 概述与定位
定义:状态图专注于刻画和捕捉单个核心对象(如订单、账户、线程)在其完整生命周期内,由外部输入事件触发而引起的状态无缝流转与响应行为。
定位:应用于系统详细设计与核心业务对象建模阶段(如电商订单、TCP 状态机)。其核心指标是穷尽对象生存周期内的所有合法与异常状态路径,防止死锁或孤立状态发生。
8.2 标准状态转换语法规范
\[\text{标准语法格式:} \quad \text{事件触发器} \ [ \text{守卫条件} ] \ / \ \text{执行动作}\]| 转换核心三要素 | 具体工程语义 | 运行时行为特征 |
|---|---|---|
| 事件触发器 (Event) | 引起状态转移的信号或外部激发 | 一旦对象接收到该信号(如点击支付、超时),转移被激活。 |
| 守卫条件 (Guard) | 布尔表达式 [ 条件 ] | 只有当表达式为真时,状态转移才能发生;否则事件被丢弃。 |
| 执行动作 (Action) | 状态变迁伴随产生的原子行为 /动作 | 状态转移成功的一瞬间,系统顺带执行的操作(如发通知、记日志)。 |
8.3 场景例图:电商平台订单生命周期状态流转
代码段
stateDiagram-v2
[*] --> 订单处理中 : submit() 提交订单
state 订单处理中 {
[*] --> 待支付
待支付 --> 已支付 : pay() [余额充足] / 扣款
待支付 --> 已取消 : cancel() [用户主动]
已支付 --> 已发货 : ship() / 分配物流
}
订单处理中 --> 已完结 : sign() / 用户签收
已完结 --> [*]
专题 9.1 — UML 构件图 (Component Diagram)
9.1.1 概述与定位
定义:构件图是一种静态结构图,用于描述系统中物理构件的组织、构件对外提供的与所需要的接口,以及构件之间的连接依赖关系。
定位:主要应用于软件架构设计与组件化开发阶段。构件图将实现细节封装在内部,对外通过显式接口体现契约,强调系统由哪些“可替换的软件模块单元”构成。
9.1.2 核心元素与关系规范
| 核心元素/关系 | 标准图形语义 | 核心规则与工程实践 |
|---|---|---|
| 构件 (Component) | 带有小构件图标或 «component» 的矩形 | 物理上可独立替换、独立部署的软件单元(如一个 JAR 包、DLL 文件或独立微服务)。 |
| 提供接口 (Provided Interface) | 棒棒糖形状 (Lollipop / 实心圆 + 实线) | 构件对外暴露的、可供其他构件调用的服务或 API 契约。 |
| 需求接口 (Required Interface) | 插座形状 (Socket / 半圆弧 + 实线) | 构件内部实现逻辑中所必须依赖或调用的外部第三方服务契约。 |
| 组装连接器 (Dependency) | 棒棒糖插入插座的无缝对接,或虚线箭头 | 表示一个构件的“需求接口”与另一个构件的“提供接口”相互匹配并建立连接。 |
| 端口 (Port) | 构件边界线上的小方块 | 封装构件对外的通信访问点,用于对接口进行分流或隔离外部请求。 |
9.1.3 场景例图:典型电商订票系统的组件契约与接口装配
代码段
graph LR
%% 构件定义与多级依赖装配
subgraph TicketSystem [订票业务子系统]
Order[«component»<br>OrderComponent]
Ticket[«component»<br>TicketComponent]
end
Payment[«component»<br>PaymentGateway]
DB[«component»<br>DatabaseComponent]
%% 接口对接关系化表现 (使用引号包裹特殊符号防止解析冲突)
Order -->|"需求: ITicket"| Ticket
Order -->|"需求: IPayment"| Payment
Ticket -->|"依赖"| DB
style Order fill:#f9f,stroke:#333,stroke-width:2px
style Ticket fill:#bbf,stroke:#333,stroke-width:2px
style Payment fill:#fbb,stroke:#333,stroke-width:2px
style DB fill:#bfb,stroke:#333,stroke-width:2px
专题 9.2 — UML 部署图 (Deployment Diagram)
9.2.1 概述与定位
定义:部署图是整个 UML 规范中唯一描述软硬件物理拓扑映射关系的静态视图,展示运行软件制品(Artifacts)的物理节点(Nodes)以及各物理节点之间的网络通信连接。
定位:应用于系统运维规划与物理架构设计阶段。它不仅是软件系统上云部署的拓扑蓝图,也是系统工程师规划物理网络服务器集群、计算资源分配以及安全域边界割接的技术底座。
9.2.2 类图、构件图与部署图的三维横向对比
| 维度特征 | 类图 (Class Diagram) | 构件图 (Component Diagram) | 部署图 (Deployment Diagram) |
|---|---|---|---|
| 核心描述对象 | 逻辑实体(逻辑概念与代码类) | 软件制品单元(JAR包、服务模块) | 物理或虚拟硬件环境(服务器、网络) |
| 系统生命周期 | 分析与设计阶段的静态逻辑抽象 | 实现与集成阶段的包/模块划分静态关系 | 运行与维护阶段的底层物理物理布局 |
| 核心关联关系 | 泛化、组合、聚合、关联 | 接口提供 (Lollipop) 与接口需求 (Socket) | 物理连接通道(网线、无线、HTTP协议) |
| 元素依赖特征 | 强类型的面向对象语法连接 | 强调用接口机制隐蔽具体的物理编码实现 | 强调用软件制品在物理宿主机上的承载承载 |
9.2.3 部署图的核心元素语法对照
| 核心元素类型 | 视觉标准画法 | 核心工程定义说明 |
|---|---|---|
| 节点 (Node) | 三维立体长方体箱子 | 拥有计算能力的物理硬件(如应用服务器、数据库主机、路由器)或软件宿主环境(如 Docker 容器、JVM)。 |
| 制品 (Artifact) | 带有 «artifact» 构造型的普通矩形 | 系统物理打包的成果物(如 order-service.jar、index.html),必须部署存活于某个节点内部。 |
| 连接 (Connection) | 连接立体箱子之间的无箭头实线 | 物理节点的网络通路,线上通常标注通信协议类型(如 TCP/IP、HTTPS、JDBC)。 |
9.2.4 场景例图:企业级分布式Web系统的云物理拓扑部署方案
代码段
graph TB
%% 使用网格与容器模拟三维节点及其内部制品托管关系
subgraph ClientNode [物理客户端节点: 移动端/浏览器]
Browser[«artifact»<br>SPA_App.html]
end
subgraph WebServerNode [应用服务器集群: Nginx/Tomcat]
direction TB
AppJar[«artifact»<br>api-gateway.jar]
WIP{"WIP限制: 并发连接 <= 10000"}
end
subgraph DBServerNode [数据库服务器: 主从MySQL集群]
MySQL_DB[(«artifact»<br>Relational_DB)]
end
%% 物理连接与网络通信协议标注
ClientNode ===|"HTTPS / 443"| WebServerNode
WebServerNode ===|"JDBC / 3306"| DBServerNode
style ClientNode fill:#eee,stroke:#333,stroke-width:1px
style WebServerNode fill:#ddd,stroke:#333,stroke-width:2px
style DBServerNode fill:#ccc,stroke:#333,stroke-width:2px
原文链接:https://dimo.qwq6.xyz/2026/06/18/UML%E5%90%88%E9%9B%86/