UML状态图(SD)中是否允许没有直接转换的状态,如下面用StarUML绘制的那样?
State1没有直接参与任何过渡,所以我怀疑这是否允许……
State1包含State2,因此State1存在间接转换。该图等同于向State1过渡到默认过渡到State2,这将过于混乱。
基于UML 2.5规范,这种图表非常有效。然而,通过演绎,我们可以理解它不是最好的方法。
根据定义(部分 14.2.3.4.1 ):
14.2.3.4.1
State1
State2
State3
关于进入州的规则建议您的问题的第一个答案(部分 14.2.3.4.5 ):
14.2.3.4.5
显式输入:如果传入Transition或其继续 终止于复合国的直接包含的子状态, 那个子状态变得活跃了......
在与地区有关的规则中也加强了这一点(部分 14.2.3.2 ),更确切地说是他们的激活:
14.2.3.2
或者,如果区域由进入的转换激活,则区域以显式状态(子状态)开始:
当转换输入Region时,会发生显式激活 终止于包含顶点的Region 之一。
因此,您的图表完全有效,具有从初始状态到子状态的显式转换 State2 。
首先,建议(第14.2.4.5.1节)在某些情况下隐藏复合状态的分解可能会有所帮助:
然后,如果您以后需要使用多个“正交”区域扩展复合状态:
UML规范警告说,如果缺少默认激活,则应将模型视为定义错误,或者该区域永远不会启动。因此,使用系统方法更安全,并始终使用默认激活。
我认为这对于从初始伪状态的过渡是非法的,但对于过渡到最终状态是合法的
我说考虑属性的可能值 类 : 内部 , 本地 和 外部 。它们都不兼容从初始伪状态的转换,而 外部 与过渡到最终状态兼容
附:
该图是单个对象的有效UML状态机图(而不是您怀疑的两个对象)。但是,State1没有用,因为该对象在其整个生命周期内始终处于State1状态。在State1中,它既可以在State2中,也可以在State3中。