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

问题描述 投票:3回答:3

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

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

enter image description here

uml state diagram staruml
3个回答
2
投票

In short

基于UML 2.5规范,这种图表非常有效。然而,通过演绎,我们可以理解它不是最好的方法。

The details : why it is valid

根据定义(部分14.2.3.4.1):

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

关于进入州的规则(14.2.3.4.5部分)建议您提出问题的第一个答案:

显式条目:如果传入的Transition或其继续在复合State的直接包含的子状态上终止,则该子状态变为活动状态...

在与地区有关的规则(14.2.3.2部分)中也加强了这一点,更准确地说,它们的激活:

  • 区域以其自身的本地初始伪事件开始(当激活封闭状态时自动激活,或者激活其“正交”区域(即,在相同复合状态下并发))。
  • 或者,如果区域由进入的转换激活,则区域以显式状态(子状态)开始: 当一个区域由一个区域包含的顶点之一终止时,会发生显式激活。

所以你的图表是完全有效的,从初始状态到子状态State2的显式转换。

The details: why it is not recommended

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

  • 通过显式激活,这种隐藏将需要绘制模型的变体,显示从初始到State1的过渡,而不是直接过渡到State2
  • 使用默认激活时,您只有一个模型:State1的初始值和State2的State1 ::的初始值。由您来显示或隐藏详细信息。或者放大忽略其背景的区域。

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

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

UML规范警告说,如果缺少默认激活,则应将模型视为定义错误,或者该区域永远不会启动。因此,使用系统方法更安全,并始终使用默认激活。


0
投票

State1包含State2,因此State1存在间接转换。该图等同于向State1过渡到默认过渡到State2,这将过于混乱。


0
投票

该图是单个对象的有效UML状态机图(而不是您怀疑的两个对象)。但是,State1没有用,因为该对象在其整个生命周期内始终处于State1状态。在State1中,它既可以在State2中,也可以在State3中。

© www.soinside.com 2019 - 2024. All rights reserved.