UML状态机:如何退出正交子区域?

时间:2012-07-08 11:15:58

标签: uml state-machine

基于Wikipedia,我可以进行分层状态分解,其中我有多个正交区域,可以独立改变状态。

该图显示了如何输入正交区域。我假设该条目在所有地区并行发生。我想知道的是,你如何表达出口?如果每个区域都有一个出口,那么当第一个子区域退出时,或者当它们全部退出时,全局父状态是否会退出?我想表示当退出 all 时退出。那么如何表达全局父状态转换到下一个全局状态,因为所有子区域都已退出?这总是隐含的吗?

我的具体问题是我的FSM在Initializing global状态下启动。它以并行异步方式向多个外部系统发送多个查询。只有在收到每个查询的答案后,才能继续。因此,我将每个异步并行查询建模为全局初始化状态内的正交区域。每个子区域可以独立地改变状态。当所有儿童区域都达到最终状态时,我可以继续前进。

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

理想情况下,我希望答案指向一个示例图像,因为这样的事情难以用文字表达。

1 个答案:

答案 0 :(得分:7)

从正交状态完成转换将起到作用,因为它将在所有正交区域完成时进行。

当输入复合状态(具有内部状态和/或正交区域的状态)时,每个区域从其初始状态开始,使用fork伪节点开始到每个区域中的不同状态,或者如果是,则每个区域的最后状态。 state是通过历史伪状态输入的。退出复合状态可以通过从一个内部状态开始的转换来完成,该内部状态存在来自其当前状态的所有正交区域。如果要在机器进入不同区域的一组状态时退出,也可以使用连接伪状态。

正如您所看到的,可能性几乎是无穷无尽的。我还无法添加图像,但是稍后当我手头有一个好的UML编辑器时我会这样做。

现在的例子。假设您有以下状态机: example state machine

  1. 如果两个并行区域都已完成(到达最终节点),则完成转换将使计算机从S1转到S5。如果
  2. 如果该计算机当前位于S3并且已收到e1,则会退出S1并转到S6
  3. 如果该计算机位于S7S8并且它们都已完成,则会转到联接,然后转到S6
  4. 这是我了解状态机的工作方式。