《面向对象分析与设计》一3.2 参与者

3.2 参与者

对于每个有意义的系统,都存在着一些与系统打交道的事物,这些事物为了某些目的而与系统进行交互。这些事物还能预料到系统的运行方式,为达到某种目的事物间也可能要通过系统进行协作。

3.2.1 概念与表示法

一个参与者(actor)定义了一组在功能上密切相关的角色,当一个事物与系统交互时,该事物要扮演这样的角色。
例如,超市里的每个具体的收款员的首要职责为收款,他还要负责检验购物篮中商品的数量以及验证顾客的信誉卡以给予优惠。这样,每个收款员就要扮演三种在功能上紧密相关的角色。把这组角色定义为一个参与者,对其命名为“收款员”。该参与者的一个实例就是扮演上述角色的一个具体人。这个具体的人,可能还扮演其他参与者(例如“商品供货员”)的角色,这说明一个系统的用户可以扮演不同的参与者中的角色。此外,一个参与者也可以由一组用户来扮演,如参与者“收款员”往往代表着一组具体的人。
一个参与者可以发出请求,要求系统提供服务;系统以某种方式对其做出响应,把响应的结果返回给该参与者或者给其他的参与者。系统也可以向参与者发出请求,参与者对此做出响应。为了完成某项功能,一组参与者和系统之间请求与响应的对话可能是复杂的。
尽管在模型中使用了参与者,但参与者实际上并不是系统的一部分,它们位于系统之外,是在系统之外的与系统进行交互的任何事物。
参与者的标准图符是一个“人型符号”,参与者的名字放在图符的下方,如图32所示。
如果一些参与者与系统的交互有一部分是相同的,这时不是显式地将相同的交互与每一个参与者相关联,而是引入包含这些共同的交互的一般参与者,并对这些参与者进行特殊化处理,特殊参与者从一般参与者中继承执行这些交互的能力,见图33。

《面向对象分析与设计》一3.2 参与者

从特殊参与者到一般参与者之间的继承关系,意味着特殊参与者的实例能够同与一般参与者的实例进行交互的用况实例进行通信。

3.2.2 识别参与者

上节讲到,参与者是在系统之外与系统进行交互的任何事物。具体地讲,参与者分为三类:人员、外部系统或设备。下面讲述如何从这三个方面识别参与者。
(1)人员
从直接使用系统的人员中发现参与者。这里强调的是直接使用,而不是间接使用。这样的人可能要启动、维护和关闭系统,更多的可能是这样的人要从系统中获得什么信息或向系统提供什么信息。
特定的人在系统中可扮演不同参与者中的角色。例如,添加数据、使用数据及产生分析报告的那个人就扮演了三种不同的角色,这些角色可能要分别属于三种不同的参与者。再如,对于使用银行系统的一个具体的人来讲,他扮演的角色可为前台职员、经理或顾客等。
(2)外部系统
所有与本系统交互的外部系统都是参与者。相对于当前正在开发的系统而言,外部系统可以是其他子系统、下级系统或上级系统,即任何与它进行协作的系统,但对这样的系统的开发并不是开发本系统的人员的责任,无论它们是已存在的,还是正在开发的。
要指出的是,如果一个大系统在任务分解时被划分成几个子系统,则每个子系统的开发者都把与之相关的其他子系统看作是外部系统,子系统的边界以内只包括它的开发者所负责的那部分功能。
(3)设备
识别如下的所有与系统交互的设备:这样的设备与系统相连,向系统提供外界信息;也可能系统要向设备提供信息,设备在系统的控制下运行。这样的设备是系统的参与者。通常,像监视器、键盘、鼠标这样的标准用户接口设备(操作系统管理它们)不包括在内,而像外部传感器和受控马达这样的与系统交互的设备很可能是参与者,因为所开发的系统往往要直接对它们进行处理。
下面是一些识别与组织参与者的指导策略:
1)首先将精力集中于启动系统的参与者。这些是最容易识别的参与者,从中可以找出其他参与者。
2)从用户的角度考虑怎样使用这个系统,从设备和外部系统的角度考虑它们如何与系统交互。
3)对识别出来的参与者,记录它们的责任。
4)通过识别继承关系,组织参与者。
5) 若有必要,在参与者间建立继承关系。