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





