2012-07-08 82 views
2

基於Wikipedia,我可以有一個分層狀態分解,其中我有多個正交區域,它們可以獨立地改變狀態。UML狀態機:如何退出正交子區域?

該圖顯示瞭如何輸入正交區域。我假設條目在所有地區平行發生。我想知道的是,你如何表達出口?如果每個地區都有退出,那麼當第一個孩子地區退出或全部退出時,全球父母國家會退出嗎?我想表達退出發生在他們有全部已退出。你如何表達全球父母國家轉移到下一個全球性國家,因爲所有的兒童地區已經退出?這是否總是隱含的?

我的具體問題是我的FSM從初始化全局狀態開始。它將多個查詢並行地異步發送到多個外部系統。只有收到每個查詢的答案後,才能繼續。因此,我將每個異步並行查詢建模爲全局初始化狀態內的正交區域。每個小孩地區都可以獨立改變狀態。當所有的孩子地區都達到最終狀態時,我可以繼續前進。

FSM將在Actor框架中實現,其中異步消息(事件)是唯一溝通的方式。

理想情況下,我希望答案指向一個示例圖像,因爲這些東西很難用文字表達。

回答

6

從正交狀態完成轉換將做的伎倆,因爲它會在所有的正交區完成時採取。

當輸入組合狀態(具有內部狀態和/或正交區域的狀態)時,每個區域從其初始狀態開始,在每個區域中使用分叉假數據開始,或者到每個區域的最後狀態狀態通過歷史假狀態輸入。退出複合狀態可以通過從其中一個內部狀態開始的轉換來完成,該狀態存在於其當前狀態的所有正交區域。如果要在機器已到達不同地區的一組狀態時退出,則還可以使用連接假狀態。

正如你所看到的,可能性幾乎是無止境的。我目前還不能添加圖像,但稍後當我手頭有一個很好的UML編輯器時,我會做。

一個現在的例子。假設你有以下狀態機: example state machine

  1. 如果兩個並行區域結束(最終節點時),然後完成過渡將採取機器從S1S5。如果
  2. 如果機器當前位於S3並且收到e1,則它將退出S1並轉至S6
  3. 如果機器在S7S8並且它們都完成,它將進入加入,然後到S6

這是我知道狀態機工作的方式。

+0

謝謝。這聽起來是正確的,但我還不知道如何繪製「連接假狀態」(因爲如果我理解正確的話,它們必須是跨區域的)。等待這個例子... – 2012-07-08 16:50:50

+1

@SebastienDiot添加了一個示例。 – vainolo 2012-07-09 10:26:10

+0

@vainolo請原諒我復活這篇文章,但你用來創建這個圖的「良好的UML編輯器」是什麼?這很美 – daltonb 2016-06-24 02:08:55