vault backup: 2026-06-11 00:02:06

This commit is contained in:
2026-06-11 00:02:06 +08:00
parent 23a3765f61
commit 4ad09b8153
9 changed files with 1658 additions and 21 deletions

View File

@@ -220,9 +220,9 @@ D. 业务需求 → 系统需求 → 用户需求
## 📝 章末自测
**1. 填空题**
- 需求的三个层次从高到低依次是:( ___ ___ )、( ___ ___ )、( ___ ___
- 优秀需求的七个特性中,"所有人读出来是同一个意思"指的是( ___ ___ )性
- 结构化分析的三个模型是功能模型DFD ___ ___ )、( ___ ___
- 需求的三个层次从高到低依次是:( ___ )、( ____ )、( ___
- 优秀需求的七个特性中,"所有人读出来是同一个意思"指的是( ___ ___ )性
- 结构化分析的三个模型是功能模型DFD ___ )、( ___
**2. 简答题**
- 简述"用户需求说明书"和"软件需求规格说明书(SRS)"的区别。

View File

@@ -205,6 +205,170 @@
> - 如果**只做交易**(买卖基金)→ 基金管理系统是**外部系统**(参与者)
> - 如果**交易+管理**(买卖+维护基金品种)→ 基金管理系统变成**系统内部功能**
![[Pasted image 20260610205411.png]]
![[Pasted image 20260610205443.png]]
---
## 📌 附录:用例图常用画图符号速查
> 本节把用例图中所有画图符号和标识用字符画的形式汇总一遍画UML图时看着照画就行。
### 1. 参与者Actor—— 两种表示法
**人形符号**(最常用):
```
客户
╱│╲
```
**矩形符号**(协作图或在空间紧张时使用):
```
┌──────────┐
│ :客户 │ ← 冒号 + 类名
└──────────┘
```
### 2. 用例Use Case—— 椭圆
```
╭──────────╮
借书 ╲
│ │
╰──────────╯
```
⚠️ **命名**:椭圆里写**动宾结构**的用例名,如"借书""还书""查询图书"。
### 3. 系统边界 —— 矩形
```
┌─────────── 图书管理系统 ───────────┐
│ │
│ ╭────────╮ │
借书 ╲ ← 用例在内部 │
│ │ │ │
│ ╲
│ ╰────────╯ │
│ │
└─────────────────────────────────────┘
读者 图书管理员
○ ○ ← 参与者在外部
╱│╲ ╱│╲
```
### 4. 参与者与用例的关联 —— 实线
```
读者 ─────────── 借书
○ (椭圆)
╱│╲
```
### 5. 包含关系 <<include>> —— 虚线箭头 + 文字标签
**方向**:基本用例 → 包含用例(箭头指向被包含的那个)。
```
╭──────────╮ ╭──────────╮
注册课程 ╲ 查询课程 ╲
│ │ <<include>> │ │
─ - - - - - ──→ ╲
╰──────────╯ (虚线 + 箭头) ╰──────────╯
(基本用例) (被包含用例)
```
### 6. 扩展关系 <<extend>> —— 虚线箭头 + 文字标签
**方向**:扩展用例 → 基本用例(箭头指向基本用例,与包含**相反**)。
```
╭──────────╮ ╭──────────╮
礼品包装 ╲ 下单 ╲
│ │ <<extend>> │ │
─ - - - - - ──→ ╲
╰──────────╯ (虚线 + 箭头) ╰──────────╯
(扩展用例) (基本用例)
```
⚠️ **易错对比**<<include>> 和 <<extend>> 箭头方向**相反**,考试常考。
### 7. 用例之间的泛化关系 —— 实线 + 空心三角形
**方向**:子用例 → 父用例(子用例继承父用例的行为)。
```
╭──────────╮ ╭──────────╮
微信支付 ╲ 支付 ╲
│ │ ─ ─ ─▷ │ │
(空心三角) ╲
╰──────────╯ ╰──────────╯
(子用例) (父用例)
```
### 8. 参与者之间的泛化关系 —— 实线 + 空心三角形
**方向**:特殊参与者 → 一般参与者(特殊继承普通的能力)。
```
╭─────╮
│ 钻石会员 │ (特殊)
│ /│\ │ ─ ─ ─▷ 普通用户
│ / │ \ │ (一般)
╰───────╯
```
### 9. 完整用例图示例
把上面所有符号拼在一起画出来的样子:
```
读者
╱│╲
┌──── 图书管理系统 ──────────────────────┐
│ │
│ ╭──────╮ │
借书 ╲ ←──── <<include>> ────╮ │
││ │ │ │
│ ╲ │ │
│ ╰──────╯ │ │
│ ╭──────╮ │ │
还书 ╲ ←──── <<extend>> ────╮ │
││ │ │ │
│ ╲ │ │
│ ╰──────╯ │ │
│ │ │
│ ╭──────╮ │ │
缴纳 ╲ ←────────┘ │ │
││ 罚款 │ │ │
│ ╲ │ │
│ ╰──────╯ │ │
│ ╭──────╮ ── <<include>> ──→ │ │
查询 ╲ │ │
││ 图书 │ │ │
│ ╲ │ │
│ ╰──────╯ │ │
│ │ │
└──────────────────────────────────┘ │
管理员 │
○ │
╱│╲ │
╲ │
│ (借书/还书关联)
```
🔑 **一句话记忆口诀**:边界矩形圈住用例,参与者画在边界外;包含扩展都是虚线箭头,方向相反要分清;泛化用空心三角,子指向父别搞错。
---
## ✍️ 边学边练(三)
@@ -227,9 +391,9 @@
## 📝 章末自测
**1. 填空题**
- 参与者分三类:( ___ ___ )、外部设备、( ___ ___
- 用例之间的关系有三种:( ___ ___ )、( ___ ___ )、( ___ ___
- 在用例图中,用例画在系统边界的( ___ ___ )(里面/外面)
- 参与者分三类:( ______ )、外部设备、( _____
- 用例之间的关系有三种:( ____ )、( _____ )、( ____
- 在用例图中,用例画在系统边界的( ____ )(里面/外面)
**2. 判断题**(对还是错?)
- ( ) 一个参与者只能是一个人

View File

@@ -185,16 +185,241 @@
这是MVC模式的UML体现期中考试经常考
| 版型 | 职责 | 常见形式 | 对应MVC |
|------|------|----------|---------|
| **边界类** <<boundary>> | 与外界交互 | 窗口、对话框、报表 | View |
| **控制类** <<control>> | 协调业务逻辑 | 处理业务规则 | Controller |
| **实体类** <<entity>> | 持久化数据 | 数据库表对应的类 | Model |
| 版型 | 职责 | 常见形式 | 对应MVC |
| ---------------------- | ------ | --------- | ---------- |
| **边界类** `<<boundary>>` | 与外界交互 | 窗口、对话框、报表 | View |
| **控制类** `<<control>>` | 协调业务逻辑 | 处理业务规则 | Controller |
| **实体类** `<<entity>>` | 持久化数据 | 数据库表对应的类 | Model |
🔑 **协作关系**:边界类接收用户输入 → 控制类处理业务逻辑 → 实体类存取数据。
---
## 📌 附录:类图常用画图符号速查
> 这一节把类图中所有的关系符号、接口、抽象类、版型、对象图等所有画图元素用字符画列出来,画类图时直接照搬即可。
### 1. 关联关系Association—— 实线(可带多重性)
**普通关联**(双向带多重性):
```
┌────────┐ 1 0..* ┌────────┐
│ 老师 │ ────────────────── │ 学生 │
└────────┘ └────────┘
```
**自关联**(一个类关联到自己):
```
┌────────┐
│ 员工 │
│ │
│ 领导 │◀──┐
└────────┘ │
│ │
└─────┘
```
### 2. 聚合关系Aggregation—— 实线 + 空心菱形 ◇
> 部分可脱离整体独立存在。
```
┌────────┐ ┌────────┐
│ 班级 │ ───────────── │ 学生 │
└────────┘ └────────┘
(整体) (部分,可独立)
💬 学校没了,学生还在 —— 所以是空心菱形
```
### 3. 组合关系Composition—— 实线 + 实心菱形 ◆
> 部分不能脱离整体独立存在。
```
┌────────┐ ┌────────┐
│ 汽车 │ ───────────── │ 发动机 │
└────────┘ └────────┘
(整体) (部分,离不开整体)
💬 汽车报废了,发动机也没意义了 —— 所以是实心菱形
```
### 4. 依赖关系Dependency—— 虚线 + 开放箭头
```
┌────────┐ ┌────────┐
│ 司机 │ ─ ─ ─ ─ ─ ─ ─⇨ │ 汽车 │
└────────┘ └────────┘
(使用者) (被使用者)
(虚线 + 开放箭头)
```
### 5. 泛化关系Generalization—— 实线 + 空心三角
**方向**:子类 → 父类(空心三角指向父类)。
```
┌────────┐ ┌────────┐
│ 狗 │ ───────────── │ 动物 │
└────────┘ └────────┘
(子类) (父类)
```
### 6. 实现关系Realization—— 虚线 + 空心三角
**方向**:实现类 → 接口(空心三角指向接口)。
```
┌────────┐ ┌──────────────┐
│ 鸟 │ ─ ─ ─ ─ ─ ─ ─ │<<interface>>│
└────────┘ │ 飞行 │
(实现类) └──────────────┘
(接口)
```
### 7. 接口的两种画法
**普通矩形画法**(在类图中更常见):
```
┌──────────────────┐
│ <<interface>> │ ← 关键字标识
│ 飞行 │ ← 接口名
├──────────────────┤
│ +起飞(): void │ ← 只有声明,没有实现
│ +降落(): void │
└──────────────────┘
```
**棒棒糖表示法**(简化版,常在组件图中使用):
```
┌────────┐ ┌────────┐
│ 鸟 │●─ ─ ─ ─ ─ ─ ─ ─ ─ ┤ 飞行 │ (棒棒糖+连接线)
└────────┘ └────────┘
(实现类) (接口)
```
### 8. 抽象类与抽象方法
> **画法**:抽象类**类名用斜体**、抽象方法**方法名用斜体**。在字符画里用 `<<abstract>>` 标识或加文字说明。
```
┌────────────┐
│ 动物 │ ← 实际画图时类名用斜体
├────────────┤
│ │
├────────────┤
│ 移动() │ ← 实际画图时方法名用斜体
│ 叫() │
└────────────┘
{abstract} ← 标注方式(实际画图用斜体)
```
### 9. 版型Stereotype的画法
**边界类**
```
┌────────────────┐
│ <<boundary>> │ ← 写在类名上方
│ 登录页面 │
├────────────────┤
│ -用户名:String │
│ -密码:String │
├────────────────┤
│ +提交():void │
└────────────────┘
```
**控制类**
```
┌────────────────┐
│ <<control>> │
│ 订单处理 │
├────────────────┤
│ │
├────────────────┤
│ +处理订单() │
│ +检查库存() │
└────────────────┘
```
**实体类**
```
┌────────────────┐
│ <<entity>> │
│ 订单 │
├────────────────┤
│ -订单号:String│
│ -金额:double │
├────────────────┤
│ +保存() │
│ +查询() │
└────────────────┘
```
### 10. 对象图的画法
> 对象名格式:`对象名:类名`(对象名和类名下加**下划线**),属性有具体值。
```
┌─────────────────┐
│ 张三:员工 │ ← 对象名:类名,下划线
├─────────────────┤
│ 员工号 = "E001" │ ← 属性=值
│ 姓名 = "张三" │
│ 年龄 = 28 │
└─────────────────┘
```
**对象图与类图对比**
```
类图(描述规则) 对象图(描述实例)
┌──────────┐ ┌────────────────┐
│ 员工 │ │ 张三:员工 │
├──────────┤ ├────────────────┤
│ -员工号 │ │ 员工号="E001" │
│ -姓名 │ ──> │ 姓名="张三" │
│ -年龄 │ │ 年龄=28 │
├──────────┤ └────────────────┘
│ +查询() │
└──────────┘
```
### 11. 关联类的画法
> 关联类挂在关联线中间,用虚线连到关联线上。
```
┌────────┐ ┌────────┐
│ 员工 │ ─ ─ ─ ─ ─ ─ ─ │ 公司 │
└────────┘ │ └────────┘
┌────────┐
│ 合同 │ ← 关联类(虚线连到关联线上)
├────────┤
│ -工资 │
│ -合同期│
└────────┘
```
🔑 **一句话记忆口诀**:实线实箭是关联,空心菱形是聚合,实心菱形是组合,虚线开放箭头是依赖;实线空三角是泛化(继承),虚线空三角是实现(接口)。
---
## ✍️ 边学边练(三)
**题目**:在线购物系统中,"用户"通过"购物页面"下单,系统"订单处理"模块检查库存后,更新"订单"数据和"库存"数据。请指出各属于哪种版型。
@@ -225,9 +450,9 @@
## 📝 章末自测
**1. 填空题**
- 聚合关系中,整体不存在了,部分( ___ ___ )存在。(能/不能)
- 组合关系中,整体不存在了,部分( ___ ___ )存在。(能/不能)
- 边界类、控制类、实体类分别对应MVC中的 ___ ___ )、( ___ ___ )、( ___ ___
- 聚合关系中,整体不存在了,部分( ___ )存在。(能/不能)
- 组合关系中,整体不存在了,部分( ___ )存在。(能/不能)
- 边界类、控制类、实体类分别对应MVC中的 _____ )、( _____ )、( ___
**2. 判断题**
- ( ) 依赖关系比关联关系更弱

View File

@@ -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. 判断题**
- ( ) 调用消息的返回消息必须画出来

View File

@@ -113,6 +113,222 @@
| **泳道** | 标明活动由谁负责 | 纵向分区 |
| **对象流** | 活动之间传递的对象 | 带箭头的虚线 |
### 📌 活动图各元素的画法速查
> 这一节把活动图中**所有画图元素**用字符画列出来,画活动图直接照搬即可。
#### ① 起点 —— 实心圆 ●
```
```
#### ② 终点 —— 圆圈加实心圆 ⊙(也称"牛眼"
```
```
#### ③ 活动Activity—— 圆角矩形
```
╭───────────╮
│ 登录验证 │ ← 文字描述这一步做什么
╰───────────╯
```
#### ④ 转移箭头 —— 实线 + 开放箭头
```
╭───────────╮
│ 活动 A │
╰─────┬─────╯
⇨ 实线 + 开放箭头(类似异步消息)
╭─────┴─────╮
│ 活动 B │
╰───────────╯
```
#### ⑤ 分支Decision—— 菱形 ◇ + 监护条件
```
╭───────────╮
│ 活动 A │
╰─────┬─────╯
◇ ← 菱形(决策点)
[是] ╲[否]
╭─────╮ ╭─────╮
│ 活动B │ │ 活动C │
╰─────╯ ╰─────╯
◇ ← 合并点(多个分支汇合)
╭─────┴─────╮
│ 活动 D │
╰───────────╯
```
#### ⑥ 分叉Fork/ 汇合Join—— 粗横线
> **分叉**:一条路径分成多条并发执行。
> **汇合**:多条并发路径汇合成一条。
```
╭───────────╮
│ 活动 A │
╰─────┬─────╯
━━━━━━━━━━ ← 粗横线(分叉点)
│ │
⇨ ⇨
╭─────╮ ╭─────╮
│活动B│ │活动C│ ← B和C并发执行
╰──┬──╯ ╰──┬──╯
⇨ ⇨
│ │
━━━━━━━━━━ ← 粗横线(汇合点)
╭─────┴─────╮
│ 活动 D │ ← B和C都完成后才继续
╰───────────╯
```
#### ⑦ 泳道Swimlane—— 纵向分区
> 标明每一步由**哪个对象/角色**负责。
```
┌──────────┬──────────┬──────────┐
│ 客户 │ 业务员 │ 系统 │
│ (泳道1) │ (泳道2) │ (泳道3) │
├──────────┼──────────┼──────────┤
│ │ │ │
│ ● │ │ │ ← 起点
│ ⇩ │ │ │
│ ╭───╮ │ │ │
│ │下单│ │ │ │ ← 客户下单
│ ╰─┬─╯ │ │ │
│ │ │ │ │
│ ⇨ │ │ │
│ ╭───╮ │ │
│ │接单│ │ │ ← 业务员接单
│ ╰─┬─╯ │ │
│ │ │ │
│ ⇨ │ │
│ ╭───╮ │
│ │处理│ │ ← 系统处理
│ ╰─┬─╯ │
│ │ │
└──────────┴──────────┴──────────┘
⊙ ← 终点
```
#### ⑧ 对象流Object Flow—— 虚线 + 箭头
> 表示活动之间**传递的对象**(数据)。
```
╭───────────╮ ┌──────────┐
│ 提交订单 │ ── ─ ─▶│ 订单 │ ← 虚线 + 箭头
╰───────────╯ └──────────┘
⇨ (对象流也指向下一个活动)
╭─────╮
│ 付款 │
╰─────╯
```
⚠️ **注意**:对象本身画成**矩形**(不是圆角矩形),虚线箭头表示"这个活动产生/使用了这个对象"。
#### ⑨ 完整活动图示例(不带泳道)
```
● 起点
╭─────────╮
│ 开始借书 │
╰────┬────╯
╭─────────╮
│ 扫描图书 │
╰────┬────╯
╭─────────╮
│ 扫描借书证│
╰────┬────╯
◇ 判断
[可借] ╲[不可借]
╭─────╮ ╭───────╮
│ 借出 │ │ 提示原因│
╰──┬──╯ ╰───┬───┯
⇩ ⇩ │ (汇合)
│ │ │
╰───◇ 汇合 ◇────╯
╭─────────╮
│ 结束 │
╰─────────╯
⊙ 终点
```
#### ⑩ 状态图元素的画法
> 状态图和活动图有些元素是**共用的**(起点/终点/转移箭头)。
**状态**:圆角矩形,**可带分区**(状态名 / 内部活动)
```
╭─────────────────────╮
│ 待机中 │ ← 第一行:状态名
├─────────────────────┤
│ entry / 初始化 │ ← 入口动作
│ do / 持续活动 │ ← 持续活动
│ exit / 清理 │ ← 出口动作
╰─────────────────────╯
```
**转移Transition**
```
╭──────────╮ 事件[条件]/动作 ╭──────────╮
│ 状态A │ ─────────────────▶ │ 状态B │
╰──────────╯ ╰──────────╯
格式:事件名[监护条件]/动作
例: 借出() / 可借数-1
```
**历史状态 H**:圆圈里写 H记录离开时的子状态
```
╭──────────╮
│ 复合状态 │
╰────┬─────╯
(H) ← 历史状态圆圈里写H
╭──────╮ ╱│╲
│ 子1 │◀─(H)─▶│ 子2 │ ← 回来时回到H记录的子状态
╰──────╯ ╰─────╯
```
🔑 **一句话记忆口诀**:实心圆是起点,牛眼是终点;圆角矩形是活动,菱形是分支;粗横线是分叉汇合,泳道是纵向分区,对象是普通矩形+虚线箭头。
---
### 🔑 状态 vs 活动(必考区别!)
| 对比 | 状态 | 活动 |
@@ -187,9 +403,9 @@
## 📝 章末自测
**1. 填空题**
- 状态图描述的是( ___ ___ )个对象的状态变化
- 四种事件类型是:调用事件、( ___ ___ )、( ___ ___ )、时间事件
- 活动图中的菱形表示( ___ ___ ),粗横线表示( ___ ___
- 状态图描述的是( ____ )个对象的状态变化
- 四种事件类型是:调用事件、( ____ )、( _____ )、时间事件
- 活动图中的菱形表示( ____ ),粗横线表示( ___
**2. 判断题**
- ( ) 状态图和活动图都可以描述多个对象的交互

View File

@@ -91,6 +91,294 @@
---
## 📌 附录:组件图与部署图常用画图符号速查
> 这一节把组件图、部署图里所有的画图元素(组件、接口、结点、关系)用字符画列出来。
### 1. 组件Component—— 矩形 + 左侧两个小矩形
```
┌────┐
├────┤ ┌─────────────────┐
└────┘ │ <<component>> │ ← 字符画示意
│ OrderService │ ← 实际画法(两个小矩形贴在
└─────────────────┘ 组件图标的左上角)
```
更形象的字符画(标准画法的样子):
```
┌────────────────────────┐
│ ╔══════════════╗ │
╔═╧═╗║ OrderService ║ │ ← 左侧两个小方块
║ ║╚══════════════╝ │ 右侧大矩形是组件名
╚═══╝ │
└────────────────────────┘
```
简化字符画(更便于手写):
```
┌──┐
│ ├───── ┌────────────────┐
└──┘ │ OrderService │
└────────────────┘
```
⚠️ **命名方式**
- `OrderService.java` —— 包含扩展名的具体组件
- `<<component>>` + `OrderService` —— 用版型标识
### 2. 组件的两种画法
**带版型的标准画法**
```
┌──┐
│ ├───── ┌────────────────────┐
└──┘ │ <<component>> │
│ OrderService │
└────────────────────┘
```
**简化的文件/类表示法**(在组件图里很常见):
```
┌──┐
│ ├───── ┌────────────────────┐
└──┘ │ OrderService.java│ ← 写上扩展名
└────────────────────┘
```
### 3. 接口Interface—— 棒棒糖 / 插座
**棒棒糖表示法**(提供方在提供接口时用):
```
┌──────┐
客户端 │ 飞行 │ ← 圆圈 + 接口名
┌────┐ │ │
│ 鸟 │──●────┘ ↑ │ ← ● 是棒棒糖圆圈
└────┘ │ │
└───┘
```
**插座表示法**(需要方在实现接口时用):
```
┌────┐ ┌──────┐
│ 鸟 │ ─────────┤ 飞行 │
└────┘ ◀──── └──────┘
│ 半圆+连接线 │
│ (socket) │
```
简化字符画:
```
┌────────┐
│ 鸟 │ ●────── 飞行 (提供方lollipop)
└────────┘
┌────────┐
│ 飞机 │ ◀──半圆──── 飞行 (需要方socket)
└────────┘
```
### 4. 组件之间的关系
**依赖关系**(最常见 —— 一个组件调用另一个组件):
```
┌──┐ ┌──┐
│ ├──────┐ │ │
└──┘ │ └──┘
│ ┌────────────────┐
│ │ LoginService │
│ └────────────────┘
│ ┌────────────────┐
┌─────────┴─▶│ UserService │
│ ┌────────────────┐ │
└──│ LoginUI │ │
└────────────────┘ │
┌──┐ │
│ ├──┐ ┌────────────────┐ │
└──┘ └─▶│ DataService │◀───┘
└────────────────┘
(虚线箭头表示依赖)
```
简化画法(虚线箭头):
```
┌──────────────┐
│ OrderUI │
│ OrderCtrl │ ╌ ─ ─ ─ ─ ─▶ ┌──────────────┐
└──────────────┘ (依赖) │ OrderService│
└──────────────┘
```
**实现关系**(组件实现接口):
```
┌──────────────┐ ●──── 支付接口
│ 支付组件 │ ──────────── /
└──────────────┘ 实现关系
```
### 5. 结点Node—— 立方体
> 部署图的核心元素。立方体代表一台**物理设备**。
**字符画表现**(立方体用三视图):
```
┌──────────────┐
╱│ ╱│
┌──────────────┐ │
│ │ │ │
│ │ Web │ │
│ │ Server │ │
│ └───────────│──┘
│╱ │╱
└──────────────┘
```
**简化字符画**(考试/笔记常用):
```
┌──────────────┐
│ ┌────────┐ │
│ │ Web │ │ ← 立方体的"上表面"(可选)
│ │ Server │ │
│ └────────┘ │
└──────────────┘
┌──────────┐
╱│ Web ╱│
│ Server
┌──────────┐ │
│ ┌────┐ │ │
│ │名称│ │ │
│ └────┘ │ │
└──────────┘ │
│ │
└────────┘
```
最简洁的字符画(最推荐使用):
```
╔═══════════════╗
║ <<device>> ║ ← 设备结点
║ WebServer ║
╚═══════════════╝
```
**处理机结点 vs 设备结点**(都用立方体,靠版型区分):
```
处理机结点 设备结点
╔═══════════════╗ ╔═══════════════╗
║ <<processor>> ║ ║ <<device>> ║
║ WebServer ║ ║ Modem ║
╚═══════════════╝ ╚═══════════════╝
(有CPU可计算) (没有计算能力)
```
### 6. 结点内运行的组件
> 在结点立方体里"装"上组件,组件画在结点内部。
```
╔═══════════════════════════╗
║ <<processor>> ║
║ WebServer ║
║ ║
║ ┌──┐ ║
║ │ ├──── ┌────────────┐ ║
║ └──┘ │<<component>>║ ║
║ │ WebApp.jar │ ║
║ └────────────┘ ║
║ ║
║ ┌──┐ ║
║ │ ├──── ┌────────────┐ ║
║ └──┘ │<<component>>║ ║
║ │ DBDriver │ ║
║ └────────────┘ ║
╚═══════════════════════════╝
```
简化版本:
```
╔═══════════════╗
║ WebServer ║
║ ║
║ ┌──┐ ║
║ │ ├─ WebApp ║ ← 组件在结点里
║ └──┘ ║
╚═══════════════╝
```
### 7. 结点之间的连接
> 部署图上的"线"表示物理通信路径。
```
╔═══════════╗ ╔═══════════╗
║ 客户端 ║ ║ 服务器 ║
║ (PC机) ║ ║ ║
╚═════╤═════╝ ╚═════╤═════╝
│ │
│ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ │
│ TCP/IP │
│ │
```
**多重连接**(同一对结点可能有多种连接):
```
╔═══════════╗ ╔═══════════╗
║ 客户端 ║ ━━━━━━━TCP/IP ━━━━━━━━━ ║ Web服务器 ║
║ ║ ━━━━━━━ HTTPS ━━━━━━━━━ ║ ║
╚═══════════╝ ╚═══════════╝
```
### 8. 完整部署图示例
```
TCP/IP
━━━━━━━━━━━━━━━━━━━━
╔══════════╗ ╔══════════════════╗
║<<device>>║ ║ <<processor>> ║
║ 客户机 ║ ║ Web服务器 ║
║ ║ ║ ║
║ ┌──┐ ║ ║ ┌──┐ ║
║ │ ├─◀━━╫━━━━━━调用━━━━━━━━╫──┤ ├─ WebApp.jar║
║ └──┘ ║ ║ └──┘ ║
║ 浏览器 ║ ║ ║
╚══════════╝ ╚══════════════════╝
│ JDBC
╔══════════════════╗
║ <<processor>> ║
║ 数据库服务器 ║
║ ║
║ ┌──┐ ║
║ │ ├─ MySQL.db ║
║ └──┘ ║
╚══════════════════╝
```
🔑 **一句话记忆口诀**:组件左上方两个小方块,接口是圆圈加棒棒糖;结点是立方体(靠版型区分处理机/设备),立方体里装组件,立方体之间是通信连接。
---
## ✍️ 边学边练
**题目**某Web系统包括以下内容请区分逻辑模型和物理模型。

View File

@@ -48,6 +48,168 @@
> 子包继承父包中可见性为public和protected的元素。
### 📌 包图各元素的画法速查
> 这一节把包图里所有的画图元素(包本身、依赖、泛化)用字符画列出来。
#### ① 包的两种画法
**标准文件夹画法**(最常用):
```
┌──────────────┐
│ UI层 │ ← 上方有"小标签"(像文件夹的舌头)
└──────────────┘
```
字符画表示(小标签在左上角):
```
┌────────────┐
│┌─┐ │
││ │ │
│└─┘─────────┤
│ UI层 │
│ │
│ ┌─────────┐ │
│ │ 登录页 │ │ ← 包内可以嵌套子包或类
│ └─────────┘ │
└─────────────┘
```
**简化画法**(只用矩形):
```
┌──────────────┐
│ UI层 │
│ ┌────────┐ │
│ │ 登录页 │ │
│ └────────┘ │
│ ┌────────┐ │
│ │ 主页面 │ │
│ └────────┘ │
└──────────────┘
```
#### ② 包的嵌套
```
┌──────────────────────┐
│ 电子商务系统 │
│ ┌──────────┐ │
│ │ 用户模块 │ │
│ │ ┌──────┐ │ │
│ │ │登录类│ │ │
│ │ └──────┘ │ │
│ │ ┌──────┐ │ │
│ │ │注册类│ │ │
│ │ └──────┘ │ │
│ └──────────┘ │
│ ┌──────────┐ │
│ │ 订单模块 │ │
│ └──────────┘ │
└──────────────────────┘
```
#### ③ 包的可见性符号
```
┌────────────────┐
│ ┌─┐ │
│ │+│ 公开类 │ ← + 公有:任何外部包都可用
│ └─┘───────────┤
│ ┌─┐ │
│ │#│ 受保护类 │ ← # 受保护:只有子包可用
│ └─┘───────────┤
│ ┌─┐ │
│ │-│ 私有类 │ ← - 私有:只有包内部可用
│ └─┘───────────┤
│ │
└────────────────┘
```
#### ④ 包之间的依赖关系 —— 虚线 + 开放箭头
> 一个包中的类**引用**另一个包中的类 → 包之间形成依赖。
```
┌──────────────┐ ┌──────────────┐
│ UI层 │ │ 业务层 │
│ │ │ │
│ ┌────────┐ │ │ ┌────────┐ │
│ │登录窗口 │ │ │ │登录服务 │ │
│ └────────┘ │ │ └────────┘ │
│ │ │ │
└──────────────┘ └──────────────┘
│ ▲
└ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─┘
虚线 + 开放箭头
依赖方向UI层 依赖 业务层)
```
⚠️ **依赖方向**:箭头从"使用者"指向"被使用者"(类似类图里的依赖)。
#### ⑤ 包之间的泛化关系 —— 实线 + 空心三角
> 子包继承父包的内容。子包继承父包中**public 和 protected** 的元素。
```
┌──────────────┐ ┌──────────────┐
│ 业务层 │ │ 通用层 │
│ (子包) │ ─ ─ ─ ─ ─ ─ ─ ▷ │ (父包) │
│ │ 空心三角 │ │
│ ┌────────┐ │ │ ┌────────┐ │
│ │订单处理 │ │ │ │日志工具 │ │
│ └────────┘ │ │ └────────┘ │
│ ┌────────┐ │ │ ┌────────┐ │
│ │支付处理 │ │ │ │通用工具 │ │
│ └────────┘ │ │ └────────┘ │
└──────────────┘ └──────────────┘
```
⚠️ **泛化方向**:空心三角**指向父包**(与类图泛化一致)。
#### ⑥ 完整包图示例
```
┌────────────────┐
│ 表现层 │
│ ┌────────┐ │
│ │登录页 │ │
│ └────────┘ │
│ ┌────────┐ │
│ │主窗体 │ │
│ └────────┘ │
└───────┬────────┘
│ 依赖
╌ ╌ ╌ ╌ ╌ ╌ ╌
┌────────────────┐ ▷ ┌────────────────┐
│ 业务层 │ ─ ─ ─ ─ ─ ─ ─ ─ ─│ 通用层 │
│ │ 泛化 │ │
│ ┌────────┐ │ │ ┌────────┐ │
│ │登录管理 │ │ │ │日志工具 │ │
│ └────────┘ │ │ └────────┘ │
│ ┌────────┐ │ │ ┌────────┐ │
│ │订单管理 │ │ │ │数据校验 │ │
│ └────────┘ │ │ └────────┘ │
└───────┬────────┘ └────────────────┘
│ 依赖
╌ ╌ ╌ ╌ ╌ ╌ ╌
┌────────────────┐
│ 数据层 │
│ ┌────────┐ │
│ │用户DAO │ │
│ └────────┘ │
│ ┌────────┐ │
│ │订单DAO │ │
│ └────────┘ │
└────────────────┘
```
🔑 **一句话记忆口诀**:包用文件夹画,标签是包名;包间依赖是虚线开放箭头(指向被依赖),包间泛化是实线空心三角(指向父包);包可以嵌套,元素分+/-可见性。
---
## 💡 三、包的四大设计原则