UML建模之用例图(着重点讲extend和include关系)

UML建模之用例图(重点讲extend和include关系)
       用例图(Use Case Diagram)是整个UML9种图中最基础、最重要的一种图。为什么说它重要呢?因为用例图描述的是待开发系统的功能需求,这些功能需求是UML其它几种视图的依据和基础,其它几种图都要围绕用例图中定义的用例来建模,也可以说其它几种图都是为了实现用例图中的用例而存在的。

UML建模之用例图(着重点讲extend和include关系)
UML建模之用例图(着重点讲extend和include关系)



那么用例图都有哪几种元素组成呢?

角色(Actor)
UML建模之用例图(着重点讲extend和include关系)
UML建模之用例图(着重点讲extend和include关系)

角色用一个小人,但这并不代表角色只能是人,而不能是其它的物。角色可以是人、也可以是物。

那么怎样分析一个系统所涉及到的角色呢?下面是几种常用来确定系统角色的方法:

1、直接使用系统的人
2、系统的维护人员
3、从系统被动接受信息的人
4、系统使用的外设
5、需要与此系统相连的其它系统

1-3是人,4、5是物。所以一定不要认为角色只能是人。


用例(Use Case)
UML建模之用例图(着重点讲extend和include关系)

UML建模之用例图(着重点讲extend和include关系)

用例就是系统的功能需求,就是待开发系统将要完成的功能,所以用例一般都用动词表示

用例的粒度有粗有细,按照用例的粒度可以将其划分为以下几个粒度

1、概述级
UML建模之用例图(着重点讲extend和include关系)
UML建模之用例图(着重点讲extend和include关系)

       此图中用户使用收费系统,“使用收费系统(UseChargeSystem)”就是一个比较粗的概述级的用例(简单的表示了人和系统之间的关系)


2、用户目标级

UML建模之用例图(着重点讲extend和include关系)
UML建模之用例图(着重点讲extend和include关系)
       此图中用户查询余额,“查询余额(QueryRemainCash)”就是一个相对比较具体的功能”,是我们最常用的一种用例粒度


3、子功能级
UML建模之用例图(着重点讲extend和include关系)
UML建模之用例图(着重点讲extend和include关系)

        此图中用户在查询余额和查询使用金额之前都要先登录系统,登录系统(Login)是在完成其他基本用例时必须要执行的一个子过程,这一用例的粒度相对较细。子功能级的用例常用来被其它用例包含(include)、细化(refine)其他用例。



关系:包括角色和用例之间的关系、用例和用例之间的关系、角色和角色之间的关系


角色和用例之间的关系通常为关联(表示某一角色和某一用例有关系):

UML建模之用例图(着重点讲extend和include关系)
UML建模之用例图(着重点讲extend和include关系)

角色和角色之间的关系通常为继承:

UML建模之用例图(着重点讲extend和include关系)
UML建模之用例图(着重点讲extend和include关系)
       角色Administrator继承了角色User,那么Administrator也就具有QueryRemainCash和QueryUseCash的权限了。继承的最大好处就是实现复用,同使用角色之间的继承关系,可以大大减少角色和用例之间的“连线”。

用例和用例之间的关系就比较复杂了,下面我为大家一一介绍:


一、包含关系(include):

上面在讲用例粒度时讲到的查询余额(QueryRemainCash)和登录(Login)之间的关系就是包含关系
UML建模之用例图(着重点讲extend和include关系)
UML建模之用例图(着重点讲extend和include关系)

       那么什么是包含关系呢?是不是就像大家想的那样,一个大用例划分为几个小用例,大的包含小的呢?答案是:不是。下面我为大家具体讲一下包含关系。

包含关系用一个虚箭头另加版型(stereotype)《include》表示,从包含用例指向被包含用例,如上图所示

包含关系可以基于以下理由:

1、从基本用例中分解出这样的行为:它对于了解基本用例的主要目的并不是必须的,但是它必须在执行基本用例前先执行,只有它的结果才是比较重要的。如上图所示:对于用户来说,他在了解系统的功能时,“查询余额”是主要的,对于登录,只有它的结果才是重要的,但是用户在查询余额前必须先登录。

2、分解出两个或更多用例所共有的行为,这样可以实现用例的复用,简化用例图。如上图所示:"查询余额"和“查询消费金额”都能抽出一个“登录”用例。

        举一个大家最常见的例子:你去银行办业务,无论你办什么业务,都需要你输入账号的密码。假如有人问你:你去银行干什么呀?你的回答可能是取钱,但是绝对没有人回答我去银行输密码和取钱。因为输入密码对于用户了解基本用例的目的不是必须的,只有输入密码的结果才是重要的(但它是取钱时必须执行的步骤),所以取钱和输入密码之间就是包含关系

UML建模之用例图(着重点讲extend和include关系)

UML建模之用例图(着重点讲extend和include关系)
二、扩展关系(extend)

扩展关系用一个虚箭头外加版型《extend》表示,由扩展用例指向被扩展用例

UML建模之用例图(着重点讲extend和include关系)
UML建模之用例图(着重点讲extend和include关系)
扩展关系可以基于以下理由:

1、表明用例的某一部分是可选的系统行为,这样就可以将用例图中的可选行为和必选行为分开。
2、表明只在特定条件下才执行的特定分支用例
3、表明多个基本用例中都有可能触发的某个可选用例

       extend关系和include关系最明显的区别就是:扩展用例是可选的,包含用例是必选的,如上图所示:手机用户在用自动缴费机充值之后,可以打印小票,也可以不打印,这完全取决于用户的意愿,并不是必须要执行的。


三、实现关系(realize)

       大家可能很少听说在用例模型中使用realize关系,用例模型中实现关系用于连接用例和用例实现,说明基本用例的一个实现方式。
        实现在用例模型中的含义是:基本用例描述了一个业务目标,但是该业务目标有多种实现途径,每一种实现途径都可以用一个实现用例来表示。这样实现用例和基本用例之间就构成了实现关系。

UML建模之用例图(着重点讲extend和include关系)

用例图中的实现关系和类图中的实现关系一样,这里不再赘述。

写到这里,用例图就讲完了,以后我会出关于UML中其它几种图的文章,希望大家多多关注。最后希望此文能对大家有所帮助。
14楼cicinut昨天 14:55
嗯,比较基础的,不错
Re: wwwwenhuan昨天 17:37
回复cicinutn多谢
13楼huangjunhui_0828前天 19:27
恩啊,正在看大象那本书.好书啊.
Re: wwwwenhuan前天 20:14
回复huangjunhui_0828n这本书讲UML讲的特别好
12楼xiaoduishenghuogo前天 19:08
重新画用例图的时候才发现原来用例图没有想象的那么简单!
Re: wwwwenhuan前天 19:27
回复xiaoduishenghuogon用例图是整个UML建模的基础,决定着以后各个图怎么画
11楼xqf309前天 17:15
非常不错,是该总结下了
Re: wwwwenhuan前天 18:45
回复xqf309n所学的知识总结一遍是不够的,要不断的认识,不断的总结
10楼a1314517love前天 16:51
总结的太详细了,长收
Re: wwwwenhuan前天 16:54
回复a1314517loven[e04]
9楼jianxin10093天前 08:24
1.第三种跟第一种的对应关系个人感觉就好像继承和泛化。第三种如果将箭头方向反一下,那么就是include。而第四种这样的,在有些地方称之为扩展。n2.那个扩展的例子是这样的:发通知,然后发QQ通知、飞信通知、邮件通知分别扩展了发通知这个用例。n3.个人感觉包含和扩展两种关系是最经典的关系n4.用例之间貌似还有一种叫做依赖的关系吧
Re: wwwwenhuan3天前 08:26
回复jianxin1009n大包小,不叫包含,你可以参考一下我博客里写的include关系基于的基础:在执行基本用力前,必须先执行包含用例。还是看《大象》吧,那里面讲的很细。
Re: jianxin10093天前 11:49
回复wwwwenhuann那么你看一下大象的书上452页和93页的关于借阅人的两个用例图,二者的对比就很好的回应了你
Re: wwwwenhuan3天前 14:23
回复jianxin1009n至于你第二条提出的例子,扩展是可选的,而你举的例子中,必选后面的一种
Re: jianxin10093天前 14:48
回复wwwwenhuann难道你的交费不是必选后面的一种么?
Re: wwwwenhuan前天 15:40
回复jianxin1009n我这里的关系是参考一本叫做《大象UML》的书里面的,有时间你可以看一下
Re: jianxin1009前天 15:49
回复wwwwenhuann可以多参考一下资料,还有大象本身的例子就把你的有些话给否了。。。
Re: wwwwenhuan前天 16:50
回复jianxin1009n看来需要进一步的思考
8楼wwwwenhuan3天前 23:47
第二次认识用例图
7楼aboy1233天前 21:27
总结的不错
Re: wwwwenhuan3天前 21:48
回复aboy123n[e04]
6楼Wentasy3天前 21:26
[e01]
Re: wwwwenhuan3天前 21:27
回复Wentasyn[e04]
5楼llhhyy19893天前 20:18
后面的两种关系,我没有用过。。
Re: wwwwenhuan3天前 21:25
回复llhhyy1989n后面的两种关系是我从一本叫做《大象UML》的书上看到的,而且rose也支持refine关系
4楼lfmilaoshi3天前 18:54
真正的深入浅出,好文。。。。米老师
Re: wwwwenhuan3天前 20:16
回复lfmilaoshin第二遍看用例图和第一遍看的感觉不一样,您说得对,知识是需要不断的总结和复习的。
3楼shehun13天前 15:43
深入理解用例关系啊!
Re: wwwwenhuan3天前 16:16
回复shehun1n好久没有得到旭哥的指点了
2楼gwblue4天前 14:00
嗯,我想要的都在这里了!
Re: wwwwenhuan3天前 15:41
回复gwbluen[e04]
1楼happylee66884天前 11:48
不错,理解又进一步加深。
Re: wwwwenhuan4天前 11:51
回复happylee6688n[e04]