UML图中包含(include)和扩展(extend)关系的区别

在软件工程中的UML那一块知识有一个知识点就是包含和扩展关系很容易混淆,所以今天特此记下二者的区别方便自己以后学习以及理解。以下面例子为例:

如图所示:

>登记外借信息与用户登录属于包含关系(include),因为登记外借信息必然需要使用用户登录来进行,所以区分包含关系就是某个用例必然会使用另外一个用例

>查询书籍信息与修改图书信息属于扩展关系(extend),因为我们查询书籍的每次信息如果发现书籍信息有误那么我们去修改书籍信息,如果我们查询的信息没有错误就不必每次都去执行修改书籍信息。所以区分扩展关系就是当执行某个用例的时候我们不一定要去执行另外一个用例。

 

 

### UMLInclude Extend区别 #### 定义与概念 在UML用例图中,`include` 表示一种强制性的包含关系,意味着某个用例总是会调用另一个被包含的用例[^1]。这种关系通常用于抽象出多个用例中共有的功能模块。 相比之下,`extend` 则表示一种可选的扩展关系,即只有在某些特定条件满足时才会触发扩展用例的功能[^2]。这意味着 `extend` 是基于基本用例的一个附加行为,而不是核心流程的一部分。 #### 形化表达 - **Include 关系** 在形上表现为一条带有箭头的虚线,起点为主用例,终点为被包含的子用例,并标注关键字 `<include>` 或者直接写成 `<<include>>`[^3]。 - **Extend 关系** 同样是一条带箭头的虚线连接两个用例节点,不过方向是从扩展用例指向基类用例,在线上标记为 `<extend>` 或者 `<<extend>>`[^4]。 #### 使用场景分析 当设计系统时遇到重复使用的逻辑片段,则应该采用 `include` 来处理;而对于那些可能不会每次都发生的额外操作或者特殊情况下才需要执行的任务,则更适合运用 `extend` 进行建模[^5]。 例如,“登录”这一动作几乎每次访问都需要完成,因此它可以作为其他许多业务流程中的必要组成部分通过 `include` 实现。“发送邮件通知”,仅当发生错误或其他异常状况下才需激活此服务,那么就适合设置成由主要事务过程经由 `extend` 调动的形式存在。 ```python class UseCaseDiagram: def __init__(self, name): self.name = name def include(self, sub_use_case): print(f"{self.name} includes {sub_use_case}") def extend(self, extension_point, extended_use_case): print(f"{self.name} extends with {extended_use_case} at point {extension_point}") login_uc = UseCaseDiagram("Login") payment_uc = UseCaseDiagram("Payment") # Example of 'include' usage login_uc.include("Authentication") # Example of 'extend' usage payment_uc.extend("Error", "Send Email Notification") ``` 上述代码展示了如何模拟创建简单的用例对象并演示两者之间的差异。 #### 总结对比表 | 特性 | Include | Extend | |-----------------|----------------------------------|-----------------------------------| | 是否必需 | 必须 | 可选 | | 发生频率 | 始终发生 | 需要满足一定条件 | | 方向 | 主用例 -> 子用例 | 扩展用例 -> 基本用例 | | 描述符 | <<include>> | <<extend>> | ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值