有限状态机设计与文档编写指南
1. 有限状态机设计建议
1.1 分离上下文与执行代码
将上下文与执行代码分离到不同文件,有以下好处:
- 更易理解上下文,避免被模板代码干扰。例如对于 S1 -> ev1/actionA ->S2 ,开发者能更清晰了解 ev1 生成时机及 actionA 方法内容。
- 允许同一图表在不同上下文中有多个实例。如某阶段状态机可用于冷却和加热阶段。
- 简化自动代码生成器,实现模板代码的清晰分离,无需支持往返工程。
1.2 事件的运行到完成语义
事件需具备运行到完成语义,即事件触发动作后,新生成的事件需等当前事件处理完成后才能处理。通常需实现事件队列来捕获待处理事件。若状态或转换动作能生成事件,就需为状态机创建事件队列,设计时要考虑队列溢出情况并定义相应行为。
1.3 守卫方法无副作用
守卫方法不应有副作用,使用 C++ 时应是常量方法。若需守卫方法有明显动作或副作用,可能需重新审视状态机设计。
1.4 多守卫的处理顺序
UML 和 Harel 的状态图语义未定义单选择伪状态关联多个守卫时的处理顺序。状态机设计者需确保只有一个守卫评估为真,且从状态图上应能明显看出。
1.5 支持事件和周期逻辑
有限状态机语义不仅支持事件驱动行为,还支持周期行为及两者结合。开发实现模式或代码生成器时,需同时支持事件和周期逻辑,因为初始设计可能仅侧重其一,但后续可能需要两者结合。 </
超级会员免费看
订阅专栏 解锁全文
3699

被折叠的 条评论
为什么被折叠?



