UML 状态图深入研究与内部转换

问题描述

我对下面的状态图有疑问;

enter image description here

我想,在 UML 中,这是可能的。在这种情况下,执行顺序是 S1 进入,S3 进入。我对吗? 在下图中,当发生从“任何其他状态”到 s1 的转换时的执行顺序是什么?

enter image description here

解决方法

对于第一个图表:

执行顺序是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 必须有一个复合状态或入口点作为其源。

  • 如果从边界过渡,它可以是 localexternal,但在绘制时它是 local,请参阅标准formal/2017-12-05 page 335 图 14.34 Local Transitions 和图 14.35 External Transitions 看图的区别

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...