【问题标题】:How represent a break in an iterative expansion region?如何表示迭代扩展区域的中断?
【发布时间】:2015-07-06 14:15:16
【问题描述】:

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

我试试这个:

带退出箭头的区域:

没有退出箭头:

结束流程:

什么是正确的约定?

【问题讨论】:

    标签: uml diagram activity-diagram


    【解决方案1】:

    没有任何约定。这完全取决于你想说什么。

    第一张图是不正确的,因为Add 不会导致任何结束。您需要将它连接到任何合理的地方,但不要让它“悬空”。

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

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

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

    P.S.:我在查看图表中的错误时忽略了您的问题。中断条件可以通过转换中的守卫来显示,该转换导致Flow Final 或连接到输出引脚。

    或者,要中断处理您通过的所有集合元素,您可以这样做:

    这将抢占式循环视为异常。

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

    在上层建筑中我发现了一点:

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

    这证实了我在 P.S. 的第一句话

    【讨论】:

    • 异常的使用可能是一个争论,我们是使用异常来处理真正的异常(真正的问题或意外事件)还是使用异常来管理逻辑?这是一个问题,通常在我的公司里,我们只在遇到麻烦时才使用异常。
    • @granier 你这么说:这值得商榷。像很多事情一样,您可以同意有关如何使用它的特定领域约定。在查看不同的语言时,您会发现在这两种情况下也使用了异常。有些人认为它们是处理某些事情的“常用方法”,而在其他语言中,你必须在使用它之前对圣经发誓。
    【解决方案2】:

    看着OMG UML spec

    第一张和第二张图:
    请参阅14.3.5 示例部分,据我了解,没有退出状态的状态是包含它的子机/复合状态的终端状态。

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

    "terminate – 进入终止伪状态意味着 StateMachine 的执行立即终止。这 StateMachine 不退出任何状态,也不执行任何退出 行为。任何正在执行的 doActivity 行为都会自动 中止。进入一个终止伪状态相当于调用一个 DestroyObjectAction。”

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

    【讨论】:

    • OP 的问题涉及活动图,而不是状态机。
    • 我不确定第 14.3.5 节是否好,它涉及状态机,问题似乎与活动图有关
    猜你喜欢
    • 2018-05-03
    • 2019-02-15
    • 1970-01-01
    • 2020-01-19
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    相关资源
    最近更新 更多