【问题标题】:Nondeterministic State Machine understanding非确定性状态机理解
【发布时间】:2019-02-22 21:48:43
【问题描述】:

我正在尝试为我的 iOS 项目构建 DSL。
为此,我计划以State Machine 的形式构建Semantic Model。 (术语来自 Fowler 关于 DSL 的书)。
主要思想:State Machine被编码为statestransitions之间的集合,然后可以编写一些单元测试来检查some_state1上的some_action是否将系统引导到some_state2

问题是我的应用程序有很多后台线程,因此在给定时刻状态机中可以有多个状态处于活动状态。

我读过这样的状态机是Nondeterministic finite automaton,浏览过 wiki 页面,但这对我来说看起来太理论化了。

这是一个示例状态机:

s8只有在收到t7t8时才能被激活,这意味着它应该“等待”。


问题:
1.状态机中有"wait"之类的东西吗?
2.也许,这不是NFA,而是两个状态机?我应该关心如何命名这种语义模型吗?
3、s8是否可以用一些后台线程来实现,它接受来自s4s7的通知,并且只有当它们都发送通知时才被激活(这意味着当达到超时时单元测试失败,然后应该在模型的某处提到超时)?

【问题讨论】:

    标签: dsl state-machine finite-automata non-deterministic


    【解决方案1】:

    在分层状态机中查看orthogonal regions,这应该可以满足您的需求。

    创建一个包含两个子区域的新状态:第一个包含 s1、s2、s3、s4 的区域和一个新的最终状态(t8 的目标);第二个区域包含 s5、s6、s7 和一个新的最终状态(t7 的目标)。然后添加一个从新状态到 s8 的新转换。

    只有在两个区域都处于最终状态时才应该遍历新的转换。

    【讨论】:

    • 谢谢,这个模型很实用,它回答了我所有的子问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    • 2013-10-19
    • 1970-01-01
    • 2011-11-22
    • 2018-07-14
    • 2015-08-30
    • 1970-01-01
    相关资源
    最近更新 更多