九种常见UML图

image

类图(Class Diagram)

> 统一建模语言(UML)中最基础、最常用的结构建模图,用于描述系统的静态结构


1. 核心定义

类图通过展示
类 | 接口 | 属性 | 操作 | 关系
来刻画面向对象系统的静态结构,是

  • 可视化工具
  • 设计蓝图
  • 代码生成的直接依据
  • 文档与沟通标准

2. 组成元素

元素 语法片段 说明
ClassName 封装属性+操作的对象模板
接口 <<interface>> InterfaceName 仅定义操作规范,无实现
属性 - name : Type [multiplicity] 对象状态
操作 + method(p : T) : R 对象行为
关系 见下表 类与类之间的语义连接

3. 关系类型速查

关系 箭头/线 语义 示例
关联 A ── B 长期知道/使用 学生 — 课程
聚合 A ◇─ B 整体-部分(弱) 大学 ◇— 学院
组合 A ◆─ B 整体-部分(强) 房子 ◆— 房间
继承 A △─> B 一般/特殊 猫 △—> 动物
实现 A △-- B 类实现接口 Service △-- Runnable
依赖 A ···> B 临时使用 参数、局部变量

4. 可见性符号

符号 可见性 语言关键字
+ public public
- private private
# protected protected
~ package (default)

5. 建模层次

  1. 概念层 – 业务领域实体(无技术细节)
  2. 说明层 – 系统职责与接口(分析)
  3. 实现层 – 接近代码(类型、可见性、方法签名)

6. 典型用途

  • 面向对象系统设计(OOD)
  • 数据库概念建模(可转 ER)
  • 框架 / API 设计
  • 代码逆向工程(生成图)
  • 教学、文档、评审

7. 一句话总结

> 类图是面向对象系统的 “骨架图”,定义了谁由什么组成、如何协作,是连接需求、设计与代码的桥梁。


类图图示

image

车的类图结构为<>,表示车是一个抽象类;
它有两个继承类:小汽车和自行车;它们之间的关系为实现关系,使用带空心箭头的虚线表示;
小汽车为与SUV之间也是继承关系,它们之间的关系为泛化关系,使用带空心箭头的实线表示;
小汽车与发动机之间是组合关系,使用带实心箭头的实线表示;
学生与班级之间是聚合关系,使用带空心箭头的实线表示;
学生与身份证之间为关联关系,使用一根实线表示;
学生上学需要用到自行车,与自行车是一种依赖关系,使用带箭头的虚线表示;

对象图(Object Diagram)

> UML 结构建模图之一,描述系统在某一具体时刻(快照)存活的对象及其相互关系


1. 核心定义

  • 对象图是类图的实例化(Instance Level)。
  • 展示 “此刻有哪些对象、对象的当前值、对象之间的链接”
  • 仅反映静态快照,不表达交互顺序;随系统运行而动态变化,因而生命周期有限

2. 与类图的 3 句话对比

维度 类图 对象图
抽象级别 类型层(Type) 实例层(Instance)
内容 类、接口、属性模板、操作、关系 对象、属性当前值、链接
存在时间 设计期永久有效 运行期某一时刻快照

3. 组成元素

元素 语法片段 说明
对象 objectName : ClassName:ClassName 类的实例,可匿名
属性值 attribute = value 对象在快照时刻的具体状态
链接(Link) 实线 实例级别的关联,称为 Link(类图是 Association)
槽(Slot) 属性-值对列表 存储在对象分栏内

4. 关系表示速查

关系 符号 语义 示例
链接 obj1 ── obj2 实例间引用/连接 alice ── cs101
继承实例 无特殊符号 通过对象类型隐式体现 :Cat 对象即 :Animal 的子实例
实现实例 同上 对象实现某接口 printer : Printable

5. 可见性 & 多重性

  • 无可见性符号(对象已封装,仅展示当前值)。
  • 多重性在对象图中不出现(每个对象都是单个实例)。

6. 建模层次与用途

层次 目的 场景示例
分析 验证类图是否满足业务场景 “注册课程”快照:学生 alice 链接课程 cs101
设计 演示复杂数据结构在内存中的映像 树、图、链表某一时刻布局
测试 作为单元测试期望状态的可视化 执行某方法后对象图应如右图

7. 生命周期特点

  • 只在系统运行的一段区间内有效
  • 可随调试器、日志、序列化数据捕获;
  • 常被用作运行时验证类图设计的合理性。

8. 一句话总结

> 对象图是类图的 “快照”:把抽象模板具体化,让开发者在某一真实时刻看到活生生的对象与链接,用于验证、讲解与测试。


对象图图示

image

上面的对象图代表订单管理系统,顾客在一个特定的时间下单。它具有顾客、订单、特殊订单和一般订单四个对象。现在客户对象(C)是与三个订单对象(O1,O2和O3)。这些订单对象相关联的特殊订单和一般订单对象(S1,S2和N1)。顾客具有以下三个具有不同数目的订单(12,32和40),用于所考虑的特定的时间。

UML 组件图(Component Diagram)

> 又称构件图,描述软件系统物理的、可替换的、可部署的模块(组件)及其接口、依赖、组装关系,提供高层次架构视图实现路标


1. 核心定义

组件图展示运行时物理模块(如 DLL、JAR、EXE、微服务镜像)如何

  • 实现和使用接口
  • 通过端口与连接器组装
  • 支持增量式开发、独立部署与热替换

2. 组成元素速查

元素 表示法 说明
组件(Component) &lt;&lt;component&gt;&gt; 矩形或「组件」图标 物理可替换模块,封装实现
接口(Interface) 圆圈(供给)或半圆(需求) 组件对外/对内契约
端口(Port) 小正方形置于边界 组件的交互点,可命名
连接器(Connector) 实线/装配链/委托链 端口-端口、组件-接口之间的运行时连接
关系(Relationship) 依赖、装配、委托 见下表

3. 关系类型

关系 符号 语义 示例
装配(Assembly) ●──○ 需求接口连接到供给接口 OrderService ●──○ PaymentAPI
委托(Delegation) 实线+<<delegate>> 把外部调用转发到内部组件 容器组件委托到子模块
依赖(Dependency) 虚线箭头 编译/运行时依赖 WebApp ···&gt; Logging.jar

4. 层级化视图

  1. 黑盒 – 仅显示组件名与接口(对外可见)
  2. 灰盒 – 暴露端口与关键接口(架构评审)
  3. 白盒 – 展开内部子组件与连线(详细设计)

5. 典型用途

阶段 用途
架构设计 划分可执行/可部署单元,定义对外契约
任务分配 按组件切分团队/模块,明确依赖与接口责任人
构建脚本 指导 Maven/Gradle 模块、Docker 镜像划分
部署规划 映射到节点、容器、微服务拓扑
遗留系统 反向工程得到现有 JAR/DLL 依赖图

6. 与其他图的区别

关注点
类图 静态类型结构(类、继承、关联)
组件图 物理模块划分与接口组装
部署图 节点/硬件上的实际部署位置

7. 一句话总结

> 组件图是 “物理拼装说明书”:它告诉开发者系统由哪些可替换的二进制构件构成,它们通过何种接口、端口与连接器协同工作,为增量交付、独立部署提供架构路标。


组件图图示

image

在购买一件商品时,我们首先是浏览商品,了解商品详情。在商品详细页面上,我们可以看到一个“加入购物车”。可以绘制网上商城组件图,如上图所示:购物车、订单、库存、支付管理组件。

UML 部署图(Deployment Diagram)

> 描述系统运行时刻物理拓扑:有哪些节点(Node)硬件配置通信路径,以及软件制品(Artifact)如何部署到节点上。


1. 核心定义

  • 唯一的一张静态部署视图(每个系统通常只维护一份)。
  • 面向分布式、嵌入式、云原生环境,帮助架构师评估性能、容错、伸缩、安全等物理约束。
  • 运维、DevOps、自动化部署脚本的可视化输入。

2. 组成元素

元素 表示法 说明
节点(Node) &lt;&lt;device&gt;&gt; 立方体或 &lt;&lt;executionEnvironment&gt;&gt; 矩形 物理或虚拟计算资源(服务器、手机、传感器、容器、Pod)
制品(Artifact) &lt;&lt;artifact&gt;&gt; 矩形+文档图标 可部署的物理单元:JAR、DLL、Docker 镜像、AI 模型、脚本
通信路径(Communication Path) 实线 节点之间的网络连接,可标注协议与带宽
部署(Deployment) 虚线箭头 ···&gt; 或嵌套 制品“驻留”于节点
设备(Device) &lt;&lt;device&gt;&gt; 硬件实体,如 EC2 裸金属
执行环境(Execution Environment) &lt;&lt;executionEnvironment&gt;&gt; 软件容器,如 JVM、操作系统、Kubernetes

3. 关系速查

关系 符号 语义 示例
通信路径 node1 ── node2 网络/总线连接 WebServer ──{HTTPS}─ DB_Server
部署 artifact ···&gt; node 制品部署到节点 shop.jar ···&gt; WebServer
嵌套 节点内部放制品 物理包含 &lt;&lt;device&gt;&gt; RaspberryPi 内放置 firmware.bin

4. 建模层级

  1. 纯硬件层 – 服务器、交换机、边缘设备
  2. 虚拟化层 – VM、容器、Pod、Runtime
  3. 应用层 – 制品(镜像、JAR、AI 模型)映射到以上资源

5. 典型用途

场景 价值
分布式架构评审 发现单点故障、网络瓶颈、数据亲和性
云迁移 评估上云粒度与成本(裸金属→VM→容器→Serverless)
安全与合规 识别跨区/跨网段流量,满足等保/PCI-DSS
自动化运维 生成 Ansible、Terraform、Kubernetes YAML 的“蓝图”
嵌入式系统 确认固件烧录位置、CAN 总线连接

6. 与其他图的区别

关注点
组件图 软件模块的接口与组装
部署图 这些模块最终“跑在哪些硬件/虚拟节点上”以及“如何联网”

7. 一句话总结

> 部署图是 “物理地图”:它告诉运维与架构师,软件制品最终驻留在哪台节点、通过什么网络、以何种协议协同工作,为分布式系统的性能、容错与自动化部署提供唯一且权威的静态拓扑视图。


部署图图示

image

UML 用例图(Use-Case Diagram)

> 以动态行为视角展示系统边界外可见的功能单元(用例),并刻画主角(Actor) 与这些 功能之间的需求关系,是需求捕获与沟通的核心入口。


1. 核心定义

  • 描述系统 “做什么”(What),而非 “怎么做”(How)。
  • 外部观察者角度建立功能需求模型,为后续分析、测试、UI 原型提供契约。
  • 用户、客户、开发、测试四方对齐的“最小共识图”。

2. 组成元素

元素 表示法 说明
主角(Actor) 火柴人图标 与系统交互的角色:用户、外部系统、硬件、时间触发器
用例(Use Case) 椭圆 + 动宾短语 系统提供的可观测、可度量的业务功能
系统边界(System Boundary) 矩形框 + &lt;&lt;system&gt;&gt; 名称 划定研究范围,框内=当前系统,框外=Actor
关系(Relationship) 见下表 描述 Actor↔用例、用例↔用例之间的合法交互

3. 关系类型速查

关系 符号 语义 示例
关联(Association) 实线 Actor 参与用例 用户 ─ 下单
包含(Include) &lt;&lt;include&gt;&gt; 虚线箭头 公共/必 reused 行为 下单 ··> 检查库存
扩展(Extend) &lt;&lt;extend&gt;&gt; 虚线箭头 条件性、可选增强 支付 ··> 使用优惠券
泛化(Generalization) 空心三角箭头 Actor 或用例的继承 会员 △─> 用户

4. 建模粒度层次

  1. 业务用例图 – 组织级视角,描述业务价值(如“获得贷款”)。
  2. 系统用例图 – 软件级视角,描述系统功能(如“提交贷款申请”)。
  3. 子功能用例图 – 对复杂用例再分解,辅助迭代规划。

5. 典型用途

阶段 价值
需求获取 快速捕获谁需要什么功能,避免“功能蔓延”
范围界定 通过边界框明确 MVP 与二期功能
测试设计 每个用例可直接映射验收标准(Acceptance Criteria)
UI 原型 用例→任务流→界面故事板
项目估算 用例点数(UCP)作为工期/成本输入

6. 最佳实践一句话

> “用例图是用户故事的‘鸟瞰版’:一个椭圆就是一张用户故事卡片,一条实线就是一次对话入口。”


7. 常见误区提醒

误区 正确做法
把步骤当用例 用例=目标,步骤应放到活动图/用例描述文本
出现 CRUD 四个椭圆 合并为“管理××”或用活动图展开
画成菜单树 用例应体现业务价值,而非 UI 层级

8. 一句话总结

> 用例图是 “需求雷达”:让所有人一眼看清谁(Actor) 通过什么功能(用例)系统边界交互,为后续分析、设计、测试、交付提供可追溯、可验收的功能契约。


用例图图示

image

UML 序列图(Sequence Diagram)

> 又称时序图 / 顺序图,是一种行为动态图
> 专注于时间维度,通过对象之间交换消息的严格顺序来可视化单个场景或用例控制流


1. 核心定义

  • 描述一组生命线上对象某一用例/场景时间流中如何协作完成目标
  • 每条水平消息 = 一次调用或信号,对应类操作、状态机触发事件或异步信号
  • 属于动态建模,与活动图(控制流)、状态机图(对象状态)互补。

2. 组成元素

元素 表示法 说明
对象(Object) 对象名:类名 矩形 交互实体,可为实例、组件、参与者
生命线(Lifeline) 向下虚线 对象存在的时间区间
激活条(Activation Bar) 细高矩形 对象正在执行某段代码或活动
消息(Message) 水平箭头 + 文字 op(arg) 交互单元,分同步、异步、返回、创建、销毁等

3. 消息类型速查

消息 箭头 语义 示例
同步调用 实心三角 + 实线 阻塞等待返回 calculateTotal()
异步调用 开放三角 + 实线 立即继续 sendAsync()
返回 虚线 + 开放三角 显式或隐式结果 ← total:Money
创建 «create» 虚线 实例化新对象 «create» :Order
销毁 «destroy»X 生命周期结束 生命线底部打 X
自消息 箭头折回自身 内部调用 validate()
循环 / 可选 / 并行 交互框 alt/opt/loop/par 组合片段 alt[amount&gt;0]

4. 常用组合片段(Combined Fragment)

操作符 用途 示例
alt 多分支条件 alt [paid] / [unpaid]
opt 可选执行 opt [express]
loop 迭代 loop [for each item]
par 并行 par 线程1, 线程2
ref 引用其他序列图 ref :AuthSubDiagram

5. 建模步骤(最佳实践)

  1. 一个用例一个场景(如“下单”主成功路径)。
  2. 确定左侧启动者(Actor/边界对象)。
  3. 时间顺序从左→右、上→下依次放置关键对象
  4. 画出消息链,确保返回消息可省略以降噪。
  5. 分支/循环使用组合片段,避免“瀑布”式长图。
  6. 类图对照:每条消息应能在目标类中找到对应操作

6. 典型用途

阶段 价值
需求分析 把用例文本转为可视化故事板,验证场景完整性
设计 精化类 public 方法签名,发现遗漏操作
测试 直接生成单元/集成测试用例(Given-When-Then)
文档 API、协议、时序敏感算法提供精确描述
调试 与日志时间戳对齐,快速定位调用链故障点

7. 与其他交互图对比

关注点
序列图 时间顺序(突出调用链)
通信图(协作图) 对象结构(突出连接拓扑)
时序图(Timing Diagram) 绝对时间/状态变化(实时系统)

8. 一句话总结

> 序列图是 “交互电影胶片”:把对象当演员,消息当台词,按时间轴放映一次完整协作,让调用顺序、并发、分支、返回一目了然,为理解、设计、测试、调试提供精确动态脚本。


序列图图示

image

UML 协作图(Communication Diagram)

> 又名通信图,是交互图的一种,与序列图语义等价但视角不同:
> 突出对象间的空间结构(链接拓扑),弱化严格时间顺序,通过编号表达消息次序。


1. 核心定义

  • 描述一组对象某一用例/场景中如何通过现有链接交换消息完成协作。
  • 属于动态建模,但图形式更接近类图的实例层(对象+链接)。
  • 消息序号 = 唯一时间线索,可嵌套(1.1、1.2、1.2.1)。

2. 组成元素

元素 表示法 说明
对象(Object) obj:Class 矩形 交互实例,与序列图一致
链接(Link) 实线 实例级别的关联,允许自反
消息(Message) 带编号箭头 1: op(arg) 沿链接传递的调用或信号

3. 消息编号规则

风格 示例 场景
顺序编号 1 → 2 → 3 简单线性流
嵌套编号 1 → 1.1 → 1.2 → 2 体现调用-返回层次
并行编号 1.1a / 1.1b 并发分支(可选扩展)

4. 与序列图快速对比

维度 序列图 协作图
焦点 时间顺序(生命线垂直) 空间拓扑(对象布局自由)
时间表达 几何位置(上→下) 数字编号
链接显式 ❌ 隐含 ✅ 显式画出,可一眼看出对象间连接
适合 复杂算法、实时协议 对象网络、设计模式、结构验证

5. 建模最佳实践

  1. 先画对象现有链接(可复用类图关联)。
  2. 启动对象开始,沿链接依次标注编号+消息
  3. 使用嵌套编号体现调用层次,避免箭头交叉过多。
  4. 循环/分支可用 *[for each] 4: doX() 简短注解。
  5. 与序列图互为视图:结构疑问→协作图;时序疑问→序列图。

6. 典型用途

阶段 价值
设计评审 验证对象间链接是否足够支持用例
模式文档 展示 GoF 设计模式(如 Observer、Chain of Responsibility)的运行时对象网
逆向工程 从代码快速生成对象+调用链拓扑
教学沟通 让初学者一眼看清“谁连谁、谁调谁”

7. 一句话总结

> 协作图 = “带消息编号的对象拓扑图”:用空间视角揭示对象如何通过现有链接协作完成场景,为结构验证、模式说明、代码走查提供清晰直观的动态蓝图。

示例:
keyPress(key) [key==ESC] / beep() ^ selfDestruct()


协作图图示

image

UML 活动图(Activity Diagram)

> UML 动态行为图之一,以“控制流+数据流”为核心,描述从活动到活动流程、分支、并发与约束
> 是状态图的流化特化,强调动作序列而非状态停留,广泛用于业务过程、用例实现、工作流、算法建模


1. 核心定义

  • 展示满足用例/业务目标所需各项活动及其执行顺序、条件分支、并行分叉、同步合并
  • 嵌套调用其他活动(可重用子流程),也可引用对象节点表达数据流动
  • 天然支持并行识别资源瓶颈分析,是流程再造、自动化编排、程序实现的直接输入。

2. 主要元素速查

元素 表示法 说明
初始节点(Initial Node) ● 实心圆 流程唯一入口
活动(Activity) 圆角矩形 动词+宾语 原子或分解的可执行单元
动作(Action) 最小圆角矩形 不可再分的单步任务
控制流(Control Flow) 实线箭头 执行顺序
对象流(Object Flow) 虚线箭头 数据/对象在动作间传递
决策/合并(Decision/Merge) 菱形 条件分支或多进单出
分叉/汇合(Fork/Join) 粗黑条 并发分叉与同步汇合
泳道(Swimlane) 矩形分区 角色、部门、组件划分职责
终止节点(Activity Final) ⊙ 牛眼 流程结束
发送/接收信号(Send/Receive Signal) 五边形 事件驱动或异步交互
可中断活动区(Interruptible Region) 虚线框 允许外部事件中断流程
扩展区(Expansion Region) 虚线框+关键字 对集合元素批量处理

3. 控制节点与并发

场景 节点组合 价值
条件路由 Decision → [guard] → 分支 → Merge 支持if-else/switch
并行处理 Fork → 多分支 → Join 识别可并行任务,优化吞吐量
循环 Merge → 决策 → [继续] → 活动 → Merge 显式while/for

4. 建模步骤(最佳实践)

  1. 一条用例路径业务流程(如“客户下单”)。
  2. 找出起点→主要活动→终点,列出业务动作动词
  3. 泳道划分责任人/系统组件,暴露跨部门等待点
  4. 并行任务使用 Fork/Join,对异常/超时使用可中断区
  5. 标注对象节点(订单、发票),验证数据一致性
  6. 序列图互补:活动图=流程全景,序列图=对象交互细节

5. 典型用途

阶段 价值
业务分析 现状(As-Is) vs 未来(To-Be)流程可视化,发现冗余、等待、瓶颈
用例实现 用例描述转为可实现的活动流,指导类/服务/微服务划分
工作流引擎 直接导出 BPMN / WF XML 可执行模型
并发设计 识别可并行路径,指导多线程、消息队列、事件驱动实现
算法教学 替代传统流程图,支持对象流+并发

6. 与其他图对比

关注点
状态图 状态中心(对象在某一状态停留)
序列图 时间中心(对象间消息顺序)
活动图 流程中心(动作序列、并发、数据流)

7. 一句话总结

> 活动图是 “可并发的流程图++”:用活动节点+控制/数据流+分叉汇合+泳道,让业务、用例、算法、工作流执行顺序、并行性、数据传递一目了然,为优化、自动化、编码提供可直接落地的流程蓝图


活动图图示

image

UML 状态图(State Machine Diagram)

> 专用于描述单个对象(或子系统)在生命周期内事件、条件、动作转换状态动态行为模型
> 是 UML 对 Harel 状态机 的实现,可直接生成代码、用于嵌入式、UI、后端状态管理等场景。


1. 核心定义

  • 刻画“对象在什么状态下”“收到什么事件”“满足什么条件”后“执行什么动作”并“进入下一状态”。
  • 5 大核心元素构成:状态、转换、事件、活动、动作。
  • 与活动图互补:状态图以状态为中心,活动图以流程为中心

2. 五要素详解

要素 说明 示例
状态(State) 对象满足某条件、等待某事件、执行某活动有限时间段 IdleConnectedPrinting
转换(Transition) 源状态 → 目标状态的有向关系,附事件[条件]/动作 connect() [signal OK] / initialize()
事件(Event) 时间/空间上对状态机有意义的** occurrence** 信号、调用、时间到、异常、对象创建/销毁
活动(Activity) 非原子、可中断持续行为do/ do / 加热到60℃
动作(Action) 原子、不可中断瞬时计算或副作用 entry / startMotorexit / logEvent

3. 常用元素速览

元素 表示法 说明
初态(Initial) ● 实心圆 唯一默认入口
终态(Final) ⊙ 牛眼 生命周期结束
简单状态 圆角矩形 + 名称 无子结构
复合状态 嵌套状态图 支持层次化
并发区(Region) 虚线分栏 同一级别并行状态
浅/深历史 H / H* 记忆上次离开的子状态
转换字符串 事件(参数)[条件]/动作 例:doorClosed[timeout]/buzz()
内部转换 状态内箭头 不离开当前状态:inc()/counter++

4. 转换标签完整语法

事件(参数) [守卫条件] / 效果动作 ^ 发送事件

示例:
keyPress(key) [key==ESC] / beep() ^ selfDestruct()


5. 建模步骤(最佳实践)

  1. 列出对象所有稳定状态(名词)。
  2. 找出触发状态变化的事件(动词/信号)。
  3. 补充守卫条件动作/活动
  4. 复杂状态拆分子状态或并发区,避免“平面大饼”。
  5. 类图对照:每个状态通常对应一组属性值;与序列图对照:事件来源自外部消息。

6. 典型用途

阶段 价值
需求分析 揭示对象生命周期规则异常场景(订单取消、设备故障)
设计 直接生成状态模式switch-caseSpring StateMachine 代码
嵌入式 描述固件状态机,保证实时性与可预测性
前端/移动端 管理UI 状态流(加载、空数据、错误、刷新)
测试 一条转换路径 = 一个测试用例,可自动生成状态切换表

7. 与其他图对比

关注点
活动图 流程/算法步骤(无明确状态停留)
序列图 对象间消息顺序(不突出状态)
状态图 单个对象状态变迁(以状态为中心)

8. 一句话总结

状态图是“对象生命周期的故事板”:用状态=幕事件=情节转折动作=台词,让任何外部或内部刺激如何改变对象面貌一目了然,为代码、测试、运维提供可执行、可验证、可优化的动态行为契约。


状态图图示

image

注:部分图示摘自网络,仅作为个人学习使用。

posted @ 2025-10-14 15:58  Moonbeamsc  阅读(7)  评论(0)    收藏  举报
返回顶端