行为者是指在系统外部与系统交互的实体,可以是人或者其他系统、硬件设备甚至是时间(当系统需要定时触发时,时钟就是行为者)。用一个简化的人形图标来表示行为者,如图4-7所示。注意,无论行为者是人或是其他系统,UML的语法定义了行为者能且仅能用这种唯一的符号表示。
图4-7 行为者的表示法
每个行为者可以参与一个或多个用例,一个用例也可以被多个行为者参与。行为者通过交换信息与用例发生交互(因此也与用例所在的系统发生了交互),而行为者的内部实现与用例是不相关的,可以用一组定义其状态的属性充分描述行为者。
1)定义行为者
如何才能准确定义行为者呢?需要注意到以下几个要点:
(1)行为者之间可以有泛化(继承)关系
行为者在系统中也是对象,用类来定义,因此类之间的关联也适用于行为者。用例图中,可以用泛化(继承)关系来描述多个行为者之间的关系。行为者之间的泛化关系用一个三角箭头表示,与UML中类之间的泛化关系所用的符号相同。
案例学习
◎如图4-8所示,某租赁公司接受客户的电话预定和网上预定。行为者“客户”描述了行为者“电话客户”和“网上客户”所扮演的父类角色。如果不考虑客户是如何与系统接触的,可以使用父类行为者;如果强调接触发生的形式,那么用例必须使用实际的特殊行为者,即子类行为者。
图4-8 行为者之间的泛化关系示例
(2)行为者代表一种角色,而不是具体某个人
一个人在系统中可以成为几个不同的行为者,即表示他担任了几个不同的角色。例如在房地产开发经营管理系统中,对于某个购房者而言,他在房屋销售子系统中是购房合同的签约方,而在物业管理子系统中是房屋的业主,他一个人在整个系统中担任了两个角色。
(3)对同一个人所担任角色的限制
为了保证系统的安全及在业务上完善相互制约机制,一个人担任的角色应该是有限制的。例如,一个人不能既签订合同又审批合同,使合同审批形同虚设。
(4)行为者可以分为主行为者和副行为者
①主行为者:使用系统的主要功能。例如,保险系统中主行为者处理保险的注册和管理。
②副行为者:处理系统的辅助功能。例如,数据库管理、通信、系统备份以及其他管理等系统维护工作。
对这两类行为者都要建模,以保证描述系统完整的功能特性。
(5)行为者可细分为主动行为者和被动行为者(www.xing528.com)
①主动行为者:启动一个或多个用例。例如,图4-5所示的自动柜员机(ATM)系统用例图中,在自动柜员机(ATM)系统中的银行客户所启动的用例有查询余额,取款、存款、转账等,所以银行客户是一个主动行为者。
②被动行为者:从不启动用例,只参与一个或多个用例。例如,用户使用QQ、微博等客户端软件,启动软件后,在用户不使用软件的情况下,软件的后台进程会自动为用户推送新的消息。
2)确定行为者
当划分好系统范围并明确系统边界后,在获取用例前首先要确定与系统交互的外部事物,从而准确确定行为者。可以通过回答以下问题来寻找系统的行为者:
(1)谁将使用该系统的主要功能?
(2)谁需要系统的支持以完成日常工作任务?
(3)谁负责维护、管理该系统并保持系统正常工作状态?
(4)谁改变了系统的数据信息?
(5)谁从系统获取数据信息?
(6)该系统需要与哪些外部系统交互?
(7)系统需要处理哪些硬件设备?
(8)谁(或者哪些外部系统)对该系统产生的结果感兴趣?
在对行为者建模的过程中,必须牢记以下几点:
(1)行为者对于系统而言总是外部的,因此它们可以处于人的控制之外。
(2)行为者可以直接或间接地同系统交互,或使用系统提供的服务以完成某件事务。
(3)行为者表示人和事物与系统发生交互时所扮演的角色,而不是特点的人或者特定的事物。
(4)一个人或事物在与系统发生交互时,可以同时或不同时扮演多个角色。
(5)每一个行为者需要一个与其业务一致的名字,在建模中不推荐使用类似于“新行为者”这样模糊无意义的名字。
(6)对每一个行为者应该有简短的描述,从业务角度描述行为者是什么。
(7)和类一样,行为者可以具有表示行为者的属性和可以接受的事件,但使用得不频繁。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。