17.9.1 通信图表示法

图形节点

表17.3展示了通信图节点。

表17.3 Graphic Nodes Included in Communication Diagrams

节点类型 图示 参考
框(用于交互) 该图示表示了围绕通信图的一个矩形框,名字显示在左上角的格间内。参见17.2.4(交互)
生命线 参见17.3.4(生命线)

图形路径

表17.4给出了通信图的通信路径。

表17.4 Graphic Paths Included in Communications Diagrams

类型 图示 参考
消息 参见17.4.4(消息)和下面的序列表达式。这里的箭头指示通信的方向。

序列表达式

序列表达式由点号分隔的序列项和一个冒号(‘:’)组成。

sequence-term ‘.’ ... ‘:’

么个项代表了总体交互中内嵌的过程层级。如果所有的控制都是并发的,那么没有内嵌。每个序列项有如下语法:

[integer | name][recurrence]

integer代表在消息在上一层过程调用内的顺序号。integer上相差1的消息表明在对应的内嵌层上消息是顺序相连的。例子:在激活3.1内消息3.1.4在消息3.1.3之后。name代表了一个并发的控制线程。在最终名称中不同的消息在对应的内嵌层上是并发的。例子:消息3.1a和消息3.1b在激活3.1内是并发的。在(特定)内嵌深度上所有的控制线程是相等的。

recurrent代表条件或迭代执行。这代表了根据涉及的条件可能执行零条或多条消息。选项为:

‘*’ ‘[’ iteration-clause ‘]’ 是个迭代
‘[’ guard ‘]’ 是个分支

迭代代表了给定内嵌深度上的一个消息序列。迭代声明可以忽略(此时迭代条件是未指明的)。iteration-clause可以用伪代码或一门实际语言来表述,UML没有规定它的形式。一个实例可能是:*[i := 1..n]。

guard代表了为真条件下要执行的一条消息。guard可以用伪代码或一门实际语言来表述,UML没有规定它的形式。一个实例可能是:[x > y]。

注意分支的表述与不带星的迭代是相同的。可以把一个迭代想象成只执行一次。

迭代假定消息是以顺序执行的。还有一种让它们并发执行的可能,此时的表示法是在星号好跟一个双竖线(用于并行):*||。

注意在一个内嵌控制结构中,recurrence不是在内嵌层重复。每层的结构都是规定自身在所封闭的上下文内的迭代。

results matching ""

    No results matching ""