我試圖收集信息以便能夠爲UML狀態機編程正確的轉換選擇算法。UML狀態機:轉換選擇
的UML上層建築規範(15.3.12的StateMachine)指出
僅發生在相互正交的區域可以被同時燒製的過渡。
「相互正交」意味着這些區域在相同的嵌套層次上嗎?
對於給定級別的每個狀態,將評估所有始發轉換以確定它們是否已啓用。
這聽起來像他們必須在同一個嵌套級別。對?因爲如果一個轉變是在一定的嵌套層次發現,搜索結束...
的seciton「過渡選擇算法」再一次是不完全清楚,我:
唯一的非小事正在解決各級正交國之間的過渡衝突。這是通過終止在每個正交 狀態下的搜索來解決的,一旦其任何一個組件內的轉換被觸發。
爲了使這個多一點的觸覺我創建了2種型號:
模型1
模型2
活動狀態配置:
狀態1,狀態3,State4,State7
實施例1a
在事件事件1其過渡火災的情況下?
a。只有從State7到State5的那個火力?
b。還是從State3到State8?
這兩種變化都會產生合法的活動狀態配置。 但我的理解是,一個是正確的
例1b
同爲模型2。
實施例2a
在事件事件2其過渡火災的情況下?
a。只有從State7到State5的那個火力?
b。或者還有一個從State3到State2?
在這種情況下,我會說b會導致非法的活動狀態配置。
這是否意味着該模型不合格或者只有一個轉換被解僱?
實施例2b
同樣爲模型2.任何差?
所以你的解釋是: 在(活動狀態配置的)每個正交區域中,搜索(從內向外)可以啓用的轉換。如果找到了一個,我們就完成了該正交區域及其所有父母。像這樣,我們發現0 .. *轉換。 現在,如果這些轉換都不會導致其他轉換的任何目標狀態被遺留(這將是一種「副作用」),那麼轉換會觸發? 如果有人產生副作用:狀態機是否不合格,轉換是否觸發,或轉換搜索是否繼續(我不知道如何)? – DrP3pp3r 2015-02-26 06:55:56
從State3到State2的轉換將產生以下效果:退出State3,退出區域[A],退出State1(這也會導致區域[B]退出),請輸入State2。 由於這退出區域[B],並且從狀態7到狀態5的轉變在區域[B]中,所以它們不是相互正交的。 UML規範在聲明相互正交的轉換「可能同時觸發」時,暗示了優化的機會。 – Mesmo 2015-02-26 22:52:39
如果您嘗試同時觸發,則可能會導致非法的活動狀態配置,因爲區域[A]將處於非活動狀態且區域[B]處於活動狀態。 所以你需要評估和順序運行它們;如果先選擇區域[A]中的轉換,那麼當它退出狀態1時,區域[B]中的一個不會觸發。如果首先測試區域[B],則其過渡將會觸發,然後區域[A]中的過渡也會觸發。 – Mesmo 2015-02-26 22:56:17