首页 文章

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

提问于
浏览
3

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

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

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

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

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

1 回答

  • 7

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

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

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

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

    • 如果两个并行区域都完成(到达最终节点),则完成转换将使机器从 S1S5 . 如果

    • 如果机器当前位于 S3 并且收到 e1 ,它将退出 S1 并转到 S6 .

    • 如果机器在 S7S8 并且它们都完成,它将进入连接然后到 S6 .

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

相关问题