【问题标题】:UML state machine: How to exit orthogonal child regions?UML 状态机:如何退出正交子区域?
【发布时间】:2023-03-15 00:00:01
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: uml state-machine


    【解决方案1】:

    从正交状态的完成转换可以解决问题,因为它将在所有正交区域都完成时进行。

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

    如您所见,可能性几乎是无穷无尽的。我还不能添加图像,但我会在手头有一个好的 UML 编辑器时添加。

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

    1. 如果两个并行区域都完成(到达最终节点),则完成转换会将机器从S1 带到S5。如果
    2. 如果机器当前在S3并接收到e1,它将退出S1并转到S6
    3. 如果机器在S7S8 中并且它们都完成了,它会去join 然后去S6

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

    【讨论】:

    • 谢谢。这听起来很对,但我还看不出如何绘制“加入伪状态”(因为它们必须是跨区域的,如果我理解正确的话)。等待示例...
    • @SebastienDiot 添加了一个示例。
    • @vainolo 请原谅我复活了这篇文章,但是你用来创建这个图表的“优秀的 UML 编辑器”是什么?很漂亮
    • 从来没有找到一个:-)
    • 开个玩笑。我想我使用了 UML 的视觉范式en.m.wikipedia.org/wiki/Visual_Paradigm_for_UML
    猜你喜欢
    • 2015-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-21
    • 1970-01-01
    • 2014-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多