在 UML(统一建模语言) 的 用例图(Use Case Diagram) 中,主要有以下 四种关系,它们用于表示不同的行为之间的依赖性、扩展性和通用性。
1. 主要关系
1.1 关联(Association)
表示:“参与者(Actor)与用例(Use Case)之间的交互”,用实线表示。
🔹 适用场景:
- 用户 与 系统功能 之间的交互。
- 外部系统 作为一个参与者,交互特定的用例。
🔹 示例:
银行 ATM 取款
[用户] —— (取款)
- 用户 和 取款 之间的 关联关系 表示用户可以执行取款操作。
1.2 泛化(Generalization)
表示:“继承关系”,用带空心箭头的实线表示。
🔹 适用场景:
- 一个参与者(Actor)继承另一个参与者的行为(继承关系)。
- 一个用例可以被另一个更具体的用例扩展(行为继承)。
🔹 示例:
不同类型用户的登录
[用户]──▷[注册用户]
└──▷[管理员]
- 注册用户 和 管理员 都是 用户 的特殊类型,它们继承 用户 的行为。
- 管理员 可能有更多权限(如管理其他用户),而 注册用户 只能执行基本操作。
1.3 包含(Include)
表示:“被多个用例复用的功能”,用带箭头的虚线,标注《include》 表示。
🔹 适用场景:
- 一个 用例 A 始终 需要另一个 用例 B 来完成一部分功能(强依赖)。
- 用例 B 是一个可复用的公共功能。
🔹 示例:
在线支付
(在线购物) --《include》--> (验证支付信息)
(在线购物) --《include》--> (扣款)
- “在线购物” 这个用例必须 包含 “验证支付信息” 和 “扣款”,因为它们是购物的 必备功能。
1.4 扩展(Extend)
表示:“可选或有条件执行的功能”,用带箭头的虚线,标注《extend》 表示。
🔹 适用场景:
- “用例 A” 在特定条件 下才会触发 “用例 B”(弱依赖)。
- 可选功能或异常情况,例如 错误处理、特殊业务逻辑。
🔹 示例:
用户登录
(登录) --《extend》--> (两步验证)
- “两步验证” 仅在特定情况下(如异地登录)才会触发,因此它扩展 了 “登录” 的功能。
2. 关系选择指南
关系 | 说明 | 适用场景 | UML 表示方式 |
---|---|---|---|
关联(Association) | 参与者与用例之间的交互 | 用户执行系统功能 | 实线 |
泛化(Generalization) | 继承,表示一种 “是…的一种” 关系 | 子类继承父类的行为 | 带空心箭头的实线 |
包含(Include) | 强依赖,公用子功能 | 复用代码逻辑 | 带箭头的虚线 + 《include》 |
扩展(Extend) | 弱依赖,可选功能 | 特定条件下的行为 | 带箭头的虚线 + 《extend》 |
3. 典型场景分析
📌 电子商务系统
(1) 用户购买商品
[用户]──▶(浏览商品)
├──▶(添加购物车)
├──▶(下单)──《include》──▶(支付)
├──《extend》──▶(优惠券)
├──《extend》──▶(分期付款)
- 包含(Include):支付 是 下单 的必要功能。
- 扩展(Extend):
- 使用优惠券(可选)。
- 分期付款(可选)。
📌 银行系统
(2) ATM 取款
[用户]──▶(插入卡片)
├──▶(输入密码)──《extend》──▶(密码错误)
├──▶(选择取款金额)──《include》──▶(余额检查)
├──▶(取款)
- 包含(Include):余额检查 是 取款 的必备步骤。
- 扩展(Extend):如果密码输入错误,触发错误处理。
4. 结论
- 用例图关系的选择 取决于功能的依赖性和可复用性:
- 必须执行的功能 →
Include
- 可选或特定情况下执行的功能 →
Extend
- 功能继承或角色继承 →
Generalization
- 普通的用户与功能关系 →
Association
- 必须执行的功能 →
用例图的核心是“用户 + 功能 + 关系”,合理利用不同关系能清晰地描述系统功能和交互方式。💡