1、狀態圖引言與基本概念併發
1. 引入異步
² 對事物所處的狀態及其變遷的考慮spa
² 大多數事物在其生命週期中經歷了不一樣的階段;線程
² 事物在其生存階段,按次序遞進;orm
² 在現實世界中,存在着引發事物狀態間的遞進(或者代表它已經遞進)的事變;對象
² 對象在一段有限的時間內,位於某個狀態中;接口
² 事物從一個階段到另外一個階段的遞進是即時的;生命週期
² 當事變/事件發生時,事物可能須要採起一些動做。事件
事物的通常生命週期形式開發
事物的通常生命週期形式
Sally Shlaer & Stephen Mellor(1988)
週期性生命週期
如:飛機、微波爐
出生-死亡生命週期
人,糖
狀態機與對象——對象與線程
•被動對象: 依賴外力 (線程的執行)(下圖左)
•主動對象: 自動 (自身的線程的執行)(下圖右)
基本狀態圖
2.1基本概念
狀態
《對象技術詞典》1995:對象狀態(object state)
對象或者類的全部屬性的當前值。
對象的每個屬性值的任何一點的變化都被理解爲對象處於不一樣的狀態。對象的狀態數量將是巨大的,甚至是無窮的。在系統開發 中認識和辨別對象這麼多狀態既無可能亦無必要。
Webster的New World Dictionary(新世界字典):
在給定時間、方法和行爲的狀況下,與某人或某件事相關的一組環境變量或屬性集。
儘管對象的狀態能夠表現爲其屬性值的變化,並非對象的每一個屬性都是決定對象狀態的屬性,而且對象的一個屬性的各類可能的取
值並不必定都成爲該對象的狀態。
《UML參考手冊》
狀態是一個對象的生命期的一個階段,在該階段中,該對象知足一些特定的條件、從事特定的活動或等待某個(些)事件。
識別一個對象具備多少狀態不能機械地根據其屬性和屬性值,而取決於完整描述對象行爲的須要。
《對象技術詞典》:
對象或者類的總體行爲(例如響應消息)的某些規則所能適應的(對象或類的)情況、狀況、條件、形式或生存週期階段。
認識和區別對象的狀態將着眼於它對對象行爲規則的不一樣影響
僅當對象的行爲規則有所不一樣時,才稱對象處於不一樣狀態
事件(觸發器)
事件 = 對可觀察的發生事情的類型,包括:
交互:
同步的對象操做調用 (調用事件)
異步的信號接收(信號事件)
即時時刻的發生 (時間事件)
時間間隔
日曆/時鐘時間
某些實體的數值上的變化 (變化事件)
儘管不一樣類型的事件的實現方式都不相同,但在狀態機圖上卻具備相同的表示,體現了狀態機圖很強的歸納和抽象機制。
事件實例 = 事件 (類型)的一個實例
在特定的即時時刻發生,沒有持續時間.
《UML參考手冊》:事件是系統執行中發生的值得注意的事情,能夠觸發狀態的轉換。同時強調事件是一種發生事情的類型,其實例——即事件的發生——稱爲觸發器。
所以在UML2.0中,事件並不顯式的出如今模型中,可是事件這個術語實際上還繼續保留着,而且還定義了好幾種具體的事件,對於在實踐中識別事件具備啓發意義。
動做(活動)
轉換
2、狀態的表示、內部轉換、延遲事件、僞狀態與最終狀態
狀態的表示
內部轉換
除了預約義的三個標號外,在全部的其它狀況中,動做標號標識觸發相應動做表達式的事件。這些事件觸發內部轉換,在語義上它們等價於自轉換,只是不退出狀態和再進入狀態,不會致使狀態的改變。
事件名(用逗號分隔的參數表)[監護條件]/ 動做表達式
延遲事件
延遲事件是指在當前狀態下暫不處理,但將推遲到該對象的另外一個狀態下排隊處理的事件。也就是說,在某些建模狀況下,可能想要識別某些事件,但延遲對它們的響應,直到之後才執行。
僞狀態
初始狀態和終止狀態都是僞狀態。
僞狀態(pseudo state) 正如其字面意義所代表的,僞狀態實際上並非一種狀態,只是爲了增強狀態機圖的可視化表示而引入的一些圖形符號,都是結點(頂點)型的圖造成分。
《UML參考手冊》中認爲這些僞狀態與通常狀態的區別是沒有內部轉換分欄,不會在該僞狀態上停留必定的時間,也不能處理事件,因此不是通常意義上的狀態,但在表示法上與通常的狀態很類似,故稱之爲僞狀態。
UML中的僞狀態
最終狀態不是僞狀態
UML還定義了另一個與終止很類似的概念——最終狀態(final state),用一個被圓圈套起來的實心圓點表示。
最終狀態代表複合狀態中的一個區域的活動已經完成,若是複合狀態有多個區域,那麼全部這些區域必須都執行完畢。
最終狀態不是僞狀態的緣由是,最終狀態能夠在一段時間內保持在該狀態下(須要等待其餘正交區域的完成),不像僞狀態那樣進入後直接轉換到其後續狀態,因此它不是僞狀態。
但它也不是通常的狀態,由於不容許有從它出發的事件觸發轉換。
3、狀態圖中的動做。活動與轉換
動做
動做是在狀態內或在轉化時所作的操做,是原子的和即時的,就是說,它在相關狀態的抽象層次上是不可間斷的。
一個動做可能:
設置或修改本對象的一個屬性
產生髮送給分析範圍以外的事件(例如,操做員、硬件設備或在另外一個系統/子系統中的對象)
執行對象的一個操做
向一個對象發送信號
調用另外一個對象(包括自身)的一個公共操做(調用擁有狀態機的對象或其餘可見的對象)
以及建立或撤消另外一個對象(包括自身)
返回一個值或值集
……
動做發生的時機:
在轉化中、在狀態的入口、在一個對象處於一個狀態的整個期間、在狀態的出口、在引發狀態轉化的事件到來時,或在沒有引發狀態轉化的事件到來時。
三種保留的動做標號
entry/進入動做
這個標號標識由相應的動做表達式規定的動做,在進入狀態時執行該動做。不能有參數或監護條件。
exit/退出動做
這個標號標識由相應的動做表達式規定的動做,在退出狀態時執行該動做。不能有參數或監護條件。
do/活動
這個標號標識正在進行的活動(「do 活動」),只要被建模的對象是在當前狀態中,或沒有完成由動做表達式指定的計算,就執行這個活動(後者的完成可能致使一個完成事件)
活動是在對象處於一個狀態中的整個階段執行的一個動做或動做的集合。活動不是原子的,在執行中能夠被事件打斷。
引起並行執行的線程直到:
動做完成
經過一個向外的轉換離開了該狀態
如do/op1(a);op2(b);op3(c)
狀態轉換
轉換是兩個狀態之間的一種關係,表示當一個特定事件出現時,若是知足必定的條件,對象就從第一個狀態(源狀態)進入第二個狀態(目標狀態),並執行必定的動做。轉換自己也是原子的。
舉例
4、結合點與選擇點
守衛條件
轉換的條件執行
交匯點( junction)——靜態條件分支
用於將多種轉換鏈接在一塊兒,用於構造狀態之間複雜的轉換路徑。
選擇(Choice)——動態條件分支
守衛條件在到達決策點的瞬時被求值
選擇和接合比較
儘管選擇和接合做用類似,但也有些細微的區別。
當一條轉換路徑中包含選擇僞狀態結點時,在進入選擇結點前會激發響應動做會進行計算,在退出選擇結點後根據守衛條件肯定轉換到的具體的狀態,但建模者必須確保在任何狀況下進入選擇結點後必須有一條退出該選擇結點的路徑。
而接合結點就不存在這樣的風險,由於全部的條件在轉換激發前都被事先計算。
狀態圖
一個狀態圖 描述一個對象在其生命期內響應事件所經歷的狀態序列,以及對這些事件所作出的反應。
一般用狀態圖描述類的行爲,也能夠用它描述其它模型實體(如用況、參與者、子系統、操做或方法)的行爲。
在大多數狀況下,僅對這樣的對象的創建狀態圖:它具備清晰的生命期,對其語境外部的事件能做出反應,且它的當前行爲受它的過去行爲的影響。
用適當的狀態和僞狀態符號表示狀態機圖中的狀態和各類其它類型的
頂點,而通常用鏈接頂點的有向弧表示轉換。
狀態圖的組成
5、複雜的狀態圖、歷史狀態
組合狀態
組合狀態是含有子狀態的狀態,是由兩個或多個子狀態構成的狀態。
狀態的嵌套結構包括不相交(或,順序活動)或併發(與,併發活動)子狀態。任何組合狀態的子狀態也能夠是這兩種類型的組合狀態。
新建立的對象,從最外層的初始僞狀態開始,執行其最外層的缺省轉換。若對象轉換到了最外層的終結狀態,則對象的生命期終止。
一個狀態內的各區域能夠有初始僞狀態和終止狀態。到封閉狀態的轉換表示到其初始僞狀態的轉換。到最終狀態的轉換表示封閉區域中的活動的完成。在全部併發區域中的活動的完成,表示經由封閉狀態的活動的完成,並觸發封閉狀態上的完成事件。
完成轉換
由完成事件激發
當組合狀態機終止時自動產生
激發規則
兩個或更多的轉換能夠具備相同的事件激發
最內面的轉換優先
無論事件激發轉換與否,都將被丟棄
動做的次序:複雜的例子
歷史狀態
返回到之前訪問的等級狀態
淺歷史狀態:保存並從新激貨活與歷史狀態處於同一個嵌套層次上的狀態.
深歷史狀態:保存複合狀態中更深的嵌套層次的狀態.
併發狀態
對相同實體的多種同時的視角
正交區:多種併發描述的合成
轉換的分支與結合點
用來表示進入或離開正交區
創建狀態圖的策略(UML 用戶指南 第二版)
設置狀態機的語境
找出相臨的類(關聯與依賴)
創建初始狀態和終止狀態。
決定這個對象可能響應的事件。
對象的接口(屬性與操做)
可能的交互對象與事件
從初態開始到終態,列出這個對象可能處於的頂層狀態.用適當的事件觸發的轉換將其鏈接起來.並在轉換中添加動做.對於內部轉換也是如此。
識別各狀態的進入或退出的動做
若是須要,從這個對象的高層狀態開始,而後考慮各自的可能子狀態,用子狀態進行擴充
檢查狀態圖中的事件與對象接口中的事件相匹配
檢查動做是否由對象的關係\方法和操做所支持
跟蹤狀態圖,看是否達到指望的動做順序
檢查狀態圖
檢查在狀態機中提到的全部事件是否和該對象接口所指望的事件相匹配。相似地,檢查該對象的接口所指望的全部事件,是否都被狀態機所處理。最後,找出明顯地想忽略的事件的地方。
檢查在狀態機中提到的全部動做是否被閉合對象的關係和操做所支持。
經過狀態機,跟蹤檢查事件的順序和它們的響應,尤爲要努力地尋找那些未達到的狀態和致使狀態機中止的狀態。
在從新安排狀態機後,按所指望的順序再一次檢查,以確保你沒有改變該對象的語義。