18.1.3 语义

Use Cases and Actors

一个用例可以应用于任意数目的主题。当用例应用到一个主题时,它指定了主题执行的一组行为,该行为可以产生一个对主题的执行者或其它涉众(stakeholders)带来价值的可观测结果。

用例是一种BehavioredClassifier,它代表了对所提供的一组行为的声明。每个用例都定义了一个主题和1个或多个执行者协作执行的一些行为。用例定义主题所提供的行为不同引用它的内部结构。这些行为,包括执行者和主题之间的交互,可能会导致主题状态的变化,以及与它的环境进行通信。用例可以包括对于基本行为的可能变化,包括异常行为和错误处理。

用例的主题可以是一个系统或其它具有行为的元素,例如构件(Component)或类。每个用例指定了主题所提供给它的用户的一个有用功能。为了用例的完成,这个功能必须总是完整的。如果在它执行后,主题处于一个没有进一步输入或期望的actions的状态,并且该用例可以被再次实例化,或者进入一个错误状态,那么就认为它是完整的。

用例既可以用做主题上的(外部)需求规约,又可以用做主题提供的功能规约。而且,用例还可以通过定义执行者如何与主题进行交互来声明主题施加给它的环境的需求,从而使它可以执行它的服务。

一个用例的行为可以由一组行为(通过它的ownedBehavior联系)来描述,例如交互、活动、状态机,以及前置条件、后置条件和自然语言。它还可以间接地通过使用用例和它的执行者的一个协作(Collaboration) 来描述。使用哪种技术取决于用例行为的特性和目标读者。这些描述可以结合起来。使用一个关联的状态机的用例示例展示在图18.12。

UseCases may have associated Actors, which describe how an instance of the Classifier realizing the UseCase and a user playing one of the roles of the Actor interact. Two UseCases specifying the same subject cannot be associated as each of them individually describes a complete usage of the subject.(really?)

当一个用例所关联的一个执行者的multiplicity大于1时,这意味着多个执行者实例参与到该用例中。多个执行者如何参与到用例中取决与特定的场景,本规范对此没有定义。举个例子,一个特定的用例可能需要两个独立的执行者同时(并发)行动(例如,发射一枚核弹)或者它需要两个执行者互补和相继的行动(例如,一个执行者启动而另一个停止)。

用例可以被一个包或分类符所拥有。尽管所属的分类符通常代表用例所应用到的主题,但并不总是这种情况,比如图18.10和18.11的例子所展示的。

执行者对与它相关的用例的主题进行交互的一个实体所处于的一类角色进行建模。执行者所代表的角色可以由人、外部硬件或其它系统来充当。

注意. 一个执行者并不一定代表一个特定的物理实体而是一个特定的实体类型,它与相关的用例的规约有关。因此,一个物理实例可以充当多个不同执行者的角色,并且,通常一个执行者可以由多个不同实例来扮演。

注意. 这里“角色”以非正式的方式被使用,也不暗示在本规范其它地方发现的该术语的任意技术性定义。

当一个执行者与一个multiplicity大于1的用例关联时,这意味着该执行者可以参与到多个该用例类型的用例中。这种多参与性的特定性质取决于当前的情况,本规范中没有定义。因此,一个执行者可以平行地(并发地)或者在不同的时间点上实例化多个用例。

Extends

Extend是一个从扩展用例(extension)到被扩展用例(extendedCase)的关系,它指定了在扩展用例中定义的行为如何以及何时插入到被扩展的用例行为中去。扩展发生在被扩展用例定义的一个或多个扩展点上。

当一个或多个用例中定义的行为应该被添加一些额外的行为,通常是有条件的,那么就可以使用扩展。

被扩展的用例是独立于扩展用例定义的,并且独自是有意义的。另一方面,扩展用例定义的行为通常独自是没有意义的。扩展用例在特定的条件下定义了一些模块化的行为可以增强被扩展用例的执行。

注意. 相同的扩展用例可以扩展多个用例。而且,一个扩展用例也可以被扩展。

扩展是一种有向关系,source是扩展用例,target是被扩展的用例。它也是一种NamedElement,因此它可以在所属用例上下文中有一个名字。扩展关系自身由扩展extension)所拥有。

扩展点是用例中的行为可以被一个扩展关系所扩展的地方。每个扩展点在用例中都有一个唯一的名字。

扩展点的位置以何种方式定义是有意未规定的。这是因为用例可能以多种形式规定,例如自然语言、表格、树等等。extensionLocation概念背后的直觉最好通过一个文本描述的用例示例来解释:通常,一个带有扩展点的用例包含一组细粒度的行为片段描述,它们通常顺序执行。用例文本的这种片段结构使得可以在原始片段之间的适当插入点(扩展点)合并补充的行为片段描述来扩展原始行为描述。因此,一个扩展(extending)用例通常包含一个或多个要插入到被扩展用例的适当位置的行为片段描述。因此,extensionLocation是一个用例中所有不同扩展点的一个规约,规定了补充的行为要合并的位置。

如果扩展的condition缺失或者在到达第一个扩展点的时候它的计算值为真,那么扩展用例的所有适当的行为片段也将会被执行。如果condition为假,这就不会发生。独立的片段随着执行到达相应的被扩展用例的扩展点而执行。一旦一个给定的片段完成,被扩展用例中扩展点之后的行为继续执行。注意尽管涉及到多个用例,但只有一个单一的行为执行。

Includes

Include是两个用例间的一个直接关系,指示被包含的用例(addition) 的行为插入到包含用例(includingCase_)的行为中。它也是一种NamedElement因此在它的宿主用例(includingCase__)上下文内它有一个名称。包含用例可能依赖执行被包含用例所产生的变化。被包含的用例对于包含用例的行为必须可用以使得它可以被完整描述。

包含关系适用于两个或更多用例的行为有公共部分的时候。把公共部分抽取为一个单独的用例,然后包含到所有以它为公共部分的基础用例中去。由于包含关系的主要目的是复用公共部分,基础用例中剩下的通常并不完整而是依赖被包含的部分才能变得有意义。这可以从该关系的方向反映出来,它指示基础用例依赖被包含的用例而反过来则不成立。

在包含用例的执行重新开始之前被包含用例的所有行为都在一个地方执行完毕。

包含关系允许用例的层级组合以及用例的复用。

results matching ""

    No results matching ""