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

UML状态图中是否允许没有直接转换的状态?,uml,state,diagram,staruml,Uml,State,Diagram,Staruml,UML状态图(SD)中是否允许没有直接转换的状态,如下面用StarUML绘制的那样 State1并没有直接参与任何转换,所以我怀疑在UML/desirect中是否允许这样做。我认为在我的应用程序中,我实际上是在一个SD中建模多个对象 State1包含State2,因此State1确实存在间接转换。该图相当于将转换为State1,并将默认转换为State2,这将过于混乱 总之 基于UML2.5规范,这种图是完全有效的。然而,通过推论,我们可以理解,这不是最好的办法 细节:为什么它是有效的 根据定义

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

State1并没有直接参与任何转换,所以我怀疑在UML/desirect中是否允许这样做。我认为在我的应用程序中,我实际上是在一个SD中建模多个对象


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

总之 基于UML2.5规范,这种图是完全有效的。然而,通过推论,我们可以理解,这不是最好的办法

细节:为什么它是有效的 根据定义(章节
14.2.3.4.1
):

  • State1
    是一个仅由一个区域构成的复合状态
  • State2
    State3
    简单状态,在这种情况下,它们也是
    State1的直接子状态
您的问题的第一个答案由进入状态的规则(第14.2.3.4.5节)建议:

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

与区域相关的规则(第14.2.3.2节)也加强了这一点,更准确地说,与区域的激活有关:

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

    当一个区域被转换进入时,会发生显式激活 终止于区域包含的顶点之一

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

细节:为什么不推荐 首先,建议(第14.2.4.5.1节)在某些情况下有助于隐藏复合状态的分解:

  • 通过显式激活,这种隐藏需要绘制模型的变体,显示从初始状态到
    State1
    的转换,而不是直接转换到
    State2
  • 使用默认激活,您只有一个模型:initial to State1和State1::initial to State2。由您来显示或隐藏详细信息,或者忽略其上下文放大区域
然后,如果以后需要使用多个“正交”区域扩展复合状态:

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

UP规范警告说,如果缺省激活丢失,则应该认为模型不正确,或者该区域永远不会启动。因此使用系统的方法更安全,并且总是使用默认激活。

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

看起来我需要进一步研究。您是否直接链接到14.2.3.4.1中的UML 2.5指南?此时我很感兴趣,但仍然对术语感到迷茫。@Jurgenfd谢谢你的《圣经》。我理解你在第一句和第二句的第一部分中的论点,但为什么会太混乱呢?@Jurgenfd我相信现有的模型已经包含了更明确的模型。如果是这样的话,更明确的模型的图会有更多的形状,使它更混乱。