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