層次狀態機的設計思想--Apple的學習筆記 一,前言 二,入門 三,計算器的狀態機設計 四,小結

一,前言

之前在搜索循環隊列的時候,不小心搜索到了狀態機設計的書,作爲c語言開發者,所謂的面向對象也就是結構體當做一個對象,所謂的繼承就是大結構體打包小結構體。然後c語言主要是面向過程的語言,我以前以爲只有複雜的邏輯才能使用狀態機,簡單的邏輯無法用狀態機設計,看了這書後才發現所有功能都可以用狀態機來設計的。狀態機算是面向對象的設計,然後此對象就是狀態。

二,入門

我也曾經用vb和c#和QT製作做計算器,仔細回想下,我做的計算器只支持簡單的整數運算,根本不算個計算器。看了此書後,才發現其實我根本不懂狀態機的設計,此書最重要讓我學習到的就是一個狀態機繼承的概念,之前看UML的設計中主要關注時序圖,沒有看狀態機,在UML就是叫層次狀態機。

三,計算器的狀態機設計

把信號 PLUS ,MINUS, MULTIPLY 和 DIVIDE合併成一個高級的信號 OPER (操作數)。這個變換避免了在兩個轉換(從 operand1 到opEntered ,和從 result 到 opEntered )上重複相同的觸發。



不過,用戶希望能在任何時候取消並重新開始。類似的,用戶希望能在任何時候關閉計算器。在下圖的狀態圖用一種天真的方式加入了這些特徵。一個較好的方法是把這些共同的狀態分解成一個更高一層的狀態 on,並讓所有的子狀態通過行爲繼承來重用 Cancel 和 OFF 轉換。這就是層次狀態機可以繼承父類狀態機的所有屬性。



最後再添加正負號和小數點浮點計算,狀態機就更加複雜了,設計思路同樣採用繼承狀態對象。

四,小結

其實我之前覺得設計的比較神奇的GUI框架,其實也是用的事件驅動加狀態機來設計,GUI的一個個層次界面的容器用的就是層次狀態機的設計,它有繼承的概念,也退出的時候是類似歸遞,退出事件通知就是一層層爲容器繪圖。之前我不知道還有層次狀態機的設計,最近看了此書後才明白,這就是不識廬山真面目,只緣身在此山中吧

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