UML状态图中是否允许没有直接转换的状态?
UML状态图(SD)中是否允许没有直接转换的状态,如下面用StarUML绘制的那样 State1并没有直接参与任何转换,所以我怀疑在UML/desirect中是否允许这样做。我认为在我的应用程序中,我实际上是在一个SD中建模多个对象UML状态图中是否允许没有直接转换的状态?,uml,state,diagram,staruml,Uml,State,Diagram,Staruml,UML状态图(SD)中是否允许没有直接转换的状态,如下面用StarUML绘制的那样 State1并没有直接参与任何转换,所以我怀疑在UML/desirect中是否允许这样做。我认为在我的应用程序中,我实际上是在一个SD中建模多个对象 State1包含State2,因此State1确实存在间接转换。该图相当于将转换为State1,并将默认转换为State2,这将过于混乱 总之 基于UML2.5规范,这种图是完全有效的。然而,通过推论,我们可以理解,这不是最好的办法 细节:为什么它是有效的 根据定义
State1包含State2,因此State1确实存在间接转换。该图相当于将转换为State1,并将默认转换为State2,这将过于混乱 总之 基于UML2.5规范,这种图是完全有效的。然而,通过推论,我们可以理解,这不是最好的办法 细节:为什么它是有效的 根据定义(章节
14.2.3.4.1
):
是一个仅由一个区域构成的复合状态李>State1
和State2
是简单状态,在这种情况下,它们也是State3
State1的直接子状态
- 一个区域以其自身的本地初始伪事件(当封闭状态被激活时自动激活)开始,或者一个其“正交”区域(即在相同的复合状态下并发)被激活
- 或者,如果某个区域被进入的转换激活,则该区域从显式状态(子状态)开始: 当一个区域被转换进入时,会发生显式激活 终止于区域包含的顶点之一
State2
细节:为什么不推荐
首先,建议(第14.2.4.5.1节)在某些情况下有助于隐藏复合状态的分解:
- 通过显式激活,这种隐藏需要绘制模型的变体,显示从初始状态到
的转换,而不是直接转换到State1
State2
- 使用默认激活,您只有一个模型:initial to State1和State1::initial to State2。由您来显示或隐藏详细信息,或者忽略其上下文放大区域
- 使用默认激活,您只需添加具有自己默认激活的其他区域
- 使用显式激活,一个(显式激活)区域和其他区域(需要默认激活)之间会出现不对称 另一方面,您可以考虑使用多个显式激活。但这并没有得到很好的支持:首先,没有多个目标的转换;第二,从(外部)源状态到不同(内部)的多个转换。目标子状态在转换的语义和执行模型方面是不明确的
UP规范警告说,如果缺省激活丢失,则应该认为模型不正确,或者该区域永远不会启动。因此使用系统的方法更安全,并且总是使用默认激活。 < P>图是单个对象的有效UML状态机图(如您所怀疑的,不是两个对象)。。但是,State1没有任何用处,因为对象在其整个生命周期中始终处于State1。而在State1中,它要么处于State2,要么也处于State3。看起来我需要进一步研究。您是否直接链接到14.2.3.4.1中的UML 2.5指南?此时我很感兴趣,但仍然对术语感到迷茫。@Jurgenfd谢谢你的《圣经》。我理解你在第一句和第二句的第一部分中的论点,但为什么会太混乱呢?@Jurgenfd我相信现有的模型已经包含了更明确的模型。如果是这样的话,更明确的模型的图会有更多的形状,使它更混乱。