层次状态机的设计思想--Apple的学习笔记 一,前言 二,入门 三,计算器的状态机设计 四,小结

一,前言

之前在搜索循环队列的时候,不小心搜索到了状态机设计的书,作为c语言开发者,所谓的面向对象也就是结构体当做一个对象,所谓的继承就是大结构体打包小结构体。然后c语言主要是面向过程的语言,我以前以为只有复杂的逻辑才能使用状态机,简单的逻辑无法用状态机设计,看了这书后才发现所有功能都可以用状态机来设计的。状态机算是面向对象的设计,然后此对象就是状态。

二,入门

我也曾经用vb和c#和QT制作做计算器,仔细回想下,我做的计算器只支持简单的整数运算,根本不算个计算器。看了此书后,才发现其实我根本不懂状态机的设计,此书最重要让我学习到的就是一个状态机继承的概念,之前看UML的设计中主要关注时序图,没有看状态机,在UML就是叫层次状态机。

三,计算器的状态机设计

把信号 PLUS ,MINUS, MULTIPLY 和 DIVIDE合并成一个高级的信号 OPER (操作数)。这个变换避免了在两个转换(从 operand1 到opEntered ,和从 result 到 opEntered )上重复相同的触发。



不过,用户希望能在任何时候取消并重新开始。类似的,用户希望能在任何时候关闭计算器。在下图的状态图用一种天真的方式加入了这些特征。一个较好的方法是把这些共同的状态分解成一个更高一层的状态 on,并让所有的子状态通过行为继承来重用 Cancel 和 OFF 转换。这就是层次状态机可以继承父类状态机的所有属性。



最后再添加正负号和小数点浮点计算,状态机就更加复杂了,设计思路同样采用继承状态对象。

四,小结

其实我之前觉得设计的比较神奇的GUI框架,其实也是用的事件驱动加状态机来设计,GUI的一个个层次界面的容器用的就是层次状态机的设计,它有继承的概念,也退出的时候是类似归递,退出事件通知就是一层层为容器绘图。之前我不知道还有层次状态机的设计,最近看了此书后才明白,这就是不识庐山真面目,只缘身在此山中吧

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章