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