用例图中Extend与Generalization的区别及应用咨询
用例中Extend与泛化(Generalization)的区别及应用
先把最核心的区别掰明白:
1. 泛化(Generalization):「是一个」的继承关系
这就是你熟悉的参与者泛化逻辑,放到用例里也完全适用——子用例是父用例的特殊版本,会继承父用例所有的流程、约束,还能在这个基础上修改细节或新增内容。
比如:父用例是「提交订单」,子用例「提交VIP订单」就是它的特殊版——继承普通提交的所有步骤,额外多了「自动抵扣会员优惠券」的操作;还有「提交企业订单」,继承核心流程后,加了「生成企业发票」的步骤。
这种关系适合多个用例核心目标一致,仅实现细节有差异的场景。
2. Extend(扩展):「可选附加」的增强关系
和泛化完全不同,Extend是给基础用例加「可选的外挂功能」——基础用例自己能独立跑完整个流程,扩展用例只有满足特定条件时才会触发,属于额外的补充行为。
比如:基础用例是「浏览商品详情」,扩展用例「收藏商品」,你不收藏也能正常看完详情;只有当你点击收藏按钮(触发条件),才会执行收藏的流程。
这种关系适合某个功能不是核心流程必须项,只是可选附加操作的场景。
再回答你最关心的问题:泛化完全可以用到用例上
用例泛化的逻辑和参与者泛化一致,都是用「带空心三角的实线」连接父用例和子用例,子用例继承父用例的所有特性,同时做特殊化修改。
举个实际例子:
父用例是「用户登录系统」,核心流程是「验证身份 → 进入系统」。
- 子用例「账号密码登录」:继承核心流程,补充「输入账号密码」的前置步骤;
- 子用例「短信验证码登录」:继承核心流程,把「输入账号密码」换成「输入手机号+验证码」;
- 子用例「微信授权登录」:继承核心流程,把验证步骤换成「跳转微信授权页面 → 验证授权信息」。
这样设计能清晰体现三个登录用例都是「用户登录系统」的特殊实现,共享核心目标,又各有不同的执行路径。
最后结合你贴的图补充下(因无法展示外链图片,这里描述通用图示逻辑):
- 第一张图应该是Extend关系示例:基础用例和扩展用例之间用带箭头的虚线连接,虚线上标注
<<extend>>,箭头指向扩展用例,代表基础用例可触发该可选扩展行为; - 第二张图应该是泛化关系示例:父用例在上,子用例在下,用带空心三角的实线连接,三角指向父用例,代表子用例继承父用例特性。
内容的提问来源于stack exchange,提问作者Smth_Unknown
相关产品推荐
相关产品推荐

