状态图中的转换顺序是什么?如何使用历史伪状态?

gar*_*ble 4 state uml diagrams

我读了很多相关内容,但仍然不确定状态执行的顺序(在复合状态中)以及深层和浅层历史到底如何运作?有人可以帮助我吗?我有一个例子,我不知道如何解决,这里是: 在此输入图像描述

我将不胜感激任何帮助!

ser*_*gej 5

问题一:

...不确定..深层和浅层历史到底是如何运作的?

答案1:

请注意这一点:

浅层历史由包含“H”的小圆圈表示。它适用于直接包围它的州区域。

浅历史伪状态表示其包含状态的最新活动子状态(但不是该子状态的子状态)。...

资料来源:http ://www.uml-diagrams.org/state-machine-diagrams.html#shallow-history-pseudostate

问题2:

...我不确定我是否总是应该从所有复合材料之外的初始点开始?

答案2:

是的。您从根状态的初始伪状态(在本例中为 A)开始。

例子:

对于给定的状态图和事件链,您将得到以下结果(用 Rhapsody 模拟):

默认转换到 A 后

  • x 的值(转换到 A):x = 3
  • x 的值(条目 A):x = x * 2 = 6
  • 新状态:A

默认转换到 A::B 后

  • 新状态:A::B
  • x 的值:x = 6

在此输入图像描述

e1之后

  • x 的值(条目 A::C):x = x + 1 = 7
  • 新状态:A::C

默认转换到 A::C::G 后

  • x 的值(条目 A::C::G):x = x + 1 = 8
  • 新状态:A::C::G

在此输入图像描述

e3之后

  • x 的值(出​​口 A::C::G):x = x - 2 = 6
  • x 的值(条目 A::C::H):x = x / 2 = 3
  • 新状态:A::C::H

在此输入图像描述

e4之后

  • x 的值(条目 A::C::G):x = x + 1 = 4
  • 新状态:A::C::G

在此输入图像描述

e6之后

  • x 的值(出​​口 A::C::G):x = x - 2 = 2
  • x 的值(出​​口 A::C):x = x - 1 = 1
  • x 的值(出​​口 A):x = x - 1 = 0
  • x 的值(转换到 Y):x = (x * 4) + 2 = 2
  • 新状态:Y

在此输入图像描述

e7之后

  • x 的值(条目 A::C 请参阅上面的注释):x = x + 1 = 3
  • x 的值(条目 A::C::G):x = x + 1 = 4
  • 新状态:A::C::G

在此输入图像描述

e4 被丢弃

在此输入图像描述