我读了很多关于它的内容,但是仍然不确定状态以什么顺序执行(在“复合状态”中)以及深浅的历史究竟是如何工作的?有人可以帮我吗?
我有一个示例,我不确定如何解决,这里是:
uml - 状态图中的转换顺序是什么?如何使用历史记录伪状态?-LMLPHP

我将不胜感激任何帮助!

最佳答案

问题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


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

在e1之后


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


默认转换为A :: C :: G之后


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


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

e3之后


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


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

e4之后


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


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

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


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

e7之后


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


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

e4被丢弃

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

10-07 12:25
查看更多