Use Case中include、extend和generalization

本文详细解释了用例建模中的三种关键关系:包含(include)、扩展(extend)和泛化(generalization)。通过实例说明如何运用这三种关系来简化模型、避免冗余并提高可读性。

出处:http://kinglaw05.blog.163.com/blog/static/59683314200952393923117/

共性: 都是从现有的用例中抽取出公共的那部分信息,作为一个单独的用例,然后通后过不同的方法来重用这个公共的用例,以减少模型维护的工作量。



1
、包含(include)

 

    包含关系:使用包含(Inclusion )用例来封装一组跨越多个用例的相似动作(行为片断),以便多个基(Base )用例复用。基用例控制与包含用例的 关系,以及被包含用例的事件流是否会插入到基用例的事件流中。基用例可以依赖包含用例执行的结果,但是双方都不能访问对方的属性。

  
包含关系对典型的应用就是复用,也就是定义中说的情景。但是有时当某用例的事件流过于复杂时,为了简化用例的描述,我们也可以把某一段事件流抽象成为一个被包含的用例;相反,用例划分太细时,也可以抽象出一个基用例,来包含这些细颗粒的用例。这种情况类似于在过程设计语言中,将程序的某一段算法封装成一个子过程,然后再从主程序中调用这一子过程。  

   例如:业务中,总是存在着维护某某信息的功能,如果将它作为一个用例,那新建、编辑以及修改都要在用例详述中描述,过于复杂;如果分成新建用例、编辑用例和删除用例,则划分太细。这时包含关系可以用来理清关系。

2 、扩展(extend)

扩展关系:将基用例中一段相对独立并且可选的动作,用扩展(Extension )用例加以封装,再让它从基用例中声明的扩展点(Extension Point )上进行扩展,从而使基用例行为更简练和目标更集中。扩展用例为基用例添加新的行为。扩展用例可以访问基用例的属性,因此它能根据基用例中扩展点的当前状态来判断是否执行自己。但是扩展用例对基用例不可见。

对于一个扩展用例,可以在基用例上有几个扩展点。   

例如,系统中允许用户对查询的结果进行导出、打印。对于查询而言,能不能导出、打印查询都是一样的,导出、打印是不可见的。导入、打印和查询相对独立,而且为查询添加了新行为。因此可以采用扩展关系来描述:

 

3  、泛化(generalization)

 

泛化关系:子用例和父用例相似,但表现出更特别的行为;子用例将继承父用例的所有结构、行为和关系。 子用例可以使用父用例的一段行为,也可以重载它。父用例通常是抽象的。在实际应用中很少使用泛化关系,子用例中的特殊行为都可以作为父用例中的备选流存在。

例如,业务中可能存在许多需要部门领导审批的事情,但是领导审批的流程是很相似的,这时可以做成泛化关系表示:

 

### 创建 UML 用例图的方法 #### 工具准备 为了创建 UML 用例图,可以选择多种工具来完成这一任务。常用的工具有 Microsoft Visio、Lucidchart、StarUML PlantUML 等。这些工具提供了直观的界面预定义的形状库,能够轻松绘制参与者(Actor)、用例(Use Case)及其关系。 --- #### 参与者(Actor) 参与者是指外部实体,它们可以是人类用户或其他系统,与系统的功能交互。在 UML 中,参与者通常用一个小人图标表示[^2]。 例如,在银行系统中,“客户”是一个典型的参与者。 ```plaintext participant 客户 as C ``` --- #### 用例(Use Case) 用例代表系统提供给参与者的具体功能或服务。用例一般由椭圆表示,并标注清晰的名字[^4]。对于抽象用例,可以根据约定将其名称设置为斜体以区分普通用例[^1]。 ```plaintext usecase 下单 as UC1 usecase *选择商品* as AbstractUC ``` --- #### 关系类型 以下是几种常见关系类型的定义及实现方式: ##### 泛化(Generalization) 泛化是一种继承关系,子用例从父用例继承属性行为。这种关系通过带箭头的实线表示,箭头指向父用例[^3]。 ```plaintext AbstractUC <|-- 新建订单 ``` ##### 包含(Include) 包含关系意味着一个用例必须调用另一个特定的用例才能完成其功能。它使用带有 `<<include>>` 的虚线箭头表示,方向是从基础用例指向被包含的用例[^5]。 ```plaintext 下单 --> (选择商品) : <<include>> ``` ##### 扩展Extend扩展关系表示某个用例可以通过附加条件扩展另一用例的功能。它也采用带有 `<<extend>>` 的虚线箭头,但方向是从扩展用例指向基用例[^4]。 ```plaintext 支付 <--|.. 使用优惠券 : <<extend>> ``` ##### 联系(Association) 联系关系描述了参与者与用例之间的关联。一条简单直线即可表达两者间的互动。 ```plaintext C -- 下单 ``` --- #### 绘制流程概述 利用上述概念,按照以下逻辑构建完整的 UML 用例图: 1. 添加所有必要的参与者; 2. 描述主要用例及其细节; 3. 应用适当的关系链接各个组件。 --- ### 示例代码片段 下面展示了一个基于 PlantUML 的示例脚本,用于生成包含 actor、use case 不同关系的图表。 ```plantuml @startuml actor 用户 as A rectangle "在线购物平台" { usecase "浏览商品" as B usecase "加入购物车" as C usecase "结算" as D usecase "付款" as E usecase "*登录*" as Login {italic} } A -- B A -- C B --> C : <<include>> D <|-- 付款方式 E <|-- 微信支付 D -- 登录 : <<extend>> @enduml ``` 运行以上代码后会得到一张结构化的 UML 图形文件。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值