state diagram specification狀態圖/狀態機(OMG)

14.2.3 Semantics

14 StateMachines

14.1 Summary

狀態機不只使用有限狀態機的機制對具有事件驅動行爲的系統建模以外,也表達了系統的Behavior,以及交互細節(protocol)。按照具體的概念,大概能夠分爲兩種,behavior
state machine和protocol state machine.node

14.2 Behavior StateMachine

14.2.1 Summary

14.2.2 Abstract Syntax

14.2.3 語義(Semantics)

14.2.3.1 StateMachine

  behavior StateMachine包含一個或多個Region,每一個Region是一個節點的集合,節點之間經過一些弧線鏈接,這些弧線表明transition。State machine的運行經過事件Event驅動。事件隊列處理一個Event,觸發狀態圖中對應的transition,而後整個圖從一個狀態到另外一個狀態,一個Region到一個Region。在狀態遷移的過程當中,狀態圖實例執行相關狀態的Behavior(transition effects,state entry and state exit Behaviors,etc.)
  若是狀態機存在一種BehavioredClassifier context,則該Classifier定義了該狀態機的Signal Triggers和CallEvent triggers.Signal Triggers and CallEvent Triggers 經過Receptions and Operations of this Classifier來定義。主要用來定義狀態機的message event Triggers
  若是狀態機沒有BehavioredClassifier,也就是說它的Triggers不和Classifier的Receptions,Operations耦合。它的好處是能夠將狀態圖做爲模板,而Triggers做爲模板參數。這樣狀態圖能夠被不一樣的Classifiers(其中的CallEvent or SignalEvent Triggers)複用。
  因爲事件驅動的特色,狀態機的執行就是在transit和state之間切換,當一個事件觸發後,進入transit。
Note.當處於state狀態時,doActivity Behavior也會執行算法

14.2.3.2 Regions

Region(區域)指示了一個Behavior片斷,它可能與它的正交區域併發執行.若是兩個或多個區域被相同的狀態或狀態機(Region位於頂層的時候)所包含,那麼它們彼此是正交的。當狀態機執行進入Region所屬的狀態,那麼Region變爲Active(開始執行),或者當Region直接被狀態機所擁有,而所屬的狀態機能夠執行時,Region也變爲Active。每一個區域擁有一組頂點和轉變,它們決定了區域中的behavioral flow。Region可能有本身的initial僞狀態和FinalState。編程

  Region激活分爲隱式和顯式;併發

  • 隱式(從Regsion中得initial Pseudostate開始執行)編程語言

    1. (local or external)transition 鏈接到Region的父狀態ide

    2. top level Region,一個狀態機開始執行this

  • 顯式
    transition鏈接到Region內部的狀態或僞狀態線程

顯式激活致使並行Region的其餘Region是隱式激活,該Region顯式code

隱式激活意味着源自該Region的initial僞狀態的Transition開始執行.若是Region內沒有inital僞狀態,報錯!
顯式激活:當一個正交狀態的一個Region被顯式激活時,會致使它全部正交的Region被隱式激活。除非這些Region也是被顯式進入(多個正交的區域能夠經過來自相同的fork僞狀態的Transition而顯式地被並行進入)。cdn

14.2.3.3 Vertices

  Vertex是個抽象的概念,表明狀態圖裏的各類類型的node(State,Pseudostates,ConnectionPointReference).它是能夠做爲Transition的起點或終點的全部類型node的總稱。定義的語義取決於它所表明的具體種類的節點。僞狀態和鏈接點引用是過渡的(transitive),(a compound transition execution simply passes through them, arriving on an incoming Transition and leaving on an outgoing Transition without pause),狀態和FinalState表明了穩定的頂點,當狀態機執行進行到它們時,會停留直到觸發一個可以使其進入一個不一樣狀態的事件出現.不一樣類型的頂點語義在下面描述。

14.2.3.4 States

  
State是對一個執行過程當中靜態的場景創建的模型。

14.2.3.4.1 Kinds of States

以下種類的狀態是被區分的:

  • 簡單狀態(isSimple=true)

  • 組合狀態(isComposite=true)

  • 子狀態機狀態(isSubmachineState=true)

簡單狀態沒有內部的Vertex和Transition。組合狀態至少包含一個Region,而一個子狀態機狀態引用了整個狀態機,你能夠理解爲將一個狀態機嵌入到該狀態中。一個組合狀態能夠是一個簡單的組合狀態(只有一個Region)或是一個擁有多個Region的正交狀態(isOrthogonal=true)。例如,圖14.9中的「CourseAttemp」狀態是一個只有一個區域的組合狀態,而「Studying」是一個包含三個區域的組合狀態。

被組合狀態的一個區域包含的任意狀態都稱爲該組合狀態的子狀態。
「直接子狀態」: 沒有被其它子狀態包含的子狀態,不然被稱爲「間接子狀態」。

14.2.3.4.2 State configurations

  一個表示當前狀態機實例在運行的過程當中,全部處於active的state的集合。例如圖14.9中所描繪的狀態機執行的一個Active狀態配置是:
<CourseAttempt - Studying – (Studying::Lab2,Studying::TermProject, Studying::FinalTest)>
一個執行的狀態機實例每次只能正好處於一個狀態配置,該狀態配置稱爲它的活躍狀態配置。在對與狀態機的觸發器匹配的事件出現的響應下,狀態機執行被表現爲從一個活躍狀態配置到另外一個活躍狀態配置。一個State若是是configuration得一部分,那它就是active.
當知足以下條件是,一個狀態配置被稱爲是穩定的:

  • 在當前configration下沒有Transition激活

  • 配置中的全部entry行爲都執行完畢(doActivity行爲除外,它們可能能在執行)

在被建立和執行完它的initial Transition後,狀態機老是處於某個狀態配置。然而,由於狀態多是層級(hierarchical)狀態而且伴隨Transition和State執行,某些關聯它們的Behavior(如:entry,exit,etc),所以,「進入」一個層級化的狀態配置涉及一個動態的過程,該過程只會在達到一個穩定的狀態配置後才中止。這爲精確的指明狀態機什麼時候位於一個狀態配置的某個特定狀態製造了一些潛在的模糊性。狀態機什麼時候被認爲「處於」一個狀態和「離開」一個狀態的規則分別在「進入一個狀態」和「離開一個狀態」部分進行描述。

14.2.3.4.3 State entry, exit, and doActivity Behaviors

狀態能夠關聯一個entry(入口)行爲。它會在狀態經過一個external Transition被進入時執行。此外,狀態還能夠關聯一個exit(離開)行爲,若是定義了這個行爲,它會在狀態被離開時執行。
狀態還能夠關聯一個doActivity行爲。該Behavior在狀態被進入(但要在狀態的Entry Behavior執行結束後)時開始執行,而且與該狀態關聯的其它Behavior併發執行,直到:

  • 它結束(此時產生一個完成事件)

  • 狀態被離開,此時,doActivity行爲的執行被放棄

一個狀態的doActivity行爲的執行不受該狀態的內部遷移發生的影響。

14.2.3.4.4 State history

狀態歷史(history)的概念是由David Harel在最初的狀態圖形式模型中引入的。它被用來保存一個Region在上次退出時的state configuration。Region能夠恢復它上一次退出時的狀態配置。例如:當該Region從新Active(從處理一箇中斷返回),或者有一個返回到它的歷史的內部轉變。(This is achieved simply by terminating a Transition on the desired type of history Pseudostate inside the Region)。該功能的好處是它消除了用戶顯式地跟蹤歷史的須要,這能夠顯著的簡化狀態機模型。
提供了兩種歷史僞狀態:

  • 深度歷史(deepHistory)
    表明了對區域最近一次訪問的完整狀態配置。一個Transition若是鏈接到deepHistory的話,表明着一個Transition鏈接在所保存的state configuration的最深層的State上,包括執行沿途遇到的全部Entry Behavior

  • 淺歷史(shallowHistory)
    表明只返回到最近一次的狀態配置的最頂層子狀態,使用缺省入口規則進入

特殊狀況
當一個Transition終結在一個歷史僞狀態上,而且該狀態以前沒有被進入過(即沒有歷史)或已經到達了它的FinalState,那麼可使用缺省歷史機制來強制一個Transition終結在某個特定的子狀態上。具體來講,就是畫一個Transition,它源自歷史僞狀態,終結於包含該歷史僞狀態的Region的一個特定頂點(即缺省歷史狀態)。若是沒有定義缺省歷史Transition,那麼該區域的標準缺省入口按照以下的解釋執行:

  • 延遲事件
    狀態能夠規定在本狀態內被延遲的事件類型集合,只要該狀態一直活躍,那麼這些類型的事件出現就不會被派發,而是一直停留在事件池,直到下面的狀況發生:

  • 到達一個這些事件類型再也不被延遲的state configuration

  • 某個延遲的事件類型是一個Transition的觸發器,而且該Transition的源是該延遲狀態

事件可能被一個composite state或subStateMachine所延遲,此時,只要該組合狀態仍處於active state configuration,那麼該事件就一直被延遲。

14.2.3.4.5 Entering a State

  進入一個狀態所表明的語義是不一樣的,它依賴所進入狀態的類型(composite state/simple state/..)和它進入的方式。可是它們有一點是相同的,即當incoming Transition的effect Behavior完成後,Target State的entry Behavior才能執行。entry Behavior完成後,doActivity Behavior才能執行。而後若是Target State是composite的的話,它的substate的entry Behavior會和它的doActivity並行執行。
  上面描述了進入simple state的語義。對於composite state with a single Region的狀況:

  • _Default entry_:an incoming Transition鏈接到一個composite state的輪廓上(沒有進入state內部)。若是composite state內部存在一個init Pseudostate,則在執行entry Behavior和fork一個線程來執行doActivity Behavior後,執行init Pseudostate的default Transition。若是沒有init Psedostate,報錯no init Pseudostate definded

  • _Explicit entry_:an incoming Transition鏈接到composite state的substate,表明substate處於active,composite state的entry Behavior執行後,直接執行substate的entry Behavior。該規則支持遞歸。

  • _Shallow history entry_:an incoming Transition鏈接到一個composite state的淺歷史僞狀態上,那麼活躍的子狀態稱爲該次訪問以前最近一次活躍的子狀態,除非:

    1. 最近一次的活躍子狀態是FinalState

    2. 這是該狀態的第一次被訪問

    3. 在上述二者狀況下,若是從該淺歷史僞狀態定義了一個缺省歷史轉變,那麼就使用 它。不然,應用缺省的狀態進入

  • Deep history entry:除了目標僞狀態的類型是深歷史而且須要遞歸地將規則應用到上次active state configuration的全部層次上外,它與淺歷史的規則是相同的.

  • Entry point entry:an incoming Transition鏈接到一個composite state的entry point,那麼在執行完composite state的entry Behavior後,執行從entry point連線到其餘state的Transition.

若是組合狀態是一個具備多個區域的正交狀態,它的每一個區域都會被缺省或顯式地進入。如
果轉變終結在組合狀態的邊上(即沒有進入該狀態),那麼全部的區域使用上面所說的缺省
進入規則來進入。若是轉變顯式地進入一個或多個區域,那麼這些區域被顯式進入,其它的
被缺省進入。
無論狀態是如何被進入的,狀態機已經認爲處於這個狀態,即便這個狀態的任何entry Behavior 或effect Behavior(若是定義的話)還沒開始執行

14.2.3.4.6 Exiting a State

當離開一個狀態的時候,無論它是simple仍是composite,離開所涉及的最後一步是執行該狀態的exit Behavior,若是它的doActivity還沒執行完的話,在exit Behavior執行以前,doActivity會被中斷。

當從一個組合狀態離開時,離開是從當前活躍狀態配置的最深層狀態開始的。若是離開是通 過一個exit Point僞狀態開始的,那麼當終結於exit Point的Transition的effect Behavior執行後,執行復合狀態的exit Behavior;
當從一個正交狀態離開時,它的全部區域都被離開。此後,該複合狀態的exit Behavior被執行。
無論狀態是如何被離開的,只有在該狀態的exitBehavior(若是定義的話)執行完畢後,狀態機才被認爲是離開的這個狀態。
被封裝的組合狀態
在一些建模場景中,對一個組合狀態進行封裝頗有用,經過不容許轉變直接穿過該狀態到達
它的內部節點來實現.在封裝中,一般須要將組合狀態的內部元素綁定到incoming/outgoing Transitions,這經過entry Point和exit Point僞狀態來實現。
entry point是incoming Transition的終點,以及composite state內部Transition的起點。該composite state的entry state在incoming Transition的effect Behavior和outgoing Transition的effect Behavior之間。
exit point和entry point相反,

14.2.3.4.7 Submachine States and submachines

子狀態機是狀態機規約能夠被屢次複用的一個手段。它與被封裝的組合狀態相似,也須要把
incoming/outgoing Transitions與其內部的頂點進行綁定。然而,被封裝的組合狀態和它的內部元素是定
義在所屬的狀態機內的,而子狀態機就像編程語言中的宏,是不一樣的行爲規約,可能定義在不是所使用的上下文中。所以,它須要更加複雜的綁定。這經過子狀態機狀態 (即,isSubmachineSate=true的狀態)的概念來完成,它表明了對相應的狀態機的引用。鏈接點引用的概念用於支持子狀態機狀態與所引用的狀態機之間的綁定。鏈接點引用表明了子狀態機狀態上的一個點,轉變能夠在此incoming/outgoing。每一個鏈接點引用與所引用的狀態機的相應Entry/Exit Point 相匹配。這爲子狀態機調用和它的規約之間提供了一個必需的綁定機制。
子狀態機狀態暗示了把相應的狀態機規約像宏同樣插入.所以,語義上等同一個組合狀態。被引用的狀態機的區域是該組合狀態的區域。入口、離開和effect行爲以及內部的轉變都包含 在此子狀態機狀態中。
注意
每一個子狀態機狀態都表明了一個子狀態機的不一樣的實例化,即便是兩個或更多子狀態機 狀態引用相同的狀態機。
被引用的狀態機經過經過它的(initial) Pseudostate 或它的entry point來進入。經過初始僞狀態進入與通常的組合狀態相同。入口點與junction僞狀態(在組合狀態是正交時是fork)等價:經過入口點進入意味着組合狀態的入口行爲被執行,跟着的是從入口點到組合狀態中目標頂點 的轉變。爲使規約是良構的,與入口點轉變關聯的guards必須爲真。

相似的,被引用的狀態機能夠做爲以下的結果而被離開:

  • 到達了它的FinalState,

  • 源自子狀態機狀態的Transition的觸發,

  • 經過它的任離開點。

14.2.3.5 ConnectionPointReference

上面指出,鏈接點引用表明了對被該子狀態機狀態所引用的狀態機中定義的入口/離開點的使用。子狀態機狀態的鏈接點引用能夠用做轉變的源/目的。它們表明了進入或離開由該子狀態機狀態所引用的狀態機。
entry point ConnectionPointReference 做爲Transition的target表明經過相應的entry point僞狀態進入被引用狀態機的Region

14.2.3.6 FinalState

  FinalState是Psuedostate的一種,表明所在Region的完成。

  • 表明one of orthogonal Regions完成了

  • 表明top level Region完成,也就是整個狀態機結束

14.2.3.7 Pseudostate and PseudostateKind

  • initial:
    表明Region的起點,是Regsion隱式激活後執行的起點。

  1. 一個Region只能有一個initial

  2. 一個initial只能鏈接一個Transition

  3. Transition不能有guard和trigger,能夠有effect Behavior

  • deepHistory
    History表明一個變量,它表明了所屬Region中最近active state configuration,終結在此類僞狀態上的Transition意味着恢復Region到以前的相同state configuration,可是 進入狀態的全部語義都要執行.在所復原的state configuration中 全部狀態的Entry Behavior都要按順序執行,最外層的先執行。深歷史僞狀態只能被定義在composite state上,而且一個Region中最多隻能有一個這樣的僞狀態。

  • shallowHistory
    該類僞狀態是一種變量,它表明了所屬Region最近的活躍子狀態,而不是那個子狀態的子狀態。終結在這個僞狀態上的Transition意味着將Region復原到那個子狀態並執行全部進入一個狀態的語義。能夠今後僞狀態定義一個outgoing的Transition使其終結在組合狀態的一個子狀態上。這個子狀態就是該組合狀態的缺省淺歷史狀態。淺歷史僞狀態只能定義在composite state上,而且每一個Region最多隻能有一個這樣的僞狀態。

  • join
    將從多個orthogonal region合併來的Transition合併爲一個Vertex.

  1. 鏈接到join的Transition沒有guard和trigger

  2. 和junction相似,這裏有一個同步的功能
    其中全部的到來Transition都必須完成才能繼續執行一個outgoing的Transition

  • fork
    將一條incoming的Transition劃分爲兩條或更多終結到正交區域中頂點的Transition。從fork僞狀 態outgoing的轉變不能有guard或trigger。

  • junction
    此類僞狀態用於把多條轉變鏈接到狀態之間的複合路徑上。舉個例子,一個junction僞狀態能夠用於把多個到來的轉變合併到一個單一的流出轉變來表明一個共享 的通訊路徑。或者,它能夠用於將一條到來的轉變劃分爲具備不一樣guard約束的流出轉 變。

注意. 這些guard約束的計算在包含該僞狀態的複合轉變執行以前執行,這也是爲何它 們被稱爲靜態條件分支的緣由。 對於特定的複合轉變,可能出現轉變路徑的配置和guard值致使複合轉變不能達到一個有效的狀態配置。這種狀況下,整個複合轉變被禁止即便它的觸發器是使能的(做爲避免 出現此類狀況的一種手段,能夠在至多一條流出轉變上附加一個指示爲「else」的預約 義guard。若是其它轉變的全部guards爲假,那麼這條轉變變爲使能)。若是有多餘一個的guard爲真,只選擇一個,選擇算法沒有定義。

  • choice
    此類僞狀態與junction相似,不一樣在於它的全部流出轉變上的guard約束是動態計算的,在複合轉變到達這個僞狀態時才計算.所以,choice用於實現動態的條件分 支。它容許把複合轉變劃分爲多條可選的路徑,對路徑的選擇決策依賴於到達該選擇點以前相同複合轉變上執行的行爲的結果。若是多於一個guard計算爲真,其中一個轉變被選擇,選擇算法沒有被定義。若是沒有guards計算爲真,那麼模型被認爲是錯誤的。爲了不錯誤,推薦爲每個choice僞狀態定義一個帶有「else」預約義guard的流出轉變。

  • entryPoint
    一個狀態機或composite state的entryPoint提供了封裝狀態和狀態機內部細節的機制.

  • exitPoint
    一個狀態機或composite state的exitPoint提供了封裝狀態和狀態機內部細節的機制。終結在任意Region內的一個exitPoint的Transition意味着離開這個組合狀態或子狀態機狀態(執行與之關聯的exit行爲).若是來自正交區域的多條轉變終結在這個僞狀態上, 那麼它充當一個join僞狀態

  • terminate
    進入一個terminate僞狀態意味着狀態機的執行當即終止。狀態機不須要離開任何狀態也不須要執行任何exit行爲。正在執行的全部doAcitivity行爲都被終止。進入一 個terminate僞狀態等同於調用一個DestroyObjectAction。

14.2.3.8 Transition

Transition是一個有向弧,從源Vertex開始,終止於目標Vertex(源Vertex和目標Vertex可能相同)。而且擁有關聯的effect Behavior,當Transition被遍歷時,該effect Behavior開始執行。

NOTE Transition遍歷的時間不肯定,容許不一樣解釋器給予不一樣解釋(包括指定時間爲0,或非0)。

Transition被執行做爲Compond Transition的一部分。一個Compond Transition表明StateMachine從一個穩定的state configuration遷移到另外一個state configuration.compund Transition的語義描述以下:

在一個執行過程當中,Transition實例可能處於如下三個狀態:

  • reached, 當狀態機的執行到達源Vertex

  • traversed, 當它正在執行時(包括與之關聯的effect Behavior)

  • completed, 在狀態機執行到目標Vertex以後

一個Transition擁有多個觸發器,每一個觸發器指定事件屬性。當該事件發生後,Transition相應的觸發器就變爲使能。當一個Transition定義了多個觸發器,它們是邏輯析取(當它們中任何一個使能,Transition均可能開始執行)

14.2.3.8.1 Transition類型

Transition的語義由它的源Vertex決定,主要有三類:

  • kind=external ,

相關文章
相關標籤/搜索