UsecaseDiagram中的include和extend比较

 

本文摘自:http://www.cnblogs.com/HeroBeast/archive/2010/09/02/1816241.html

 

本文和大家重点讨论一下UML用例图中include与extend的区别,include是指用例中的包含关系,通常发生在多个用例中,有可以提取出来的公共部分,而extend则恰好相反。下面请看本文详细介绍。

UML用例图中include与extend的区别

最近上论坛,看到在争论UseCase中include与extend的区别。其实这两者是很容易区分的。

include是指用例中的包含关系,通常发生在多个用例中,有可以提取出来的公共部分(就象提取公因式一样),例如UseCaseA中包括了a和b两个流程,而UseCaseC中包含了c和b两个流程。为了提高复用性,可以把b提取出来,形成另一个用例UseCaseB,此时,UseCaseA include UseCaseB(表现为一条指向UseCaseB的虚线,箭头在UseCaseB侧),UseCaseC也include UseCaseB。因而,当有include关系时,被include的用例通常会被两个以上的其他用例include(否则就不需要重用,也就不需要提取出来了),UML用例图如下:

在include关系中,“UseCaseA和UseCaseC知道UseCaseB的存在,而UseCaseB根本不知道有UseCaseA 和 UseCaseC);

 

extend则恰好相反。假设UseCaseA的功能描述为“发送一条通知”,可是,发送通知的方式可能有许多种,例如通过邮件发送、通过短信发送等。在需求分析阶段,可能无法明确到底有多少种方式,在用例分析阶段,UseCaseA需要留出扩展接口,然后把已知的发送方式作为扩展用例给出,例如UseCaseB是“通过短信发送”,而UseCaseC是“通过邮件发送”,此时,UseCaseB和UseCaseC extend了UseCaseA,表现为两根虚线,箭头指向UseCaseA,UML用例图如下:

在extend关系中,UseCaseA不知道UseCaseB和UseCaseC的存在,但UseCaseB和UseCaseC却是知道UseCaseA并且知道如何在UseCaseA中作扩展的。

另:在UML用例图中,有时会看到两个用例之间有依赖关系(表现为一条单向或双向的实线),这是错误的,说明用例没有提纯。

也许有人会问“如果两个用例之间,一个要调用另一个时,怎么办?”(有可能是混淆了用例和模块的关系),那么,首先要区分概念,用例就是用例,用例不是模块,也不是组件(虽然一个用例能发展成为“一个或多个”模块或组件);其次,从用例分析的角度来看,如果用例A确实要调用到用例B,那么,可以进一步分析:A是调用了B的所有流程呢,还是其中一部分流程?

(1)如果是调用了一部分,此时可以把B中的那部分流程提取出来,形成用例C,然后A和B都includeC;

(2)如果是调用了所有流程,那么,A直接includeB即可;

(3)如果A没有调用B中的任何流程……faint,那还画那条代表依赖的实线干嘛?

 

extend表示“可选”项,而非必选项。这意味着即使没有扩展用例,基本用例也是完整的。如果没有基本用例,扩展用例是不能单独存在的;如果有多个扩展用例,同一时间用例实例也只会使用其中的一个扩展用例。

include 表示的“必需”而不是可选,这意味着没有包含用例,基本用例是不完整的,同时没有基本用例,包含用例是不能单独存在的

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: includeextend是用例图的两个关键词,它们用于描述用例之间的关系。 include表示一个用例包含另一个用例,即一个用例在执行过程需要调用另一个用例来完成某些功能。这种关系通常是必须的,因为一个用例需要依赖另一个用例的功能才能完成自己的任务。 extend表示一个用例可以扩展另一个用例,即一个用例可以在另一个用例的基础上添加一些额外的功能。这种关系通常是可选的,因为一个用例可以选择是否要扩展另一个用例的功能。 总之,includeextend是用例图非常重要的概念,它们可以帮助我们更好地理解用例之间的关系,从而更好地设计和实现软件系统。 ### 回答2: 用例图includeextend是这样两种关系: 1. include:表示一个用例包含另一个用例。即,一个用例的执行过程,需要执行另一个用例。在用例图include关系用虚线箭头表示。 例如,用户注册的用例包括发送邮件通知的用例。在注册过程,需要发送邮件通知用户注册成功,所以发送邮件通知这个用例就是注册用例的一个子用例。 2. extend:表示一个用例扩展另一个用例。即,一个用例的执行过程,如果满足一定条件,会调用另一个用例进行扩展。在用例图extend关系用虚线箭头和带有<<extend>>标记的关键字表示。 例如,用户购买商品的用例可以扩展一个使用优惠券的用例。如果用户满足使用优惠券的条件,就可以进入使用优惠券这个扩展用例进行操作。 总的来说,include关系用于把用例拆分为更小的子用例,更好地描述用例执行过程;而extend关系则用于描述可选的扩展用例,用于满足特定条件时的操作。两种关系都可以使用例图更加清晰明了,更好地描述用例的执行过程。 ### 回答3: 用例图includeextend是两种重要的关系关联,它们帮助人们描述用例之间的依赖关系和扩展关系。 首先,include关系表示一个用例包含另一个用例,也就是说一个用例是基于另一个用例的扩展而来的。这种关系通常用于描述一些共性的功能或行为,比如:一个购物车的用例可以包含添加商品、删除商品、结算等子用例,这些子用例是购物车必要的功能,也是购物车的共性。当有新的功能需要添加时,可以通过扩展已有用例来实现,不需要从头开始设计新的用例。这种关系用实心箭头表示,箭头指向被包含的用例。 其次,extend关系表示一个用例可以在某些触发条件下扩展另一个用例,从而实现新的功能或行为。这种关系通常用于描述一些可选的功能或行为,比如:一个下单用例可以在支付方式选择时扩展支付宝支付、微信支付等子用例,这些子用例是下单的可选功能。当用户需要使用这些可选功能时,可以触发扩展用例来实现。这种关系用虚线箭头表示,箭头指向扩展的用例。 需要注意的是,includeextend是两种不同的关系,不能混淆使用。通常建议先设计基础用例,再通过包含和扩展来实现功能的扩展和完善。同时也需要注意,这些用例关系仅仅是在用例层面上进行描述,不能直接映射到软件系统的代码实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值