🎯 第一步:快速识别图表类型 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. 前端返回用户
🎯 实战练习:看图回答
- 这个流程有几个参与者?(答案: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
VS Code插件
PlantUML 插件 - 实时预览.puml文件
💡 给新人的建议
不需要学会写这些图,能看懂就够了。遇到不认识的符号,用这个指南快速查阅即可。