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

时间:2018-12-13 14:46:11

标签: uml state diagram staruml

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

State1不直接参与任何过渡,因此我怀疑UML是否允许这样做。我认为在我的应用程序中,我实际上是在单个SD中为多个对象建模。

enter image description here

3 个答案:

答案 0 :(得分:2)

简而言之

基于UML 2.5规范,这种图表非常有效。但是,通过推论,我们可以理解这不是最佳方法。

详细信息:为什么有效

根据定义(第14.2.3.4.1节):

  • State1是完全由一个 区域 组成的 复合状态
  • State2State3 简单状态 ,在这种情况下,它们也是 直接子状态State1中的

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

  

显式条目:如果传入的Transition或其延续   终止于复合国的直接包含的子国,   然后该子状态变为活动状态,并且...

与区域(第14.2.3.2节)相关的规则也对此进行了强化,更确切地说,与区域的激活有关:

  • 要么一个区域以其自己的本地初始伪事件(在激活封闭状态时自动激活,要么以其“正交”区域(即在同一复合状态下并发)被激活)开始。
  • 或者如果某个区域是通过输入的过渡激活的,则该区域将从显式状态(子状态)开始:

      

    通过过渡输入区域时发生显式激活   终止于该地区的其中一个顶点。

因此,您的图完全有效,并且具有从初始状态到子状态State2的显式过渡。

详细信息:为什么不推荐使用

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

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

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

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

UML规范警告说,如果缺少默认激活,则应将模型视为定义不明确,否则该区域将永远不会开始。因此,使用系统的方法更安全,并且始终使用默认激活。

答案 1 :(得分:0)

State1包含State2,因此对于State1确实存在间接转换。该图等效于过渡到State1,而默认过渡到State2,这将太麻烦了。

答案 2 :(得分:0)

该图是单个对象(您怀疑不是两个对象)的有效UML状态机图。但是,State1没什么用,因为对象在其整个生命周期中始终处于State1中。在State1中时,它将在State2或State3中。<​​/ p>