进入时序图?

时间:2019-02-06 09:53:22

标签: uml sequence-diagram

如何在顺序图中显示goto语句。

例如,在下图中,一旦“睡眠到保持期”到期,我想控制权回到“ is_item_inventory_onhold_state(item_id)”语句。如何显示这是一个图?

enter image description here

我正在使用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 

3 个答案:

答案 0 :(得分:2)

goto本身未显示。您只需要显示发送了什么操作即可。您可以在转到位置上添加注释。但是,我认为不应以任何方式鼓励使用gotos。相反,它可能应该进行一些异常处理。

根据您的评论,您可以使用break片段,如下所示:

enter image description here

它将中断外部循环,因此在is_item...之后重复sleep...

注意根据@AxelScheithauer的评论,break只会留下封闭的片段。但是,我认为这是一个规范缺陷。中断通常是与循环控制流一起使用的(加上案例控制流;但是UML对此没有片段)。最好命名break片段,这样很明显会影响外循环片段(如我编辑的图片所示)。

答案 1 :(得分:1)

您不需要'goto',就像我们很长一段时间以来都不会在语言中使用它们一样

添加第二个循环,然后结合片段“ break”出去

答案 2 :(得分:1)

顺序图中不支持Goto(有充分的理由)。请改用loopbreak运算符的组合。参见下图: enter image description here sequencediagram.org/Item Executor

sequencediagram.org/Item Executor (with Execution Specifications)

此图中的一些注释

  • break-fragment留下了立即封闭的片段。因此,它必须直接包含在loop-fragment中。如果它在alt片段中,则仅保留该片段。
  • altopt片段都不使用guard。通过出现带有特定reply的{​​{1}}消息来选择发生的片段。如果要使用防护,则必须将返回值分配给局部变量。然后,这会在alt片段上方发生(请参见下图)。
  • 返回值显示在前面的冒号中。消息名称会在此名称之前,但是很明显可以将其省略(如此处所示)。
  • 仅显示
  • return-value(有时称为“激活”),它们有助于提高可读性。与普遍的看法相反,它们不是强制性的。
  • UML不知道每个循环。因此,我添加了迭代器操作。术语“对于列表中的每个项目”不是execution specifications条件。如果要避免拼写出迭代器,则可以在循环中使用-语义自由的guard。为此,错误地使用布尔值后卫是没有意义的。如果需要正式定义,则必须添加自己的构造型comment
  • 我假设«for each loop»ItemExecutor是类名。他们需要一个冒号来区分角色名称。当然,如果角色名和类名相同,则您的图表可以是正确的。
  • “确认”消息只是ItemStateService消息的reply消息。这样,它将带有相同的名称(此处省略)。
  • 在具有执行规范的版本中,绘图工具不允许execute的结尾与execution specifications的{​​{1}}一致,这是正确的。 / li>

带有send eventsreply-messages片段的警戒的示例(摘录): with guards sequencediagram.org/Item Executor (with Execution Specifications and guards)