如何在迭代扩展区域中表示中断?

时间:2015-07-06 14:15:16

标签: uml diagram activity-diagram

我想在UML 2.4.1中表示迭代扩展版本的中断。

我试试这个:

使用退出箭头指向该区域:

Break in an iterative expansion region with exit arrow

没有退出箭头:

Break in an iterative expansion region without exit arrow

结束流程:

enter image description here

正确的惯例是什么?

2 个答案:

答案 0 :(得分:1)

没有惯例。这完全取决于你想说什么。

第一个图表不正确,因为Add不会导致任何结束。你需要将它连接到任何合理的地方,但不要让它“卡在空中”。

第二个甚至更多,原因是两倍。

第三个与第一个相同。您可以使用Flow Final而不是将控制转移到扩展节点。如果你有许多这样的临时出口的复杂流程,你会这样做。对于这里的简单案例,你不需要它。

请注意,也有可能在区域内使用Initial。如果您有多个输入并希望它们从内部的同一点开始,您将使用它。

P.S。:我在主演图中的错误时忽略了你的问题。转换中的保护可以显示中断条件,该保护通向Flow Final或连接到输出引脚。

或者,要中断处理您传递的所有集合元素,您可以执行以下操作:

Expansion with break

这会将抢先循环视为例外。

我还要说一个简单的注释就足够了,除非你想从模型中生成代码。

在Superstructures中有点失望我发现了这个:

  

当ExpansionRegion完成所有扩展执行时,它会在从这些节点传出的任何ActivityEdges上的输出ExpansionNodes上提供输出集合(在执行ExpansionRegion期间不提供它们)。如果ExpansionRegion中包含一个ActivityFinalNode,那么,如果ActivityFinalNode在任何扩展执行中接受一个令牌,则所有当前正在进行的扩展执行都将终止,并且ExpansionRegion将作为一个整体完成其执行。在这种情况下,输出集合仍然从输出ExpansionNodes提供,尽管集合可能只是部分填充。

这证实了我在P.S。

中的第一个陈述

答案 1 :(得分:0)

查看OMG UML spec

第一&第二图:
请参阅 14.3.5示例一节,根据我的理解,显示没有退出状态的状态是包含它的子机/复合状态的终端状态。

第三图: 你说中止/终止vs最终状态。可能会发生不同的事情。请参阅第338页。我认为您的意思是最终状态,而不是错误,因此请避免使用X圈。不允许正常执行完成。

  

" terminate - 输入终止Pseudostate意味着   StateMachine的执行立即终止。该   StateMachine不退出任何国家,也不退出任何国家   行为。任何执行的doActivity行为都是自动执行的   中止。输入终止Pseudostate相当于调用a   。DestroyObjectAction"

摘要:这是主观的,但行可以附加行为并且可以命名。如果我们在规范中使用ATM示例(336-340)pg,它们已经存在许多UML版本,那么我会说离开它,如果需要将它连接到边缘/出口点,或者最后的状态圆与填充复合状态<<iterative>>内的内圆。现在我不确定你使用的是什么工具,但这可能值得考虑。不确定更广泛的背景是什么。