【问题标题】:Is a state without a direct transition allowed in UML state diagram?UML 状态图中是否允许没有直接转换的状态?
【发布时间】:2018-12-13 14:46:11
【问题描述】:

在 UML 状态图 (SD) 中是否允许没有直接转换的状态,如下图用 StarUML 绘制的?

State1 不直接参与任何转换,所以我怀疑这在 UML 中是否允许/可取。我认为在我的应用程序中,我实际上是在单个 SD 中对多个对象进行建模。

【问题讨论】:

    标签: uml state diagram staruml


    【解决方案1】:

    总之

    根据 UML 2.5 规范,这种图是完全有效的。然而,通过推理,我们可以理解这不是最好的方法。

    详细信息:为什么有效

    根据定义(14.2.3.4.1部分):

    • State1 是一个复合状态,由一个区域组成。
    • State2State3简单状态,在这种情况下,它们也是 @ 的直接子状态 987654326@

    进入状态的规则(14.2.3.4.5 部分)建议您的问题的第一个答案:

    显式条目:如果传入的转换或其延续 终止于复合状态的直接包含的子状态, 然后该子状态变为活动状态并...

    这在与区域相关的规则中也得到了加强(14.2.3.2 部分),更准确地说是它们的激活:

    • 一个区域要么以其自己的本地初始伪事件开始(即在激活封闭状态时自动激活,要么激活它的“正交”区域(即在相同复合状态下并发)。
    • 或者,如果区域被进入转换激活,则区域从显式状态(子状态)开始:

      当一个 Region 被一个 Transition 输入时,会发生显式激活 终止于区域包含的顶点之一。

    因此,您的图表完全有效,具有从初始状态到子状态State2 的显式转换。

    详情:为什么不推荐

    首先,建议(第 14.2.4.5.1 节)在某些情况下隐藏复合状态的分解可能会有所帮助:

    • 通过显式激活,这种隐藏需要绘制模型的变体,显示从初始到State1 的转换,而不是直接转换到State2
    • 使用默认激活,您将只有一个模型:初始到 State1 和 State1::initial 到 State2。由您决定显示或隐藏细节。或者放大该区域而忽略其上下文。

    然后,如果您以后需要使用多个“正交”区域扩展复合状态:

    • 使用默认激活,您只需添加具有自己默认激活的其他区域。
    • 通过显式激活,您将在一个(显式激活)区域和其他区域(需要默认激活)之间存在不对称性。
    • 或者,您可以考虑使用多个显式激活。但这并没有得到很好的支持:首先没有具有多个目标的转换,其次,从(外部)源状态到不同(内部)目标子状态的多次转换,在转换的语义和执行模型方面将是模棱两可的。

    UML 规范警告说,如果缺少默认激活,应该认为模型定义不明确,或者该区域永远不会启动。所以使用系统的方法更安全,并且始终使用默认激活。

    【讨论】:

    • 看来我需要好好学习了。你有直接链接到 14.2.3.4.1 中的 UML 2.5 指南吗?此时我很感兴趣,但仍然迷失在行话中。
    • @Jurgenfd 看看formal/17-12-05
    • 感谢您的“圣经”。
    【解决方案2】:

    State1 包含 State2,因此 State1 确实存在间接转换。该图等效于转换到 State1 并默认转换到 State2,这将过于混乱。

    【讨论】:

    • 我理解你在第一句和第二句第一部分的论点,但为什么会过于混乱呢?
    • @Jurgenfd 我相信现有模型已经包含了更明确的模型。如果是这样的话,更明确的模型图就会有更多的形状,从而变得更加混乱。
    【解决方案3】:

    该图是单个对象(不是您所怀疑的两个对象)的有效 UML 状态机图。但是,State1 没有用,因为对象在其整个生命周期中始终处于 State1 中。在 State1 中,它要么在 State2 中,要么在 State3 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-18
      • 1970-01-01
      • 2015-04-26
      • 1970-01-01
      • 2015-07-28
      相关资源
      最近更新 更多