深入理解状态机:从计算器到时间炸弹的实现
1. 计算器状态机的完善与特点
在计算器的实现中,有两种情况需要特别关注。当处于特定状态时,为了准备输入第二个操作数,显示屏必须清空。而当“ - ”表示取反时,情况更为复杂,因为“新计算开始”的定义十分微妙。它指的是应用启动后或者用户点击取消之后的情况,但不包括计算器显示上一次计算结果的时候。
为了解决这个问题,创建了一个新的状态“begin”,用于捕捉“新计算开始”的特定行为。此时,初始转移指向“begin”而非“operand1”,其余部分与前一种情况类似,只是“begin”状态起到了“opEntered”的作用。
计算器基本完成后,还需要进行一些最后的完善工作,包括在适当的上下文中添加取消输入转换,以及添加一个“error”状态来处理溢出和除零错误。最终的计算器状态图展示了完整的状态转换。
在事件驱动系统编程中,主要挑战是确定针对给定事件应执行的适当操作。这些操作通常由事件的性质和当前上下文(即系统经历的过去事件序列)决定。传统的事件 - 动作范式忽略了上下文,导致代码中充斥着大量复杂的条件逻辑,也就是程序员所说的“意大利面条”代码。
而基于状态机的技术能够显著减少代码中的不同路径,并简化每个分支点的测试条件。状态机使事件处理明确依赖于事件的性质和系统的上下文(状态)。状态是“行为块”,事件 - 动作范式在每个状态内局部应用。状态概念是对系统历史的有用抽象,能够捕捉相关的刺激序列并忽略无关的序列。在扩展状态机中,状态对应系统行为的定性方面,而扩展状态变量(程序内存)对应定量方面。
事件是一种瞬时发生的情况,可使状态机执行操作。事件可以有参数,用于传达有关该事件的定量信息。当
超级会员免费看
订阅专栏 解锁全文
2123

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



