關于遷移的介紹
14.2.3.8 遷移
遷移是一個從單個源頂點開始到單個目標頂點結束的單方向圓弧(源和目標可能是同一個頂點),它定義了狀態(tài)機行為的一段。它可以有關聯(lián)的效應行為,這個效應行為在遷移被通過(執(zhí)行)的時候執(zhí)行。
注意:通過遷移的期間是無定義的,允許有不同的語義解釋,包括”0“和非"0"時間。
遷移是作為更復雜的復合遷移的一部分被執(zhí)行的。這個復合遷移使狀態(tài)機從一個穩(wěn)定狀態(tài)構成執(zhí)行到另一個。符合遷移的語義在后面定義。
在執(zhí)行的過程中,一個遷移實例被說成是:
?到達,當狀態(tài)機執(zhí)行到達它的源頂點(即,它的源狀態(tài)處于活動狀態(tài)構成);
?通過,當它被執(zhí)行(連同任何的關聯(lián)效應行為)
?完成,當它到達目標頂點之后
遷移可以擁有多 個觸發(fā)條件,每個觸發(fā)條件定義了一個事件,當事件發(fā)生被發(fā)送時,可以觸發(fā)遷移的通過。如果發(fā)送的事件發(fā)生與事件類型匹配,就可以說觸發(fā)條件處于有效狀態(tài)。 當一個遷移定義了多個觸發(fā)條件時,它們邏輯上是分離的,也就是說,只要它們中的任何一個處于有效狀態(tài),遷移就會被觸發(fā)。
14.2.3.8.1與遷移源相關的遷移種類
遷移的語義決定于它和它的源頂點的關系,根據遷移的種類屬性的值,存在三種可能:
?kind為external意味著遷移退出它的源頂點。如果該頂點是狀態(tài),執(zhí)行這個遷移會導致那個狀態(tài)所有的退出行為被執(zhí)行。
?kind為local和external相反,意味著遷移不退出包含它的狀態(tài)(而且,因此,包含該遷移的狀態(tài)的退出行為不會被執(zhí)行)。但是對于局部遷移來講,目標頂點必須和源頂點不同。局部遷移只能存在于組合狀態(tài)中。
?kind為internal是局部遷移的特殊情況,它是一個自遷移。(即源狀態(tài)和目標狀態(tài)相同),就是狀態(tài)從未退出(而且也沒有重新進入),它意味著當這個遷移執(zhí)行的是有,沒有進入和退出行為被執(zhí)行。這種類型的遷移只有在源頂點是狀態(tài)是才可以定義。
14.2.3.8.2高級(組)遷移
如果遷移的源頂點為組合狀態(tài),那么稱 之為高級或組遷移。如果是外部遷移,組遷移的結果是退出組合狀態(tài)的所有子狀態(tài),從活動狀態(tài)構成最內層狀態(tài)開始執(zhí)行所有定義了的退出行為。如果是局部遷移, 遷移源狀態(tài)的退出遷移和遷移目標狀態(tài)的進入行為將會被執(zhí)行,包含它們的狀態(tài)退出遷移和進入遷移則不會被執(zhí)行。
14.2.3.8.3完成遷移和完成事件
完成遷移是一種特殊的遷 移,它擁有一個隱含的觸發(fā)條件。激活這個觸發(fā)條件的事件被稱為完成事件,它表示所有所有與完成遷移的源狀態(tài)關聯(lián)的行為都已經完全地被執(zhí)行。在簡單狀態(tài)的情 況下,當關聯(lián)的進入和doActivity行為結束執(zhí)行時會生成一個完成事件。如果上述行為沒有被定義,完成事件在進入狀態(tài)時生成。對于組合或者子狀態(tài)機 狀態(tài),完成事件在下列情況下產生:
?所有的內部活動(即,進入和doActivity行為)已經執(zhí)行完畢,而且
?如果是組合狀態(tài),那么它的所有正交區(qū)域都已經執(zhí)行到完了狀態(tài),或者
?如果是子狀態(tài)機狀態(tài),那么子狀態(tài)機已經執(zhí)行到完了狀態(tài)。
完成事件有優(yōu)先發(fā)送權。也就是說,它們在事件池中等待處理的所有事件發(fā)生之前被發(fā)送。如果有兩個或多個完成事件對 應同時執(zhí)行的多個正交區(qū)域(即都是同一個事件發(fā)生的結果),這些完成事件被處理的順序無定義。一個狀態(tài)機中所有的最頂層區(qū)域的完成對應狀態(tài)機的行為的完成 并且導致狀態(tài)機的終止。
遷移監(jiān)護條件
遷移有一個關聯(lián)的監(jiān)護約束。如果遷移的監(jiān)護條件的演算結果為假,則遷移無效。監(jiān)護條件在包含它的復合遷移有效之前進行演算,除非它們屬于源自選擇偽狀態(tài)的遷移。在后面的情況中,監(jiān)護條件在遷移到選擇點時進行演算。沒有監(jiān)護條件的遷移被看作是擁有一個永遠為真的監(jiān)護條件。
完成遷移也可以有監(jiān)護條件。
監(jiān)護約束可以包含對當前狀態(tài)機的正交狀態(tài),或者是某些可訪問對象的明確設計的狀態(tài)(例如”處于狀態(tài)1“,或 者"不處于狀態(tài)2“)進行檢查。狀態(tài)名可以被嵌套狀態(tài)和包含它們的區(qū)域完全地限定,這時得到的是 “RegionA::State1::Region1::State2::State3”形式的路徑名稱。這種方法可以在不同組合狀態(tài)區(qū)域中存在相同的狀 態(tài)名稱時使用。
14.2.3.8.4復合遷移
像前面說明的那樣,當一個事件觸發(fā)了一個有效的遷移,或者生成了一個狀態(tài)機執(zhí)行,就可以開始一 組相連和嵌套的遷移和頂點的遍歷,直至到達了某個穩(wěn)定狀態(tài)構成。在通常的情況下,這個遍歷的蹤跡,就是所謂的復合遷移,可以被表現(xiàn)為一個非循環(huán)的,定向的圖。這個圖的根(源)可以下列中的某一個:
?擁有一個或多個觸發(fā)條件的遷移。
?完成遷移。
從來自不同的正交區(qū)域聚集到共同的匯合偽狀態(tài)上的一組遷移(可能包括完成遷移)
始于最頂層區(qū)域中的初始偽狀態(tài)的遷移(即被狀態(tài)機擁有的區(qū)域);這個變體只適用于狀態(tài)機實例被創(chuàng)建的情況。
當執(zhí)行中的遷移 以默認方式進入到一個包含多個正交區(qū)域的狀態(tài)時為每個區(qū)域生成了一個單獨的分支,或者遇到了分叉?zhèn)螤顟B(tài),都可以說復合遷移的執(zhí)行發(fā)生了分支行為。復合遷移 執(zhí)行的全部行為是一組部分有序的與遍歷經過的元素關聯(lián)的行為的執(zhí)行,次序由到達元素(頂點和遷移)的順序決定。例如,如果進入復合狀態(tài)的遷移終止于該狀態(tài) 的子狀態(tài),那么遷移的效應行為將會在復合狀態(tài)的進入行為之前,子狀態(tài)的進入行為之后執(zhí)行。如果在遷移過程中遇到了分叉?zhèn)螤顟B(tài),那么每個離開分支的效應行 為,至少從概念上是同時執(zhí)行的。
如果到達的選擇或匯合點擁有多個帶有監(jiān)護條件的離開遷移,那么監(jiān)護條件的演算結果為真的遷移會被選中。如果結果為真的監(jiān)護條件超過一個,其中的一個會被選中。做出這種選擇的算法無定義。當遷移離開一個選擇偽狀態(tài),如果沒有結果為真的監(jiān)護條件,那么模型是病態(tài)的。
14.2.3.8.5遷移所有權
雖然包含它的區(qū)域直接或間接地被狀態(tài)機擁有,但是遷移的所有者沒有被明確地要求。一個推薦的擁有者是包含它的源頂點和目的頂點的最內層區(qū)域。