vault backup: 2026-06-11 00:02:06
This commit is contained in:
@@ -77,6 +77,168 @@
|
||||
| **阻止消息** | 接收者不能立即接收就放弃 | 特殊标记 |
|
||||
| **超时消息** | 等待指定时间,超时就放弃 | 特殊标记 |
|
||||
|
||||
### 📌 消息类型的画法速查
|
||||
|
||||
> 这一节把六种消息类型的**实际画法**用字符画的形式画出来,光看箭头符号记不住的话,照着画就行。
|
||||
|
||||
#### ① 调用消息(同步)—— 实线 + 实心三角箭头
|
||||
|
||||
```
|
||||
┌───┐ ┌───┐
|
||||
│ A │ ──────────────────▶│ B │ ← 实线 + 实心三角
|
||||
└───┘ └───┘
|
||||
同步:等B做完再回来
|
||||
```
|
||||
|
||||
#### ② 异步消息 —— 实线 + 开放箭头(V形)
|
||||
|
||||
```
|
||||
┌───┐ ┌───┐
|
||||
│ A │ ─────────────────⇨ │ B │ ← 实线 + 开放箭头
|
||||
└───┘ └───┘
|
||||
异步:发完就接着干自己的事
|
||||
```
|
||||
|
||||
#### ③ 返回消息 —— 虚线 + 开放箭头
|
||||
|
||||
```
|
||||
┌───┐ ┌───┐
|
||||
│ A │ ◀─ ─ ─ ─ ─ ─ ─ ─ ─ │ B │ ← 虚线 + 开放箭头
|
||||
└───┘ └───┘
|
||||
返回值(可省略不画)
|
||||
```
|
||||
|
||||
#### ④ 反身消息 —— 自己绕回来
|
||||
|
||||
```
|
||||
┌───┐
|
||||
│ A │ ───┐
|
||||
└───┘ │
|
||||
│ │
|
||||
◀─────┘
|
||||
|
||||
(即"对象调用自己的方法")
|
||||
```
|
||||
|
||||
#### ⑤ 阻止消息 —— 实线 + 叉 ✕
|
||||
|
||||
> 接收方当时忙,**直接放弃**这次调用。
|
||||
|
||||
```
|
||||
┌───┐ ┌───┐
|
||||
│ A │ ─────────────────╳ │ B │ ← 实线 + 叉
|
||||
└───┘ └───┘
|
||||
B没空,A立刻放弃不等
|
||||
```
|
||||
|
||||
#### ⑥ 超时消息 —— 实线 + 倒三角 ⏳
|
||||
|
||||
> 等待指定时间,**超时就放弃**。
|
||||
|
||||
```
|
||||
┌───┐ ┌───┐
|
||||
│ A │ ─────────────────⏳ │ B │ ← 实线 + 倒三角
|
||||
└───┘ └───┘
|
||||
等一段时间后超时
|
||||
```
|
||||
|
||||
### 📌 完整顺序图示例
|
||||
|
||||
把所有消息类型都画在一张图里看效果:
|
||||
|
||||
```
|
||||
客户 ATM界面 账户
|
||||
┌───┐ ┌───┐ ┌───┐
|
||||
│ │ │ │ │ │
|
||||
╱│╲ │ ╱│╲ │ ╱│╲ │
|
||||
╱ ╲ │ ╱ ╲ │ ╱ ╲ │
|
||||
┌───┐ ┌───┐ ┌───┐
|
||||
│ │ │ │ │ │
|
||||
│ │ 1: 取款(500) │ │ │ │ ← ① 调用消息
|
||||
│ ├──────────────▶│ │ │ │
|
||||
│ │ │ │ 2: 查询余额() │ │ ← ① 调用消息
|
||||
│ │ │ ├───────────────▶│ │
|
||||
│ │ │ │ │ │
|
||||
│ │ │ │ ◀─ 3: 余额 ─── │ │ ← ③ 返回消息
|
||||
│ │ │ │ │ │
|
||||
│ │ │ │ 4: 扣款(500) │ │ ← ① 调用消息
|
||||
│ │ │ ├───────────────▶│ │
|
||||
│ │ │ │ │ │
|
||||
│ │ 5: 出钞 │ │ │ │ ← ② 异步消息
|
||||
│ │◀─ ─ ─ ─ ─ ─ ─│ │ │ │
|
||||
│ │ │ │ │ │
|
||||
```
|
||||
|
||||
### 📌 组合片段(Combined Fragment)速查
|
||||
|
||||
> 当顺序图比较复杂时,可以用**框选区域**的方式来表达条件、循环、并行等逻辑。
|
||||
|
||||
```
|
||||
┌────────────── alt: 余额判断 ──────────────┐
|
||||
│ │
|
||||
│ │ 条件A: │
|
||||
│ │ 4.1: 扣款(amount) ──▶ │
|
||||
│ │ │
|
||||
├────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ │ 条件B: │
|
||||
│ │ 4.2: 显示"余额不足" ──▶ │
|
||||
│ │
|
||||
└────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
常用组合片段关键字:
|
||||
|
||||
| 关键字 | 含义 | 用途 |
|
||||
|--------|------|------|
|
||||
| `alt` | 抉择(多选一) | 相当于 if-else |
|
||||
| `opt` | 可选(满足才执行) | 相当于单分支 if |
|
||||
| `loop` | 循环 | 相当于 for/while |
|
||||
| `par` | 并行 | 多个事件流同时进行 |
|
||||
| `neg` | 非法 | 描述不允许发生的场景 |
|
||||
| `critical` | 关键 | 必须原子执行的区域 |
|
||||
|
||||
---
|
||||
|
||||
### 📌 协作图(Communication Diagram)的画法
|
||||
|
||||
> 协作图 = 顺序图的"空间版"——**没有生命线**,但消息必须**带完整序号**。
|
||||
|
||||
```
|
||||
1: 输入金额
|
||||
客户 ──────────────▶ ATM界面
|
||||
○ │
|
||||
╱│╲ │ 2: 查询余额
|
||||
╱ ╲ ▼
|
||||
账户
|
||||
╱│╲
|
||||
╱ ╲
|
||||
▲
|
||||
│ 3: 返回余额
|
||||
◀───── 4.1*: 出钞 ─────┘
|
||||
(出钞多次循环)
|
||||
```
|
||||
|
||||
**协作图的关键特征**:
|
||||
|
||||
- 对象之间的**连线**(关联)作为消息传递的路径
|
||||
- 消息的**前缀序号**必须完整(`1`, `1.1`, `1.1.1`)
|
||||
- `{new}` 标签表示对象在交互中被创建
|
||||
- `{destroy}` 标签表示对象在交互中被销毁
|
||||
|
||||
```
|
||||
┌──────────┐ ┌──────────┐
|
||||
│ :Order │ │ :Payment │
|
||||
│{new} │ 1: 创建支付 │ │
|
||||
└──────────┘ ────────────────▶ └──────────┘
|
||||
│
|
||||
│ {destroy}
|
||||
▼
|
||||
(被销毁)
|
||||
```
|
||||
|
||||
🔑 **一句话记忆口诀**:实心三角是同步,开放箭头是异步;返回用虚线开放箭头,反身消息自己绕;alt/loop/par 框选区域,条件循环并行都能搞。
|
||||
|
||||
---
|
||||
|
||||
## 🔑 调用消息 vs 异步消息(必考!)
|
||||
@@ -195,9 +357,9 @@
|
||||
## 📝 章末自测
|
||||
|
||||
**1. 填空题**
|
||||
- 顺序图的四个核心元素是:( ___ )( ___ )、( ___ )( ___ )、( ___ )( ___ )、( ___ )( ___ )
|
||||
- 发送后等待返回的消息叫( ___ )( ___ )消息,发送后继续执行的消息叫( ___ )( ___ )消息
|
||||
- 顺序图强调( ___ )( ___ )顺序,协作图强调( ___ )( ___ )关系
|
||||
- 顺序图的四个核心元素是:( ____ )、( ____ )、( ____ )、( ___ _ )
|
||||
- 发送后等待返回的消息叫( ____ )消息,发送后继续执行的消息叫( ____ )消息
|
||||
- 顺序图强调( _____ )顺序,协作图强调( ____ )关系
|
||||
|
||||
**2. 判断题**
|
||||
- ( ) 调用消息的返回消息必须画出来
|
||||
|
||||
Reference in New Issue
Block a user