狀態圖::面向對象的另一種理解

針對車輛的數字式信號的狀態機設計完成之後,按道理可以繼續設計標準的車輛信號或者行人等等。但是如果你回頭看看數字式車輛信號的設計,應該可以明白:它們其實都是大同小異。所以這部分就留給大家可以自己設計了。

本文說明按鈕(包括系統停止按鈕和行人通過請求按鈕)的狀態機設計。

面向對象

在考慮按鈕的狀態機的時候可以有兩種視角:信號系統的視角和按鈕裝置的視

角。

如果按照信號系統需求來建模,識別出來的狀態就是道路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

TAG:面向對象編程 | 面向對象分析與設計 | UML建模 |