天天看點

EA&UML日拱一卒-狀态圖::庖丁解牛

思考題答案

前兩個問題隻有讀者自己知道,是以省略。

用什麼方法才能發現這些問題呢?

繼續關注本公衆号,并且勤加練習。<-你可以說是廣告,管他呢。

應該如何解決這些問題呢?

  • 兩個字:分解
  • 四個字:面向對象

解決軟體遇到的問題,有一個最常用的方法就是對系統進行分解。好聽的說法叫重構。

識别交通信号系統中的類

直接看結果

EA&UML日拱一卒-狀态圖::庖丁解牛

下面對于類圖中出現的類進行簡單的介紹

TrafficSystem:交通信号系統全體,具體系統中使用該類的派生類。

InputDevice:輸入裝置的基類。

PushButton:操作按鈕。

TrafficLightEngine:信号系統整體執行邏輯,具體系統中使用該類的派生類。

TrafficLight:信号燈基類。

PedestrainSpeaker:嚴格講這個不是信号燈,而是行人通行時播放提示音的裝置。

RedestrainLight:行人專用信号燈。允許同行時綠燈,最後階段綠燈閃爍,禁止同行是紅燈。

StandardVehicleLight:車輛專用信号燈。允許同行時綠燈,最後階段綠燈閃爍,安全停止時黃燈,禁止通行狀态時紅燈。

DigitalVehicleLight:車輛專用信号燈。允許同行時綠燈,最後階段有數字表示剩餘時間,安全停止時黃燈,禁止通行狀态時紅燈。

建構交通信号系統

以下是舉例用系統的對象圖

EA&UML日拱一卒-狀态圖::庖丁解牛

例子系統構成如下包括:系統停止按鈕,橫穿馬路請求按鈕,行人通行音樂提示裝置,行人信号燈,車輛信号等。

接下來的文章會針對這個交通系統中的每一個要素的狀态機模組化。敬請期待。

一點感想

對于系統結構的分解,不同的設計者會有不同的視角,不同的觀點,是以就會有不同的模型。但是好的設計會有一些共同點,其中的一個特點應該就是分解的過程就像庖丁解牛。我想庖丁解牛至少需要兩個要素:熟悉,熟練。熟悉就是要對牛的結構要熟悉,熟練就是運用工具要熟練。

希望每一位讀者都能像庖丁解牛一樣對系統進行分解。

閱讀更多更新文章,請掃描下面二維碼,關注微信公衆号【面向對象思考】