UML状态机:如何退出正交子区域?(UML state machine: How to exit o

2019-09-19 04:49发布

立足维基百科 ,我可以有一个层次状态分解,在那里我有多个正交的区域,可以独立改变状态。

该图显示了正交区域如何进入。 我假设该条目是并行发生的所有地区。 我想知道的是,你如何表达退出? 如果每个区有一个出口,做全球父状态退出时的第一个子区域退出,或者当他们都退出? 我想表达的是,当他们退出了出口情况。 你如何表达,全球父状态转换到下一个全球性的状态,因为所有的孩子地区已经退出 ? 它总是含蓄?

我的具体问题是,我的FSM在初始化的全局状态开始。 它发送多个查询到多个外部系统异步地并联。 只有一次,它已收到答案每个查询,就可以进行下一步操作。 所以我每个异步并行查询模型作为全球初始化状态,内部的正交区域。 每个子区域可以独立改变状态。 当所有的子区域都达到最终状态,我可以继续前进。

该FSM将在演员框架,其中异步消息(事件)是通信的唯一的方式来实现。

理想情况下,我想答案指向一个示例图像,因为这样的事情是很难用言语表达。

Answer 1:

从正交状态的完成转换就可以了,因为当所有的正交地区都完成了它会采取。

如果输入一个复合状态(状态与内状态和/或正交区域),每个区域开始在其初始状态下,为不同的状态中的每个区域中使用叉伪节点,或每个区域的最后一个状态,如果输入了状态通过历史伪状态。 离开复合状态可以通过开始于内状态,其存在的所有正交区域从它们的当前状态的一个过渡来完成。 如果您想在一个机器已经到了不同地区的一组状态的退出,也可以使用加入pseudostates。

正如你所看到的,可能性几乎是无止境的。 我不能添加图像,但我以后会做到这一点时,我手边有一个良好的UML编辑器。

现在的一个例子。 假设你有以下的状态机:

  1. 如果两个并行区域完成(最终节点到达),则完成过渡将采取机从S1S5 。 如果
  2. 如果机器是目前在S3和接收e1 ,它将退出S1和去S6
  3. 如果机器在S7S8 ,他们都完成,它会去参加,然后到S6

这是我知道的状态机的工作方式。



文章来源: UML state machine: How to exit orthogonal child regions?