如何在顺序图中显示goto语句。
例如,在下图中,一旦“睡眠到保持期”到期,我想控制权回到“ is_item_inventory_onhold_state(item_id)”语句。如何显示这是一个图?
我正在使用https://sequencediagram.org/创建这些图。
为生成上面的图而编写的代码:
title Item Executor
loop for each item in a list
Client->ItemExecutor: execute(item)
ItemExecutor -> ItemStateService:is_item_inventory_onhold_state(item_id)
alt True - Item state is on hold
ItemStateService -->ItemExecutor: True
ItemExecutor ->ItemExecutor: sleep till hold period
goto ItemExecutor -> ItemStateService:is_item_inventory_onhold_state(item_id)
else False - Item is not in Held State
ItemStateService -->ItemExecutor:False
ItemExecutor ->ItemExecutor: do_something()
end
ItemExecutor ->Client : Acknowledge
end
答案 0 :(得分:2)
goto本身未显示。您只需要显示发送了什么操作即可。您可以在转到位置上添加注释。但是,我认为不应以任何方式鼓励使用gotos。相反,它可能应该进行一些异常处理。
根据您的评论,您可以使用break
片段,如下所示:
它将中断外部循环,因此在is_item...
之后重复sleep...
。
注意根据@AxelScheithauer的评论,break
只会留下封闭的片段。但是,我认为这是一个规范缺陷。中断通常是与循环控制流一起使用的(加上案例控制流;但是UML对此没有片段)。最好命名break
片段,这样很明显会影响外循环片段(如我编辑的图片所示)。
答案 1 :(得分:1)
您不需要'goto',就像我们很长一段时间以来都不会在语言中使用它们一样
添加第二个循环,然后结合片段“ break”出去
答案 2 :(得分:1)
顺序图中不支持Goto(有充分的理由)。请改用loop
和break
运算符的组合。参见下图:
sequencediagram.org/Item Executor
sequencediagram.org/Item Executor (with Execution Specifications)
此图中的一些注释
break-fragment
留下了立即封闭的片段。因此,它必须直接包含在loop-fragment
中。如果它在alt片段中,则仅保留该片段。alt
和opt
片段都不使用guard
。通过出现带有特定reply
的{{1}}消息来选择发生的片段。如果要使用防护,则必须将返回值分配给局部变量。然后,这会在alt片段上方发生(请参见下图)。return-value
(有时称为“激活”),它们有助于提高可读性。与普遍的看法相反,它们不是强制性的。execution specifications
条件。如果要避免拼写出迭代器,则可以在循环中使用-语义自由的guard
。为此,错误地使用布尔值后卫是没有意义的。如果需要正式定义,则必须添加自己的构造型comment
«for each loop»
和ItemExecutor
是类名。他们需要一个冒号来区分角色名称。当然,如果角色名和类名相同,则您的图表可以是正确的。ItemStateService
消息的reply
消息。这样,它将带有相同的名称(此处省略)。execute
的结尾与execution specifications
的{{1}}一致,这是正确的。 / li>
带有send events
和reply-messages
片段的警戒的示例(摘录):
sequencediagram.org/Item Executor (with Execution Specifications and guards)