时序图:背景循环

Sequence Diagram: Background Loop

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

对于文档,我需要创建一个描述过程的 UML 序列图(使用 plantuml)。我现在的麻烦是如何正确建模。 (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 更明确。但是这两个选项中的任何一个都正确地表示了手头的过程吗?

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

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

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