17.6.4 表示法

交互操作数

交互操作数被表示为水平虚线。交互操作数一起构成联合片段。

在序列图的一个交互操作数内,交互片段的次序由最高的垂直位置来给定。

交互约束

交互约束显示在覆盖生命线的方括号内,位置要在第一个事件出现之上,在所属交互或交互操作数之内。

<interactionconstraint> ::= ‘[’ (<Boolean-expression> | ‘else’) ‘]’

当交互约束被省略,那么认为其为真。

联合片段

序列图中联合片段的图示是一个实线矩形外框。操作符显示在该矩形框左上角的五边形内。

五边形描述符内可以显示多个操作符。这是一种表示内嵌联合片段的简洁表示法。这意味着五边形描述符中的sd strict与两个内嵌的联合片段(最外面的是sd,里面的是strict)是相同的。

联合片段的操作数通过用水平虚线对联合片段的图形化区域进行划分得到相应的操作数。

ConsierIgnoreFragment

ConsierIgnoreFragment图示与所有联合片段的相同,使用consider或ignore来指示操作符。操作数后的消息列表按如下形式列在花括号内:

(‘ignore’ | ‘consider’) ‘{’ <message-name> [‘,’ <message-name>]* ‘}’

注意ignore和consider可以与其它类型的操作在一个矩形内联合使用(作为内嵌矩形的简洁表示),例如assert consider {msgA, msgB}。

Continuation

Continuations与状态的表示符号相同,但它可能覆盖多于一个生命线。

Continuations也可以出现在交互概览图的流线上。

交互片段中一个单独的continuation被认为在所属封闭交互片段的末尾。

交互操作符种类

交互操作符种类的值以文本的形式表示在联合片段框的左上角的小格间。对于一些交互操作符的值有特殊的图示,如下定义。

Strict交互操作符

图形上,这意味着所包含片段的垂直坐标在整个联合片段的范围内都是重要的,而不仅仅在一条生命线的。出现规约的垂直位置由相应点的的垂直位置给定。其它交互片段的垂直位置由它的矩形的最高垂直位置给定。

Ignore/Consider交互操作符

参见17.6.4(ConsiderIgnoreFragment)。

循环交互操作符

循环操作数的文本语法:

‘loop’[‘(’ <minint> [‘,’ <maxint> ] ‘)’]

<minint> ::= 非负自然数

<maxint> ::= 非负自然数(大于等于<minint>)| ‘*’

星号意味着无限。如果只有<minint>,这意味着<minint> = <maxint> = <integer>。如果只有‘loop’,那意味着该循环为0..*。

并行交互操作符

遵循本规范的工具在一个单一生命线内可以使用一个“coregion area”的简洁图示。

“coregion”是并行联合操作符的简化图示,用于一个生命线上的事件出现(或其它内嵌片段)是无关紧要的场景。这意味着在一条生命线的一个给定“coregion”区域,所有被直接包含的片段都被认为是一个并行联合片段的独立操作数。参见图17.23中的示例。

17.6.5 示例

交互操作数的示例参见图17.14。

交互约束的示例参见图17.14和图17.27。

带有不同交互操作符的联合片段示例参见图17.12、图17.13和图17.14。

图17.12 Critical Region

图17.12中的例子展示了911电话的处理必须是连续的。接线员必须确保在做其它事情之前转发911电话。然而普通电话可以自由交错。

图17.13 Loop CombinedFragment

图17.14 CombinedFragment

图17.15展示了一个带有continuation的例子。

图17.15 Continuation

图17.15中的两个图合起来与图17.16是等价的。

图17.16 Continuation interpretation

图17.17展示了ConsiderIgnoreFragments的一个例子。

图17.17 Ignore, consider, assert with StateInvariants

在图17.17中,我们有一个交互M,它考虑不是tr的消息类型。这意味着如果这个交互用于规定一个现有系统的检查,如果运行这个系统时出现了tr,那么这些消息将会被这个规约忽略。当然tr会由运行系统以某种方式被处理,但它们是如何被处理的与我们这里所展示的交互毫不相干。

以状态形式给出的状态不变量“mystate”将会在运行时“mystate”之后任何发生在Y上的事件出现之前直接计算。这可能是assert片段内规定的reception q,或者它有可能是一个被规定为无关紧要的事件。

assert片段内嵌在一个consider片段内意味着我们希望一旦一个v发生在这,那么一个q消息就会出现。除了v、w和q之前的其它消息的出现都会在一个检测场景中被忽略。因此v之后w消息的出现是一个无效的轨迹。【译者注:图中好像没有w消息】

花括号中给出的状态不变量将会在其之后发生在Y上的下一个事件出现之前被计算。

下面是consider和ignore交互操作符其它的操作符示例:

  • consider {m, s}:只有ms消息被认为是重要的。
  • ignore {q, r}:q和r消息被认为是不重要的。
  • ignore和consider操作通常与其它操作符一块儿使用。例如“assert consider {m, s}”。

results matching ""

    No results matching ""