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不是在内嵌层重复。每层的结构都是规定自身在所封闭的上下文内的迭代。