我正在研究与另一个系统(C)通信的系统(B),并在终端(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更明确。但是这两个选项中的任何一个都能正确表示手头的过程吗?
答案 0 :(得分:1)
他们可能都是正确的。 SD显示流程的具体视图。由于时间是线性的(忘记这里的那些量子跳跃)并且你没有真正拥有并行进程,你将有一个对象一次发送或接收消息而没有任何并行。它取决于您所代表的序列。可能你需要不止一个序列才能给出一半清晰的画面。
要显示真正的并行进程,您需要两个时间线(例如,如果您有两个并行处理器和两个并行运行相同进程的分支)。如果需要,您可以添加时序约束并显示某些事物(几乎)是平行的。
我认为添加状态图是一个好主意,该状态图显示了如何支持转换以及谁必须等待的时间和持续时间。