狀態圖::面向對象的另一種理解
針對車輛的數字式信號的狀態機設計完成之後,按道理可以繼續設計標準的車輛信號或者行人等等。但是如果你回頭看看數字式車輛信號的設計,應該可以明白:它們其實都是大同小異。所以這部分就留給大家可以自己設計了。
本文說明按鈕(包括系統停止按鈕和行人通過請求按鈕)的狀態機設計。
面向對象
在考慮按鈕的狀態機的時候可以有兩種視角:信號系統的視角和按鈕裝置的視
角。
如果按照信號系統需求來建模,識別出來的狀態就是道路1通行,道路1停止一類的結果。由於停止按鈕和行人通過按鈕關注的點不同,識別出來的狀態也就不相同,無法共通。
如果考慮了系統需求之後按照按鈕裝置的觀點來建模,識別出來的狀態就是,按鈕無效狀態,按鈕有效狀態,請求有效狀態等,這時停止按鈕和行人按鈕的處理就可以共通。
收集需求時使用利用者觀點,建模時使用功能提供者觀點。這也算是一種面向對象吧。雖然這種解釋只是作者的一種擴大解釋,但是作為大家在分析系統,對系統建模時的一種考慮問題的角度絕對是有益無害的。
按鈕裝置狀態機
結合停止按鈕和行人通過請求按鈕的需求,按照面向對象(按鈕裝置)的觀點,建模如下:
Disable狀態:設備不接受用戶按鈕操作。接受到DeviceEnable事件之後,向Enable狀態遷移;如果接受到ShutDown事件,經由Junction偽狀態向ExitPoint遷移。
Enable狀態:檢測到用戶按鈕按下以後,向CmdReady狀態遷移;接受DeviceDisable事件以後,向Disable狀態遷移;如果接受到ShutDown事件,經由Junction偽狀態向ExitPoint遷移。
CmdReady狀態:接受到HandlerReady事件後,發送Command信號之後向Disable狀態遷移;接受DeviceDisable事件以後,向Disable狀態遷移;如果接受到ShutDown事件,經由Junction偽狀態向ExitPoint遷移。
關於連接點(Junction)
連接點-這種類型的偽狀態用於將狀態之間的多個遷移連接成複合路徑。例如,合併偽狀態可以用來將多個進入遷移合併成一個離開遷移,通過這種方式表現後續路徑分享。也可以用於將一個進入遷移分成多個離開遷移,這些離開遷移通過不同的監護約束選擇。
--UML2.5 14.2.3.7 Pseudostate and PseudostateKind
(偽狀態和偽狀態種類)
參考資料:
14.2 Behavior StateMachines (7)--Juction
14.2 Behavior StateMachines (10) --記法
打開方法如下:
1.進入【面向對象思考】 公眾號
2.打開【UML】-【UML2.5中文譯文】菜單
3.選擇【狀態圖】分類
4.選擇相關文章
寫在文章的最後
既然已經讀到這裡了,拜託大家再用一分鐘時間,將文章轉發到各位的朋友圈,微信群中。希望有更多需要的人讀到本公眾號里的文章,這裡先謝過了!
閱讀更多更新文章,請關注【面向對象思考】微信公眾號!
推薦閱讀:
※類圖::添加操作和方法
※Python基礎練習題(老王開槍)
※狀態圖::開篇
※R語言學習筆記——R語言面向對象編程系列2
※實用OOPC