我想在UML 2.4.1中表示迭代扩展版本的中断。
我试试这个:
使用退出箭头指向该区域:
没有退出箭头:
结束流程:
正确的惯例是什么?
答案 0 :(得分:1)
没有惯例。这完全取决于你想说什么。
第一个图表不正确,因为Add
不会导致任何结束。你需要将它连接到任何合理的地方,但不要让它“卡在空中”。
第二个甚至更多,原因是两倍。
第三个与第一个相同。您可以使用Flow Final
而不是将控制转移到扩展节点。如果你有许多这样的临时出口的复杂流程,你会这样做。对于这里的简单案例,你不需要它。
请注意,也有可能在区域内使用Initial
。如果您有多个输入并希望它们从内部的同一点开始,您将使用它。
P.S。:我在主演图中的错误时忽略了你的问题。转换中的保护可以显示中断条件,该保护通向Flow Final
或连接到输出引脚。
或者,要中断处理您传递的所有集合元素,您可以执行以下操作:
这会将抢先循环视为例外。
我还要说一个简单的注释就足够了,除非你想从模型中生成代码。
在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>>
内的内圆。现在我不确定你使用的是什么工具,但这可能值得考虑。不确定更广泛的背景是什么。