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

时间:2016-01-12 01:45:46

标签: uml state diagrams

我读了很多关于它的内容,但仍然不确定状态执行的顺序(在复合状态中)以及完整的深度和浅层历史是如何工作的?有人能帮助我吗? 我有一个例子,我不知道如何解决,这里是: enter image description here

我将不胜感激任何帮助!

2 个答案:

答案 0 :(得分:3)

问题1:

  

......不确定......历史上究竟有多深刻和浅薄的历史?

答案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

enter image description here

在e1之后

  • x的值(条目A :: C):x = x + 1 = 7
  • 新州:A :: C
默认过渡到A :: C :: G

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

enter image description here

在e3之后

  • x的值(退出A :: C :: G):x = x - 2 = 6
  • x的值(条目A :: C :: H):x = x / 2 = 3
  • 新州:A :: C :: H

enter image description here

在e4之后

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

enter image description here

在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

enter image description here

在e7之后

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

enter image description here

e4被废弃

enter image description here

答案 1 :(得分:0)

在e7之后

x的值(退出Y):x = x / 2 = 1

x的值(条目A):x = x * 2 = 2

x的值(条目A :: C见上面的注释):x = x + 1 = 3

x的值(条目A :: C :: G):x = x + 1 = 4

新州:A :: C :: G