•狀態和狀態機
狀態、狀態表示法及狀態機
•狀態 是指在對象生命周期中滿足某些條件、執行某些活動或等待某些事件的一個條件和狀況
•一個狀態通常包括名稱、進入/退出活動、內部轉換、子狀態和延遲事件 等五個部分組成
•狀態機 是計算機科學理論的一部分,但UML中的狀態機模型主要是基於David Harel所做的擴展,是用來展示狀態與狀態之間轉換的圖
•如何閱讀狀態機圖
閱讀最簡單的狀態圖
•最為核心的元素無外乎是兩個:一個是用圓角矩形表示的狀態 (初態和終態例外);另一個則是在狀態之間的、包含一些文字描述的有向箭頭線,這些箭頭線稱為轉換
轉換的五要素
•源狀態:即受轉換影響的狀態
•目標狀態:當轉換完成后對象的狀態
•觸發事件:用來為轉換定義一個事件,包括調用、改變、信號、時間四類事件
•監護條件:布爾表達式,決定是否激活轉換、
•動作:轉換激活時的操作
讀圖小結
•與狀態off相關的轉換有兩個,其觸發事件都是turnOn,只不過其監護條件不同。如果對象收到事件turnOn,那么將判斷壺中是否有水;如果[沒水],則仍然處於off狀態;如果[有水]則轉為on狀態,並執行“燒水”動作
•而與狀態on相關的轉換也有兩個,如果“水開了”就執行turnOff,關掉開關;如果燒壞了,就進入了終態了
復雜轉換
轉換類型 |
描述 |
語法 |
外部轉換 |
對事件做出響應,引起狀態變化或自身轉換,同時引發一個特定動作,如果離開或進入狀態將引發進入轉換、離開轉換 |
事件 ( 參數 )[ 監護條件 ]/ 動作 |
內部轉換 |
對事件做出響應,並執行一個特定的活動,但並不引起狀態變化或進入轉換、離開轉換 |
事件 ( 參數 )[ 監護條件 ]/ 動作 |
進入轉換 |
當進入某一狀態時,執行相應活動 |
entry/ 活動 |
退出轉換 |
當離開某一狀態時,執行相應活動 |
exit/ 活動 |
閱讀帶有復雜轉換的狀態圖
只有動作描述,進入和退出和操作方法寫在了里面
各種轉換的區別
•進入和退出轉換 :當進入一個狀態時,執行某個動作;或當退出某個狀態時,執行什么動作。這時就可以使用進入和退出轉換 來表示
•內部轉換 :用來處理一些不離開該狀態的事件
活動與延遲事件
•活動:當對象處於一個狀態時,它一般是空閑的,在等待一個事件的發生。但是某些時間,你可能希望描述個正在進行的活動。在處於一個狀態的同時,對象做着某些工作,並一直繼續到被某個事件中斷
• 延遲事件:延遲事件是一種特殊的事件,它是指該事件不會觸發狀態的轉換,當對象處於該狀態時事件不會丟失,但會被延遲執行。例如,當E-mail程序中正 在發送第一封郵件時,用戶下達發送第二封郵件執令就會被延遲,但第一封郵件發送完成后,這封郵件就會被發送。這種事件就屬於延遲事件
復合狀態表示法
順序復合狀態圖
監護條件為“應答音 ”,代表已連接。
並發復合狀態圖
三種評測方式
歷史
•“一個圓圈中加上字母H”,是用來表示歷史狀態的。
它的含義是:當從狀態“結賬”和“顯示購物車”返回子狀態“顯示索引信息”時,將進入的是離開時的歷史狀態。也就是說,轉到購物車或結賬區之后,再回到“瀏覽目錄”的頁面時,其中的內容是不變的,仍然保留原來的信息。
子狀態機
•將子狀態機單獨定義,並對其進行命名(通常以大寫字母開頭),然后在需要使用的地方來引用它
引用C狀態機
•如何繪制狀態機圖
繪制狀態機圖
•繪制狀態機圖的理想步驟是:尋找 主要的狀態,確定狀態之間的轉換 ,細化 狀態內的活動與轉換,用復合狀態來展開細節
•尋找主要狀態:對於航班機票預訂系統而言,顯然包括的狀態主要有 -- 在剛確定飛機計划時,顯然是沒有任何預訂的,並且在有人預訂機票之前都將處於這種“無預訂”狀態 -- 對訂座而言顯然有“部分預訂”和“預訂完”兩種狀態 -- 而當航班快要起飛時,顯然要“預訂關閉” 總結一下,主要有四種狀態:無預訂、部分預訂、預訂完以及預訂關閉
•確定狀態間轉換
表格橫向是轉出
表格縱向是轉入
源目標 |
無預訂 |
部分預訂 |
預訂完 |
預訂關閉 |
無預訂 |
預訂 () |
不直接轉換 |
關閉 () |
|
部分預訂 |
退訂 (), 使預訂人 =0 |
預訂 (), 無空座 |
關閉 () |
|
預訂完 |
不直接轉換 |
退訂 () |
關閉 () |
|
預訂關閉 |
無轉換 |
無轉換 |
無轉換 |
•細化狀態內的活動與轉換
•使用復合狀態
•狀態機圖應用說明
•對對象生命周期建模 :主要描述對象能夠響應的事件、對這些事件的響以及過去對當前行為的影響
•對反應型對象建模:這個對象可能處於的穩定狀態、從一個狀態到另一個狀態之間的轉換所需的觸發事件,以及每個狀態改變時發生的動作
•狀態機圖既可以用來表示一個業務領域的知識,也可以用來描述設計階段對象的狀態變遷
•本章小結
•首先介紹了“狀態”的概念和UML表示法,然后引入了狀態機的概念
•通過三個例子逐一說明簡單狀態機圖、包含復雜轉換的狀態機圖以及包含復合狀態的狀態機圖的閱讀方法
•,緊接着通過一個航班機票預訂系統來闡述了狀態圖的繪制過程:確定狀態,分析狀態間的轉換,細化活動與內部轉化,通過復合狀態來組織
•簡明地點出狀態圖的兩大功能:對對象的生命周期建模以及對反應型對象的行為建模
內容出自:UML 面向對象設計PPT