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

UML状态机:如何退出正交子区域?,uml,state-machine,Uml,State Machine,在此基础上,我可以进行分层状态分解,其中我有多个正交区域,它们可以独立地改变状态 该图显示了如何输入正交区域。我假设进入在所有区域中并行发生。我想知道的是,出口怎么走?如果每个区域都有一个出口,那么全局父状态是在第一个子区域退出时退出,还是在它们全部退出时退出?我想表达的是,当他们都退出时,退出就发生了。由于所有子区域都已退出,您如何表示全局父状态转换到下一个全局状态?这总是含蓄的吗 我的具体问题是,我的FSM在初始化全局状态下启动。它并行异步地向多个外部系统发送多个查询。只有在收到每个查询的答

在此基础上,我可以进行分层状态分解,其中我有多个正交区域,它们可以独立地改变状态

该图显示了如何输入正交区域。我假设进入在所有区域中并行发生。我想知道的是,出口怎么走?如果每个区域都有一个出口,那么全局父状态是在第一个子区域退出时退出,还是在它们全部退出时退出?我想表达的是,当他们都退出时,退出就发生了。由于所有子区域都已退出,您如何表示全局父状态转换到下一个全局状态?这总是含蓄的吗

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

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


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

从正交状态完成转换就可以了,因为它将在所有正交区域完成后进行

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

正如你所看到的,可能性几乎是无穷无尽的。我还不能添加一个图像,但我会在以后有一个好的UML编辑器在手时再添加

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

  • 如果两个平行区域完成(到达最终节点),则完成转换将使机器从
    S1
    转到
    S5
    。如果
  • 如果机器当前处于
    S3
    并接收到
    e1
    ,它将退出
    S1
    并转到
    S6
  • 如果机器处于
    S7
    S8
    状态,并且两者都完成,则机器将进入连接,然后进入
    S6

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

    谢谢。这听起来是对的,但我还不知道如何绘制“连接伪状态”(因为它们必须是跨区域的,如果我理解正确的话)。正在等待示例…@SebastienDiot添加了一个示例。@vainolo请原谅我重新发布这篇文章,但是您用来创建此图的“优秀UML编辑器”是什么?真漂亮,没找到:-)只是开玩笑。我想我使用了UML的可视化范例