像下面用StarUML绘制的那样,UML状态图(SD)中是否允许没有直接转换的状态?
State1不直接参与任何过渡,因此我怀疑UML是否允许这样做。我认为在我的应用程序中,我实际上是在单个SD中为多个对象建模。
答案 0 :(得分:2)
基于UML 2.5规范,这种图表非常有效。但是,通过推论,我们可以理解这不是最佳方法。
根据定义(第14.2.3.4.1
节):
State1
是完全由一个 区域 组成的 复合状态 。 State2
和State3
是 简单状态 ,在这种情况下,它们也是 直接子状态State1中的 进入状态的规则(第14.2.3.4.5
节)建议了您的问题的第一个答案:
显式条目:如果传入的Transition或其延续 终止于复合国的直接包含的子国, 然后该子状态变为活动状态,并且...
与区域(第14.2.3.2
节)相关的规则也对此进行了强化,更确切地说,与区域的激活有关:
或者如果某个区域是通过输入的过渡激活的,则该区域将从显式状态(子状态)开始:
通过过渡输入区域时发生显式激活 终止于该地区的其中一个顶点。
因此,您的图完全有效,并且具有从初始状态到子状态State2
的显式过渡。
首先,建议(第14.2.4.5.1节)在某些情况下可能有助于隐藏复合状态的分解:
State1
的过渡,而不是直接到State2
的过渡。 然后,如果以后需要使用多个“正交”区域扩展复合状态:
UML规范警告说,如果缺少默认激活,则应将模型视为定义不明确,否则该区域将永远不会开始。因此,使用系统的方法更安全,并且始终使用默认激活。
答案 1 :(得分:0)
State1包含State2,因此对于State1确实存在间接转换。该图等效于过渡到State1,而默认过渡到State2,这将太麻烦了。
答案 2 :(得分:0)
该图是单个对象(您怀疑不是两个对象)的有效UML状态机图。但是,State1没什么用,因为对象在其整个生命周期中始终处于State1中。在State1中时,它将在State2或State3中。</ p>