2

我正在开发一个系统 (B),该系统与另一个系统 (C) 通信并在终端 (A) 的持续循环中显示计算值。(A) 要求 (B) 报告一个变量x。(B) 这样做没有阻塞,因此 (B) 可以继续处理 (C)。稍后,(A) 要求 (B) 也报告变量y,这将由 (B) 以相同的方式提供服务。

对于文档,我需要创建一个plantuml描述该过程的 UML 序列图(使用 )。我现在的问题是如何正确建模。(B) 和 (C) 之间的通信继续进行,即使循环还没有结束。但是我该如何正确建模呢?

这是选项 1,仅在循环中使用异步回复:

@startuml
A ->> B: report x
loop
    B -->> A: x
end loop
B -> C: foo
C --> B: bar
A ->> B: report y
loop
    B -->> A: y
end loop
B -> C: qux
C --> B: baz
@enduml

在此处输入图像描述

选项 2 适用于在流程后期变为真的条件:

@startuml
A ->> B: report x
loop until reporting x ends
    B -->> A: x
end loop
B -> C: foo
C --> B: bar
A ->> B: report y
loop until reporting y ends
    B -->> A: y
end loop
B -> C: qux
C --> B: baz
B -->> A: end reporting x
B -->> A: end reporting y
@enduml

在此处输入图像描述

选项 2 更明确。但是这两个选项中的任何一个是否正确地表示了手头的过程?

4

1 回答 1

2

他们可能都是正确的。SD 显示过程的具体视图。由于时间是线性的(忘记这里的那些量子飞跃)并且您实际上并没有并行过程,因此您将有一个对象一次发送或接收消息,而没有任何并行。你代表哪个序列取决于你。可能您需要多个序列才能提供一半清晰的图像。

要显示真正的并行进程,您需要两条时间线(例如,如果您有两个并行处理器和同一进程的两个分支并行运行)。如果需要,您可以添加时序约束并显示某些事情(几乎)是并行的。

我想添加一个状态图是一个好主意,该图显示如何支持转换以及谁必须等待何时以及等待多长时间。

于 2018-04-12T20:35:41.817 回答