问题描述
我对下面的状态图有疑问;
我想,在 UML 中,这是可能的。在这种情况下,执行顺序是 S1 进入,S3 进入。我对吗? 在下图中,当发生从“任何其他状态”到 s1 的转换时的执行顺序是什么?
解决方法
对于第一个图表:
执行顺序是S1进入,S3进入。我说得对吗?
是的,您是对的,来自标准 formal/2017-12-05 § 14.2.3.4.5 进入状态第 310 页:
显式条目:如果传入的 Transition 或其延续终止于直接包含的子状态 复合状态,然后该子状态变为活动状态,并在执行 包含复合状态的入口行为。
对于第二个图表:
-
它似乎使用了一个 entryPoint 伪状态(画得不好),但是从任何其他状态的转换不是去它而是到 S1,所以为了初始伪状态,执行的是entryActS1然后是entryActS2。
-
如果它不是一个入口点,而是一个从边界的本地转换,它不会改变任何其他状态并且执行也是 entryActS1 那么 entryActS2。
关于过渡指示内部
从可能的entryPoint 伪状态 或从边界的转换被指示为内部,但内部转换是自转换,其中源和目标是相同的状态,如上所述在标准 formal/2017-12-05 §14.2.3.8.1 相对于源的转换类型第 314 页:
kind = internal 是本地 Transition 的一种特殊情况,它是自转换(即,具有相同的源和 目标状态),这样状态就永远不会退出(因此,不会重新进入),这意味着没有退出或进入 执行此转换时会执行行为。这种转换只能在以下情况下定义 源顶点是一个状态。
所以第二个图是非法的:
- 在进入伪状态而不是内部的情况下,从它的转换是本地,如标准{{3} } § 14.5.11.8 约束第 361 页:
state_is_local
类型为 local 的 Transition 必须有一个复合状态或入口点作为其源。
- 如果从边界过渡,它可以是 local 或 external,但在绘制时它是 local,请参阅标准formal/2017-12-05 page 335 图 14.34 Local Transitions 和图 14.35 External Transitions 看图的区别