📖 UML 图表阅读指南

不需要学代码,3分钟学会看懂任何架构图

💡 本指南专为阅读理解设计,不是教你写代码,而是教你快速看懂图表

🎯 第一步:快速识别图表类型 Identify Diagram Type

看到一张图,先判断它是什么类型,然后用对应的"阅读套路"去理解。

📋 ║ ║ ║

时序图 Sequence Diagram

竖线 + 横向箭头 = 谁调谁、按时间顺序

看到竖线就是它
🏗️ ▭━▭

类图 Class Diagram

三格矩形框 = 类名/属性/方法

看到三格框就是它
🔄 ◇→▭

流程图/活动图 Flowchart / Activity

菱形判断 + 圆角框 = 做什么、怎么做

看到菱形就是它
🗄️ ▭─<─▭

ER图 Entity-Relationship

表格框 + 鱼尾线 = 数据库表关系

看到鱼尾符号就是它
📦 [▭]→[▭]

组件图/架构图 Component / Architecture

方框 + 包 + 数据库 = 系统架构

看到package/cloud就是它
🔵 ●→◯→●

状态图 State Diagram

圆角框 + 箭头 = 状态如何变化

看到实心圆起点就是它

📋 时序图 Sequence Diagram:谁调用谁,按什么顺序

⚡ 30秒速记

  • 竖线 (Lifeline) = 参与者(人、服务、数据库)
  • 横向箭头 (Message) = 调用(从左到右 = 调用,虚线 = 返回)
  • 从上往下读 = 时间顺序(上面先发生)
  • 竖条矩形 (Activation Bar) = 激活状态(正在处理中)

📖 阅读方法

1️⃣ 看顶部,认参与者 2️⃣ 从上往下,跟箭头 3️⃣ 读箭头标签,懂含义 4️⃣ 虚线=返回,找结果

🔍 关键符号 Key Symbols

━▶ 同步调用
Synchronous Call
┄▶ 返回消息
Return Message
━▷ 异步调用
Async Call
生命线
Lifeline
激活框
Activation
alt 条件分支
Alternative
loop 循环
Loop Fragment
opt 可选
Optional
用户 前端 后端API 数据库 ──点击登录──▶ ← 1. 用户发起操作 ──POST /login ← 2. 前端调后端 ──查询用户──▶ ← 3. 后端调数据库 ◀─ ─用户数据─ ─ ← 4. 数据库返回(虚线) ◀─ ─JWT Token─ ─ ← 5. 后端返回前端 ◀─ ─登录成功─ ─ ← 6. 前端返回用户

🎯 实战练习:看图回答

  1. 这个流程有几个参与者?(答案:4个)
  2. 第一步是谁发起的?(答案:用户)
  3. 数据库返回的是什么?(答案:用户数据)
  4. 最终用户收到什么?(答案:登录成功)

🏗️ 类图 Class Diagram:代码结构的地图

⚡ 30秒速记

  • 三格框 (Class Box) = 一个类(上:类名,中:属性 Attributes,下:方法 Methods)
  • 空心三角箭头 ◁━ = 继承 Inheritance/Generalization(子类指向父类)
  • 虚线空心三角 ◁┄ = 实现接口 Realization
  • 菱形 ◇━ = 聚合 Aggregation / 组合 Composition(整体与部分)

📖 阅读方法

1️⃣ 找核心类(最多连线的) 2️⃣ 看继承关系(三角箭头) 3️⃣ 看依赖关系(普通箭头) 4️⃣ 读类的属性和方法

🔍 关系线速查 Relationship Lines

◁━━━
继承 Inheritance / Generalization "是一种"关系,如:狗 是 动物
◁┄┄┄
实现 Realization / Implementation 实现接口,如:UserServiceImpl 实现 UserService
━━━━
关联 (Association) "有一个"关系。箭头表示可导航方向,无箭头=双向
┄┄┄▶
依赖 (Dependency) 临时使用关系(参数/局部变量),箭头指向被依赖方
◇━━━
聚合 Aggregation (空心菱形) 整体与部分,部分可独立存在。如:班级 与 学生
◆━━━
组合 Composition (实心菱形) 强整体与部分,部分不能独立。如:订单 与 订单项

🏷️ 可见性符号 Visibility Modifiers

+ public
公开访问 Public
- private
私有访问 Private
# protected
受保护 Protected
~ package
包内访问 Package-private
💡 快速理解技巧
• 继承/实现:三角形指向父类/接口
• 依赖:箭头指向被依赖方(A ┄▶ B = A依赖B)
• 聚合/组合:菱形在整体端(◇━ 整体 ━ 部分)

🔄 流程图/活动图 Activity Diagram:做什么、怎么做

⚡ 30秒速记

  • 圆角框/胶囊 (Action) = 动作步骤
  • 菱形 (Decision) ◇ = 判断分支(是/否)
  • 黑色实心圆 (Initial Node) ● = 开始点
  • 双圈 (Final Node) ◎ = 结束点
  • 粗横条 (Fork/Join) ═ = 并行(同时做多件事)

📖 阅读方法

1️⃣ 找起点(实心圆) 2️⃣ 跟着箭头走 3️⃣ 菱形=选择,看条件 4️⃣ 到终点(双圈)结束

🔍 关键符号 Key Symbols

开始
Initial Node
结束
Final Node
动作
Action
判断
Decision
═══ 同步条
Fork / Join
┃泳道┃ 泳道
Swimlane
开始 ┌─────────┐ │ 用户提交 │ ← 动作步骤 └────┬────┘ ───参数有效? ← 判断分支 返回400错误 ┌─────────┐ │ 调用服务 │ └────┬────┘ ───处理成功? 返回500错误 ┌─────────┐ │返回200成功│ └────┬────┘ 结束

🗄️ ER图 Entity-Relationship Diagram:数据库表关系

⚡ 30秒速记

  • 矩形框 (Entity) = 数据库表
  • 框内列表 (Attributes) = 字段(列)
  • PK = 主键 Primary Key,FK = 外键 Foreign Key
  • 鱼尾 ─< (Crow's Foot) = 多的一方 Many,竖线 | = 1的一方 One

🔍 鱼尾符号详解 Cardinality Notation(最重要!)

符号 含义 读法 例子
||──|| 一对一(必须)One-to-One A有且只有1个B 用户─身份证
||──o| 一对一(可选)One-to-Zero-or-One A有0或1个B 用户─头像
||──o{ 一对多(可选)One-to-Many A有0到多个B 用户─订单
||──|{ 一对多(至少1个)One-to-One-or-More A有1到多个B 订单─订单项
}o──o{ 多对多 Many-to-Many A可有多个B,B可有多个A 学生─课程
⚠️ 记忆口诀(Crow's Foot Notation 标准)
| = 1 / 恰好一个 (exactly one)
o = 0 / 可选 (zero/optional)
{ = 多 / many(鱼尾分叉)
┌─────────────┐ ┌─────────────┐ │ t_user │ │ t_order │ ├─────────────┤ ├─────────────┤ │ * id (PK) │ │ * id (PK) │ │ * username │ o{│ * user_id(FK)│ │ email │─拥有─o{│ * total │ ← 1个用户有0..N个订单 │ phone │ │ status │ └─────────────┘ └─────────────┘ 阅读方法:从用户到订单,"||" 表示用户那边是1,"o{" 表示订单那边是0到多 所以这是:一个用户可以有0个或多个订单

📦 组件图/架构图 Component Diagram:系统怎么搭建

⚡ 30秒速记

  • [方框] (Component) = 组件/服务
  • package/frame (Package) = 分组边界
  • database圆柱 (Database) = 数据库
  • cloud云朵 (Cloud) = 外部系统/云服务
  • 箭头 (Arrow) = 调用/数据流向

📖 阅读方法

1️⃣ 看边界(package) 2️⃣ 识别入口(用户/外部) 3️⃣ 跟着箭头看数据流 4️⃣ 关注存储(数据库)

🔍 常见图标 Common Icons

[▭] 组件
Component
📦
Package
🗄️ 数据库
Database
☁️ 云/外部
Cloud
👤 用户/角色
Actor
接口
Interface
☁️ 互联网 ┌──────────── 前端层 ────────────┐ │ [Vue Web] [移动App] │ └───────────────┬───────────────┘ HTTP/JSON ┌──────────── 服务层 ────────────┐ │ [API网关] → [用户服务] │ │ → [题库服务] │ ← 服务之间可以互相调用 │ → [统计服务] │ └───────────────┬───────────────┘ ┌──────────── 数据层 ────────────┐ │ 🗄️MySQL 🗄️Redis │ ← 数据存储 └────────────────────────────────┘
💡 看架构图的核心问题
1. 用户从哪里进入系统?
2. 数据存在哪里?
3. 各服务之间怎么通信?

🔵 状态图 State Machine Diagram:东西会经历哪些状态

⚡ 30秒速记

  • 实心圆 (Initial State) ● = 初始状态(起点)
  • 圆角框 (State) = 一个状态
  • 箭头上的文字 (Transition/Trigger) = 触发条件(什么操作导致状态变化)
  • 双圈 (Final State) ◎ = 最终状态(终点)

📖 阅读方法

1️⃣ 找起点(●) 2️⃣ 读每个状态名 3️⃣ 看箭头=什么触发变化 4️⃣ 找终点(◎)
初始 创建订单 ┌─────────┐ │ 待支付 │──超时未付──→ 已取消 └────┬────┘ 支付成功 ┌─────────┐ │ 已支付 │──申请退款──→ 退款中 ──退款成功──→ 已退款 └────┬────┘ 发货 ┌─────────┐ │ 已发货 │ └────┬────┘ 确认收货 ┌─────────┐ │ 已完成 │──→ 结束 └─────────┘ 这是一个典型的订单状态流转图 问:订单从"已支付"可以变成哪些状态?答:已发货、退款中

📋 一页速查表 Quick Reference

图表类型 识别特征 回答什么问题 阅读起点
时序图 Sequence 竖线 + 横箭头 谁调用谁,什么顺序 顶部参与者,从上往下
类图 Class 三格矩形框 类之间什么关系 找核心类(连线最多)
流程图 Activity 菱形 + 圆角框 怎么做,有什么分支 实心圆起点
ER图 Entity-Relationship 鱼尾符号 表之间什么关系 主表(被引用最多)
架构图 Component package + database 系统怎么组成 入口(用户/外部)
状态图 State 实心圆起点 + 圆角框 状态怎么变化 初始状态(●)

🛠️ 有用的工具 Useful Tools

在线查看器 plantuml.com - 粘贴代码即可预览
VS Code插件 PlantUML 插件 - 实时预览.puml文件
官方文档 plantuml.com/zh - 中文文档
💡 给新人的建议
不需要学会写这些图,能看懂就够了。遇到不认识的符号,用这个指南快速查阅即可。