全部博文(584)
分类: 嵌入式
2011-02-20 15:47:11
角色是一个群体概念,代表的是一类能使用某个功能的人或事,角色不是指某个个体。比如,在自动售货系统中,系统有售货、供货、提取销售款等功能,启
动售货功能的是人,那么人就是角色,如果再把人具体化,则该人可以是张三(张三买矿泉水),也可以是李四(李四买可乐),但是张三和李四这些具体的个体对
象不能称作角色。事实上,一个具体的人(比如,张三)在系统中可以具有多种不同的角色。比如上述的自动售货系统中张三既可以为售货机添加新物品(执行供
货),也可以将售货机中的钱取走(执行提取销售款)。通常系统会对角色的行为有所约束,使其不能随便执行某些功能。比如,可以约束供货的人不能同时又是提
取销售款的人,以免有舞弊行为。角色都有名字,它的名字反映了该角色的身份和行为(比如,顾客),注意,不能将角色的名字表示成角色的某个实例(比如张
三),也不能表示成角色所需完成的功能(比如售货)。
角色与系统进行通信的收、发消息机制,与面向对象编程中的消息机制很像。角色是启动用例的前
提条件,又称为刺激物(stimulus)。角色先发送消息给用例,初始化用例后用例开始执行,在执行过程中,该用例也可能向一个或多个角色发送消息(可
以是其它角色,也可以是初始化该用例的角色)。
角色可以分成几个等级。主要角色(primary
actor)指的是执行系统主要功能的角色,比如在保险系统中主要角色是能够行使注册和管理保险大权的角色,次要角色(secondary actor)
指的是使用系统的次要功能的角色,次要功能是指一般完成维护系统的功能(比如,管理数据库、通信、备份等)。比如在保险系统中能够检索该公司的一些基本统
计数据的管理者或会员都属次要角色。将角色分级的主要目的是,保证把系统的所有功能表示出来。而主要功能是使用系统的角色最关心的部分。
角色也可以分成主动角色和被动角色。主动角色可以初始化用例,而被动角色则不行,仅仅参与一个或多个用例,在某个时刻与用例通信。
3.3.1 发现角色
通过回答下列的一些问题可以帮助建模者发现角色:
在寻找系统用户的时候,不要把目光只停留在使用计算机的人员身上,直接或间接地
与系统交互或从系统中获取信息的任何人和任何事都是用户。由于这里讨论的用例模型用于模型化一个商务(business)活动,所以角色通常指的是商务中的顾客但是你要在头脑中保持清醒的认识——顾客的含义并不是计算机术语中的用户。
在完成了角色的识别工作之后,建模者就可以建立使用系统或与系统交互的实体(entities)了,即可以从角色的角度出发,考虑角色需要系统完成什么样的功能,从而建立角色需要的用例。
3.3.2 UML中的角色
UML 中的角色是具有版类《角色》的类,该类的名字用角色的名字命名,用以反映角色的行为。角色类包含有属性、行为和描述角色的文档性质。UML 中用一个小人形图
形表示角色类,小人的下方书写角色名字。如图3-2 所示。图3-2 左侧的矩形是具有版类《角色》的类(即角色类)的另一种图示方式,右侧的标准图示图标一般用在用例图中。
3.3.3 角色之间的关系
由于角色是类,所以它拥有与类相同的关系描述(关于类中的关系的描述参见4.3 节)。在用例图中,只用通用化关系描述若干个角色之间的行为。
通用化关系的含义是:把某些角色的共同行为(原角色中的部分行为),抽取出来表示成通用行为,且把它们描述成为超类(superclass)。
这样,在定义某一具体的角色时,仅仅把具体的角色所特有的那部分行为定义一下就行了,具体角色的通用行为则不必重新定义,只要继承超类中相应的行为 即可。角色之间的通用化关系用带空心三角形(作为箭头)的直线表示,箭头端指向超类。图3-3 示例的是保险业务中部分角色之间的关系,其中客户类就是超类,它描述了客户的基本行为(比如,选择险种),由于客户申请保险业务的方式可以不同,故又可以 把客户具体分为二类:一类是用电话委托方式申请(用电话申请客户类表示),另一类则是亲自登门办理(用个人登记客户类表示)。显然,电话申请客户类与个人 登记客户类的基本行为与客户类一致,这两个类的差别仅仅在于申请的方式不同,于是,在定义这两个类的行为时,基本行为可以从客户类中继承得到(从而不必重 复定义),与客户类不同的行为则定义在各自的角色类中。