1087 字
3 分钟
结构化设计中包含、扩展、泛化的含义
结构化设计中包含、扩展、泛化的含义
在结构化设计(尤其 UML 建模)中,这三种关系用于描述用例或类之间的交互与层次,核心区别在于依赖性质与复用逻辑。
一、包含关系(Include)
定义
表示基础用例必须调用被包含用例的功能才能完成自身任务,是强制依赖关系,类似 “主函数调用子函数”。
核心特点
- 强制性:基础用例执行时,被包含用例的事件流无条件插入执行
- 复用性:提取多个用例的公共功能,避免重复建模
- 独立性:被包含用例可独立存在,基础用例不能脱离被包含用例完成核心流程
表示方法
- 构造型:
<<include>> - 图形:虚线箭头,从基础用例指向被包含用例
典型场景
- 所有支付流程都需包含 “身份验证”
- 所有订单操作都需包含 “日志记录”
- 提款用例包含 “验证账户余额” 功能
二、扩展关系(Extend)
定义
表示扩展用例的行为可在特定条件下,为基础用例添加新功能,是可选增强关系,类似 “插件扩展主程序”。
核心特点
- 条件性:仅当满足预设条件时才触发扩展行为
- 可选性:基础用例可独立完成核心功能,无需扩展用例
- 扩展性:扩展用例可访问基础用例属性,根据状态判断是否执行
- 多插入点:可在基础用例多个位置插入扩展逻辑
表示方法
- 构造型:
<<extend>> - 图形:虚线箭头,从扩展用例指向基础用例
典型场景
- 预订机票时,仅当行李超重才触发 “购买行李额” 扩展
- 结算订单时,仅当用户选择优惠券才触发 “使用优惠券” 扩展
- 基本通话业务上,可扩展呼叫等待、呼叫转移等增值服务
三、泛化关系(Generalization)
定义
描述一般与特殊的继承关系,子类(子用例)继承父类(父用例)的所有结构与行为,并可添加新特性或重写原有行为,体现 “is-a” 逻辑。
核心特点
- 继承性:子类继承父类全部属性、方法和关系
- 多态性:任何使用父类的地方都可用子类替代(里氏替换原则)
- 特化性:子类可扩展新功能或修改父类行为以适配特殊场景
表示方法
- 图形:实线空心三角箭头,从子类 / 子用例指向父类 / 父用例
典型场景
- 支付用例泛化为微信支付、支付宝支付、银行卡支付等子用例
- 用户类泛化为普通用户、管理员、VIP 用户等子类
- 交通工具类泛化为汽车、火车、飞机等子类
四、核心区别对比表
| 维度 | 包含关系 | 扩展关系 | 泛化关系 |
|---|---|---|---|
| 本质 | 强制依赖(必须调用) | 条件增强(可选触发) | 继承关系(is-a) |
| 箭头方向 | 基础→被包含 | 扩展→基础 | 子→父 |
| 触发条件 | 无条件 | 特定条件 | 无(自动继承) |
| 独立性 | 基础用例依赖被包含用例 | 基础用例可独立存在 | 子类依赖父类,父类可独立 |
| 复用目的 | 提取公共功能 | 分离可变行为 | 抽象共性,特化个性 |
| 典型场景 | 日志记录、权限验证 | 优惠券使用、增值服务 | 多种支付方式、用户类型 |
五、应用原则
- 包含关系:用于抽取多个用例的必须执行的公共模块,提升复用性
- 扩展关系:用于分离可选功能,保持基础流程简洁,支持灵活扩展
- 泛化关系:用于抽象共性特征,构建层次化结构,支持多态与特化实现
分享
如果这篇文章对你有帮助,欢迎分享给更多人!
结构化设计中包含、扩展、泛化的含义
https://www.rumin.top/posts/结构化设计-包含扩展泛化/ 部分信息可能已经过时
相关文章 智能推荐
1
UML知识点完整整理速查表
学习笔记 UML图分类、关系类型及记忆口诀完整整理速查表
2
软考中级软件设计师 · 数据库知识点
学习笔记 软考数据库知识点整理,包含事务日志、故障恢复、UNDO/REDO等核心考点,适用于考前冲刺快速回忆。
3
软考中级软件设计师 · 知识点速查表
考试备考 软考中级软件设计师考试核心知识点速查表
4
软考中级软件设计师 · 错题本
考试备考 记录选择题备考中的高频错题,涵盖数据结构、算法设计等模块,包含详细考点分析和易错点总结。
5
软考中级软件设计师 · 知识点速查表
考试备考 精选高频考点速查,涵盖图论、树、数组、栈、查找算法、排序算法等数据结构与算法核心知识点。






