UML建模之⽤例图(重点讲extend和include关系) ⽂章⽬录
小麦玉米联合收割机概述
⽤例图(Use Case Diagram)是整个UML9种图中最基础、最重要的⼀种图。为什么说它重要呢?因为⽤例图描述的是待开发系统的功能需求,这些功能需求是UML其它⼏种视图的依据和基础,其它⼏种图都要围绕⽤例图中定义的⽤例来建模,也可以说其它⼏种图都是为了实现⽤例图中的⽤例⽽存在的。 那么⽤例图都有哪⼏种元素组成呢?
⾓⾊(Actor )
⾓⾊可以是⼈、也可以是物。
⾓⾊⽤⼀个⼩⼈,但这并不代表⾓⾊只能是⼈,⽽不能是其它的物。
那么怎样分析⼀个系统所涉及到的⾓⾊呢?下⾯是⼏种常⽤来确定系统⾓⾊的⽅法:
1、直接使⽤系统的⼈
2、系统的维护⼈员
3、从系统被动接受信息的⼈
4、系统使⽤的外设
5、需要与此系统相连的其它系统
1-3是⼈,4、5是物。所以⼀定不要认为⾓⾊只能是⼈。
⽤例(Use Case)
选器
⽤例就是系统的功能需求,就是待开发系统将要完成的功能,所以⽤例⼀般都⽤动词表⽰
⽤例的粒度有粗有细,按照⽤例的粒度可以将其划分为以下⼏个粒度
1、概述级
此图中⽤户使⽤收费系统,“使⽤收费系统(UseChargeSystem)”就是⼀个⽐较粗的概述级的⽤例(简单的表⽰了⼈和系统之间的关系)
2、⽤户⽬标级
此图中⽤户查询余额,“查询余额(QueryRemainCash)”就是⼀个相对⽐较具体的功能”,是我们最常⽤的⼀种⽤例粒度
3、⼦功能级
此图中⽤户在查询余额和查询使⽤⾦额之前都要先登录系统,登录系统(Login)是在完成其他基本⽤例时必须要执⾏的⼀个⼦过程,这⼀⽤例的粒度相对较细。⼦功能级的⽤例常⽤来被其它⽤例包含(include)、细化(refine)其他⽤例。旋转角度传感器
关系:
包括⾓⾊和⽤例之间的关系、⽤例和⽤例之间的关系、⾓⾊和⾓⾊之间的关系
⾓⾊和⽤例之间的关系通常为关联(表⽰某⼀⾓⾊和某⼀⽤例有关系):
⾓⾊和⾓⾊之间的关系通常为继承:
⾓⾊Administrator继承了⾓⾊User,那么Administrator也就具有QueryRemainCash和QueryUseCash的权限了。继承的最⼤好处就是实现复⽤,同使⽤⾓⾊之间的继承关系,可以⼤⼤减少⾓⾊和⽤例之间的“连线”。
⽤例和⽤例之间的关系就⽐较复杂了,下⾯我为⼤家⼀⼀介绍:
电动车太阳能充电器>阳光房天窗⼀、包含关系(include):
上⾯在讲⽤例粒度时讲到的查询余额(QueryRemainCash)和登录(Login)之间的关系就是包含关系
那么什么是包含关系呢?是不是就像⼤家想的那样,⼀个⼤⽤例划分为⼏个⼩⽤例,⼤的包含⼩的呢?答案是:不是。下⾯我为⼤家具体讲⼀下包含关系。
包含关系⽤⼀个虚箭头另加版型(stereotype)《include》表⽰,从包含⽤例指向被包含⽤例,如上图所⽰
包含关系可以基于以下理由:
1、从基本⽤例中分解出这样的⾏为:它对于了解基本⽤例的主要⽬的并不是必须的,但是它必须在
执⾏基本⽤例前先执⾏,只有它的结果才是⽐较重要的。如上图所⽰:对于⽤户来说,他在了解系统的功能时,“查询余额”是主要的,对于登录,只有它的结果才是重要的,但是⽤户在查询余额前必须先登录。
2、分解出两个或更多⽤例所共有的⾏为,这样可以实现⽤例的复⽤,简化⽤例图。如上图所⽰:"查询余额"和“查询消费⾦额”都能抽出⼀个“登录”⽤例。
举⼀个⼤家最常见的例⼦:你去银⾏办业务,⽆论你办什么业务,都需要你输⼊账号的密码。假如有⼈问你:你去银⾏⼲什么呀?你的回答可能是取钱,但是绝对没有⼈回答我去银⾏输密码和取钱。因为输⼊密码对于⽤户了解基本⽤例的⽬的不是必须的,只有输⼊密码的结果才是重要的(但它是取钱时必须执⾏的步骤),所以取钱和输⼊密码之间就是包含关系
⼆、扩展关系(extend)
扩展关系⽤⼀个虚箭头外加版型《extend》表⽰,由扩展⽤例指向被扩展⽤例
扩展关系可以基于以下理由:
1、表明⽤例的某⼀部分是可选的系统⾏为,这样就可以将⽤例图中的可选⾏为和必选⾏为分开。
2、表明只在特定条件下才执⾏的特定分⽀⽤例
3、表明多个基本⽤例中都有可能触发的某个可选⽤例
extend关系和include关系最明显的区别就是:扩展⽤例是可选的,包含⽤例是必选的,如上图所⽰:⼿机⽤户在⽤⾃动缴费机充值之后,可以打印⼩票,也可以不打印,这完全取决于⽤户的意愿,并不是必须要执⾏的。
三、实现关系(realize)
⼤家可能很少听说在⽤例模型中使⽤realize关系,⽤例模型中实现关系⽤于连接⽤例和⽤例实现,说明基本⽤例的⼀个实现⽅式。
实现在⽤例模型中的含义是:基本⽤例描述了⼀个业务⽬标,但是该业务⽬标有多种实现途径,每⼀种实现途径都可以⽤⼀个实现⽤例来表⽰。这样实现⽤例和基本⽤例之间就构成了实现关系。
无触点开关
⽤例图中的实现关系和类图中的实现关系⼀样,这⾥不再赘述。
写到这⾥,⽤例图就讲完了,以后我会出关于UML中其它⼏种图的⽂章,希望⼤家多多关注。最后希望此⽂能对⼤家有所帮助。