第三題 狀態圖html
重要概念:函數
1.定義:事件、狀態和轉換:spa
事件:指一件值得注意的事情的發生。htm
狀態:指對象在事件發生之間某時刻所處的情形。對象
轉換:兩個狀態之間的關係。它代表當某事件發生時,對象從先前的狀態轉換到後來的狀態。blog
2.狀態無關和狀態依賴對象生命週期
若是一個對象對某事件的響應總相同,則認爲此對象對該事件狀態無關(或非模態)。例如,若是對象接收某個消息,響應該消息的方法總作相同的事情,則該對象對於該消息狀態無關。若是,對全部事件,對象的響應老是相同的,則該對象是一個狀態無關對象。事件
相反,狀態依賴對象對事件的響應根據對象的狀態或模式而不一樣。文檔
3.有關準則:get
a.考慮爲具備複雜行爲的狀態依賴對象而不是狀態無關對象創建狀態機圖
b.通常來說,業務信息系統一般只有少數幾個複雜的狀態依賴類,對此,狀態機建模一般做用不大。與此相反,在過程控制、設備控制、協議處理和通訊等領域一般有許多的狀態依賴對象。若是你在這些領域工做,應該熟悉和考慮使用狀態機建模。
4.狀態圖主要用於描述一個對象在其生存期間的動態行爲,表現爲一個對象所經歷的狀態序列,引發狀態轉移的事件(Event),以及因狀態轉移而伴隨的動做(Action)。通常能夠用狀態機對一個對象的生命週期建模,狀態圖用於顯示狀態機,重點在與描述狀態圖的控制流。
5.繪製狀態機圖步驟
繪製狀態機圖的理想步驟是:尋找主要的狀態,肯定狀態之間的轉換 ,細化狀態內的活動與轉換,用複合狀態來展開細節
a.尋找主要狀態:對於航班機票預訂系統而言,顯然包括的狀態主要有 -- 在剛肯定飛機計劃時,顯然是沒有任何預訂的,而且在有人預訂機票以前都將處於這種「無預訂」狀態 -- 對訂座而言顯然有「部分預訂」和「預訂完」兩種狀態 -- 而當航班快要起飛時,顯然要「預訂關閉」 總結一下,主要有四種狀態:無預訂、部分預訂、預訂完以及預訂關閉
b.肯定狀態間轉換。表格進行表示:表格橫向是轉出,表格縱向是轉入
c.細化狀態內的活動與轉換
d.使用複合狀態
6.轉換的5要素:
•源狀態:即受轉換影響的狀態
•目標狀態:當轉換完成後對象的狀態
•觸發事件:用來爲轉換定義一個事件,包括調用、改變、信號、時間四類事件
•監護條件:布爾表達式,決定是否激活轉換、
•動做:轉換激活時的操做
繪製要點:
具體方法見:http://www.cnblogs.com/ywqu/archive/2009/12/17/1626043.html
http://www.cnblogs.com/sura/archive/2012/07/01/2572083.html
在這裏,直接引用了兩篇我以爲已經講的很詳細的介紹。
第一篇概念性的描述較多,第二篇實例較多,可根據不一樣須要進行理解。
注意事項:
A.注意狀態圖的對象是什麼。它多是一個system,也多是一個用例,也多是一個對象,必定要看清楚題目要求畫什麼東西的狀態圖。
B.畫系統和用例的狀態圖通常是畫它的過程,而畫對象的狀態圖是畫它的生命週期。
C.而後就是找狀態了,必定要知道狀態變量是什麼,必定要能枚舉狀態有哪些狀況。
D.接下來是操做。
一、 識別狀態圖的對象
二、 識別狀態:考試是有組合狀態的。
三、 轉換邊:
格式:觸發事件 [監護條件] / 動做
觸發事件:觸發轉換的事件,包括調用、觸發信號、時間等(對象或系統裏面建立什麼計劃,發生什麼變化)
監護條件(guard):決定是否能轉換的條件,監護條件爲true才能轉換
動做:轉換被激活時會發生的操做(外部發生的事件)
√ 事件通常用被動語態寫出來(用被動語態寫出來的叫作觸發,如onKeyPressed,通常是與代碼對應的函數名相同的)。
√ 若是程序顯式告訴你,「若是什麼,怎麼樣」,則必定要寫guard,不然要扣分
√ 動做能夠不寫,寫錯了要扣分
√ 必定要在連線上寫出各類條件!
√ 文檔詳細告訴有何狀態,必定要完整寫出
E.狀態圖不必定有終點,必定有起點!
試題答案: