扩展关系(extend)
扩展关系用一个虚箭头外加版型《extend》表示,由扩展用例指向被扩展用例
扩展关系可以基于以下理由:
1、表明用例的某一部分是可选的系统行为,这样就可以将用例图中的可选行为和必选行为分开。
2、表明只在特定条件下才执行的特定分支用例
3、表明多个基本用例中都有可能触发的某个可选用例
extend关系和include关系最明显的区别就是:扩展用例是可选的,包含用例是必选的,如上图所示:手机用户在用自动缴费机充值之后,可以打印小票,也可以不打印,这完全取决于用户的意愿,并不是必须要执行的。
包含关系(include):
上面在讲用例粒度时讲到的查询余额(QueryRemainCash)和登录(Login)之间的关系就是包含关系
那么什么是包含关系呢?是不是就像大家想的那样,一个大用例划分为几个小用例,大的包含小的呢?答案是:不是。下面我为大家具体讲一下包含关系。
包含关系用一个虚箭头另加版型(stereotype)《include》表示,从包含用例指向被包含用例,如上图所示
包含关系可以基于以下理由:
1、从基本用例中分解出这样的行为:它对于了解基本用例的主要目的并不是必须的,但是它必须在执行基本用例前先执行,只有它的结果才是比较重要的。如上图所示:对于用户来说,他在了解系统的功能时,“查询余额”是主要的,对于登录,只有它的结果才是重要的,但是用户在查询余额前必须先登录。
2、分解出两个或更多用例所共有的行为,这样可以实现用例的复用,简化用例图。如上图所示:"查询余额"和“查询消费金额”都能抽出一个“登录”用例。
举一个大家最常见的例子:你去银行办业务,无论你办什么业务,都需要你输入账号的密码。假如有人问你:你去银行干什么呀?你的回答可能是取钱,但是绝对没有人回答我去银行输密码和取钱。因为输入密码对于用户了解基本用例的目的不是必须的,只有输入密码的结果才是重要的(但它是取钱时必须执行的步骤),所以取钱和输入密码之间就是包含关系