我一直在解决以下问题。我是C ++的新手,我需要实现 用于嵌入式软件的状态机。这个状态机应该构成 应用程序逻辑的核心。它应该控制状态之间的转换 " STANDSTILL"," RUN"和" FAULT"一个控制器。这些转变发生在 on:逻辑输入状态,模拟输入状态,通过通信线路接收的消息以及在控制器软件内部创建的消息。
我想以我利用的方式实现这个状态机 C ++的强大功能(面向对象编程)。所以我花了一些时间 寻找一些合适的设计模式。我找到了"州"德兴 模式,但我不确定它是否是一个很好的选择。据,直到...为止 我理解这个定义是正确的,它适用于我的情况 有一些对象(所谓的上下文对象)哪种行为(其公共接口的方法)强烈依赖于它的状态。
我的第一个想法是所谓的上下文对象可能是控制器本身。 (我的意思是一个将实现整个设备的软件模型的类。)状态依赖方法可以是与状态机处理的上述输入相关联的方法,即逻辑输入,模拟输入,通过通信线路和内部接收的消息消息。但我不确定这是否是好方法。有没有人对这种状态设计模式的使用有任何经验?感谢您的任何建议。
答案 0 :(得分:3)
仅仅因为您使用的是C ++,您不一定使用面向对象的设计。在实施琐碎的事情时,你也 使用OOD。在不涉及OOD的情况下实现状态机是完全可行的,因为它是如此简单的数据结构。基本上它只是一个带有命名成员的数组(函数指针)。
“模式”称为finite state machine。可以找到嵌入式系统的典型C实现here。你可以围绕该数组编写一个简单的类。嵌入式系统中的状态机几乎总是静态且只读,因此该类必须是“单例”。你会发现在这里使用课程没有明显的好处。
答案 1 :(得分:2)
状态模式是一个很好的设计。但如上所述,现有的工具可以为您生成代码。您可以看到的另一个是http://scxmlcc.org。这个创建使用“C ++的力量”的代码,并且也基于状态模式设计。