我有一个涉及建模状态机的小问题。
[我设法进行了一些知识工程,并对一组确定状态以及状态转换的原始确定性规则进行了“逆向工程”。
我想知道最佳实践是什么:
如何严格测试我的状态和状态转换,以确保系统不会处于不确定状态。
如何执行状态转换要求(例如,应该不可能直接从stateFoo转到StateFooBar,即,向每个州灌输关于其可以转换到的状态的“知识”。
]理想情况下,我想使用整洁的,基于模式的设计,并尽可能使用模板。
尽管我确实需要一个开始的地方,对于以我的方式发送的任何指针(无双关语,我将不胜感激。)>
我有一个涉及建模状态机的小问题。我设法进行了一些知识工程和“逆向工程”,以一套原始的确定性规则来确定...
请务必查看Boost Statechart Library。
天哪,它看起来并不复杂。状态机代码非常简单且简短。
测试与模式,模板等关系不大。我建议使用像CppUnit(xUnit系列的一部分)这样的测试框架来捕获所有测试用例。数量当然取决于状态机的复杂度。
您关于强制执行状态转换的问题已成为您的状态机类设计的核心。我想说的是,一个状态将具有一组可能过渡到的子状态,以及将触发每个子状态的事件。如果事件Foo没有FooBar子级,则无法过渡到该子级。
使用状态机有时会出现。我通常按照建议的建议做,只是简单地做一个switch语句。但是,这仅在状态不是太大的情况下有效。听起来有点像您的情况。考虑到这一点,我认为最好的方法是从一个好的架构开始,该架构将允许您执行某些操作。我接受了达菲(Duffymo)的建议,并尝试了Google。本文看起来很有趣-Object-Oriented State Machines。可能矫kill过正,但我认为它将提供一个易于使用CppUnit之类进行测试的框架。
[来自Google搜索的其他一些很好的参考
听起来像是用于单元测试的原始应用程序。那里有许多单元测试框架。我碰巧喜欢Boost one。
如果您正在寻找经典的GOF设计模式状态机模式,请查看wikipedia。
在Java示例中查看此页面(在撰写本文时)。