2015-11-19 49 views
2

我正在設計一個可能檢查用戶帳戶餘額的應用程序,我爲應用程序設置了一個FSM,併爲此創建了複合狀態。複合狀態下的多個觸發事件

enter image description here

我有一些問題:

  1. 這是正確的設置兩個箭頭,tranision從這個複合狀態?

  2. 這兩個tranision從creditAccountCheck發出,但我沒有設置這個狀態的箭頭,是嗎?

  3. 請隨時給我任何其他評論。

+1

狀態機並不是我的主要專長,但是不應該將'has ...'標籤寫爲帶有方括號的警衛嗎? –

+0

沒有括號它是一個觸發器,而不是衛兵https://stackoverflow.com/questions/29993065/transitions-in-uml-state-charts-better-to-use-triggers-or-guards;但我同意在這裏看守可能更合適 –

回答

3
  1. 有沒有問題,標籤的線路旁邊是一個觸發,所以一旦發生這些事件之一(擁有大量資金,(無)負平衡),然後適當的過渡將是觸發。

  2. 沒關係,將組合狀態視爲常規「accountCheck」狀態的展開視圖(畢竟,其餘的簡單的狀態也可能具有某種FSM)。

儘管規範允許從複合形狀內部過渡出去,但我會建議不要這樣做,因爲它會打破概念邊界。

如果你想明確地可視化流程,這裏有標記。

enter image description here

他們都做基本上是相同的。在你的情況下,你選擇哪一個並不重要,不管你是哪個(「缺失」轉換是隱含的 - 用常識來決定它將如何去),或者那些。如果你的狀態在複雜分支和正交狀態下更復雜,你可能需要使用更復雜的符號。

最後,「hasMoneyAndNoNegativeBalance」和「hasMoneyAndNegativeBalance」有點多餘。在這個階段你總是會有錢的,否則就不會採用「HasMoney」過渡,所以「negativeBalance」和「positiveBalance」應該是足夠的(並且更容易閱讀)。