2015-02-24 62 views
1

我試圖收集信息以便能夠爲UML狀態機編程正確的轉換選擇算法。UML狀態機:轉換選擇

的UML上層建築規範(15.3.12的StateMachine)指出

僅發生在相互正交的區域可以被同時燒製的過渡。

「相互正交」意味着這些區域在相同的嵌套層次上嗎?

對於給定級別的每個狀態,將評估所有始發轉換以確定它們是否已啓用。

這聽起來像他們必須在同一個嵌套級別。對?因爲如果一個轉變是在一定的嵌套層次發現,搜索結束...

的seciton「過渡選擇算法」再一次是不完全清楚,我:

唯一的非小事正在解決各級正交國之間的過渡衝突。這是通過終止在每個正交 狀態下的搜索來解決的,一旦其任何一個組件內的轉換被觸發。

爲了使這個多一點的觸覺我創建了2種型號:

模型1

Model 1

模型2

Model 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.任何差?

回答

1

我認爲相互正交意味着過渡的副作用對彼此沒有影響。

所以在任何一個圖表中,Event1觸發的轉換可以被認爲是相互正交的,因爲轉換都包含在[A]和[B]中,並且可以同時觸發。 Event2不能像[A]內的轉換離開A和State1(因此也是[B])。

+0

所以你的解釋是: 在(活動狀態配置的)每個正交區域中,搜索(從內向外)可以啓用的轉換。如果找到了一個,我們就完成了該正交區域及其所有父母。像這樣,我們發現0 .. *轉換。 現在,如果這些轉換都不會導致其他轉換的任何目標狀態被遺留(這將是一種「副作用」),那麼轉換會觸發? 如果有人產生副作用:狀態機是否不合格,轉換是否觸發,或轉換搜索是否繼續(我不知道如何)? – DrP3pp3r 2015-02-26 06:55:56

+0

從State3到State2的轉換將產生以下效果:退出State3,退出區域[A],退出State1(這也會導致區域[B]退出),請輸入State2。 由於這退出區域[B],並且從狀態7到狀態5的轉變在區域[B]中,所以它們不是相互正交的。 UML規範在聲明相互正交的轉換「可能同時觸發」時,暗示了優化的機會。 – Mesmo 2015-02-26 22:52:39

+0

如果您嘗試同時觸發,則可能會導致非法的活動狀態配置,因爲區域[A]將處於非活動狀態且區域[B]處於活動狀態。 所以你需要評估和順序運行它們;如果先選擇區域[A]中的轉換,那麼當它退出狀態1時,區域[B]中的一個不會觸發。如果首先測試區域[B],則其過渡將會觸發,然後區域[A]中的過渡也會觸發。 – Mesmo 2015-02-26 22:56:17