
1.3.2 UML用例图
用例(Use Case):表示用户与系统交互时发生的事件序列。Case翻译过来是事例、实例、业务场景的意思。通过Use Case把业务系统的业务场景通过用户操作的角度描述出来。每个用例提供了一个或多个场景,该场景说明了业务系统是如何与最终用户或其他系统进行互动的,也就是描述谁(角色)可以用系统做什么,从而获得一个明确的业务目标。编写用例时要避免使用技术术语,应该用最终用户或者领域专家的语言。用例一般是由软件开发者和最终用户共同创作的。
用例图(Use Case Diagram):表示某个功能模块下的多个用例组合。
1.用例图基本图元
下面演示使用IBM公司的Rational Rose工具建立用例图的基本步骤。
(1)打开软件Rational Rose,右击Use Case View,在弹出的菜单中选择New→Use Case Diagram(如图1-14所示)。

图1-14 新建用例图
(2)修改新建的视图名称为“用户管理”,如图1-15所示。

图1-15 用例视图
(3)工具条中的Package表示包,即当用例图中描述内容很多时,可以按照不同的业务场景建立多个包,在每个包中分别绘制该场景下的用例图(如图1-16所示)。

图1-16 包(Package)
(4)圆圈图元表示一个用例,小人图元表示当前系统的使用者(如图1-17所示)。每个用例都代表一个业务场景事件,应该使用动词给用例命名。

图1-17 用例与系统用户
(5)Unidirectional Association表示单向关联,即参与者指向用例的关联(如图1-18所示)。

图1-18 单向关联
(6)Dependency or instantiates图元表示用例与用例之间的依赖或实例关系(如图1-19所示)。

图1-19 依赖
(7)Generalization图元表示用例与用例之间的泛化关系(如图1-20所示)。

图1-20 泛化
2.用例之间的关系
用例与用例之间,存在Include(包含)关系、Extend(扩展)关系、Generalization(泛化)关系等。
1)包含关系
用例之间的包含(Include)关系是依赖关系的一种类型,它表示一个粗粒度的用例,可以包含多个细粒度的用例。注意:Include关系的箭头指向为父用例指向子用例。
示例:“用户管理”是一个粗粒度的用例,它又包含“加入黑名单”“移出黑名单”“升级VIP”等多个子用例(如图1-21所示)。
2)扩展关系
用例之间的扩展(Extend)关系也是依赖关系的一种类型,它表示一个用例行为可能导致另外一个用例的发生。注意:Extend关系的箭头指向为子用例指向父用例。
示例:如图1-22所示,“用户登录”是父用例,用户登录成功后,可能会产生“密码修改”和“修改联系方式”等与用户相关的用例发生。注意:扩展关系的子用例是可选的,不一定会发生。

图1-21 用例包含关系

图1-22 用例扩展关系
3)泛化关系
用例之间的泛化关系与类之间的泛化关系非常类似,表示父用例为粗粒度的用例抽象,子用例为具体的用例实现。
示例:如图1-23所示,“超市收银”的用例是一个抽象的父用例,用户具体付款时,可以选择“现金支付”“信用卡支付”“微信扫码”“充值卡支付”等很多具体支付手段。

图1-23 用例泛化关系
3.案例:用户管理用例图
把当前系统的用户管理功能汇集在一起,可以用一张完整的用例图来显示(如图1-24所示)。在用例图中可以有多个角色参与,多种用例关系也可以同时存在。