gpt4 book ai didi

uml - UML 状态图中是否允许没有直接转换的状态?

转载 作者:行者123 更新时间:2023-12-04 23:26:22 27 4
gpt4 key购买 nike

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

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

enter image description here

最佳答案

简而言之

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

细节:为什么有效

根据定义(14.2.3.4.1 部分):

  • State1 是一个复合状态,由一个区域组成。
  • State2State3简单状态,在本例中它们也是State1
  • 的>直接子状态

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

Explicit entry: If the incoming Transition or its continuations terminate on a directly contained substate of the composite State, then that substate becomes active and ...

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

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

    an explicit activation occurs when a Region is entered by a Transition terminating on one of the Region’s contained Vertices.

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

详情:不推荐的原因

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

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

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

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

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

关于uml - UML 状态图中是否允许没有直接转换的状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53764407/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com