2014-04-09 36 views
2

任何人都可以告訴我,如果下面的兩個模型(取自UML上層結構規範的第一個模型)在語義上是相同的嗎? Fork & Join versus entering parent state分叉和UML狀態機加入的語義

我正在尋找添加叉狀態和加入僞狀態類型到我的狀態機庫,這似乎是一個有用的方式來實現。

回答

0

下圖中的初始狀態和最終狀態不存在於上面。它們意味着在A1/B1狀態之前和A2/B2狀態表示上圖沒有之前的附加行爲,所以不是,它們不是等值圖。上面的圖表示SETUP狀態或轉換事件負責fork和創建2個進程A和B.底部圖表示PROCESS負責創建2個進程。

+2

既然僞狀態或最終狀態都不能進入或退出行爲,那麼'額外行爲'將來自何處? – Mesmo

+0

好問題。對我而言,它們意味着創造和刪除。 – Bruce

1

這兩個圖不等價。

用兩個首字母替換叉是沒有問題的:在上層狀態機中,A1和B1同時有效,下層也是這樣。

但是,將連接替換爲兩個最終狀態是有問題的。在大寫中,(Process,A2,B2)是Cleanup激活前的最後一個狀態配置。在每次運行中,Cleanup處於活動狀態之前,Process,A2和B2處於活動狀態。在小寫中,它是(過程,最終,最終)必須是活動的。

換句話說,(Process,A2,B2)和(Cleanup)是大寫的「鄰居」狀態配置,但它們不是小寫。有(過程,最後,最後)介於兩者之間。

「語義等價」取決於您定義的語義相關。對我而言,清理是下一步(流程,A2,B2)還是下一步。

此外

在上殼體A2和B2

必須是同時活動,是留給過程之前。在小寫字母中,沒有這種需要。跟蹤可能是...(Process,final,B1),(Process,final B2),(Process,final,final),然後處理已經完成。

+0

我的問題應該有閱讀語義等價...我有點好奇。在下圖中退出Process的'更多可能性';退出進程,當然,在完成向Cleanup過渡之前,這兩個區域都需要處於最終狀態? – Mesmo

+1

@DMM你說得對。我編輯了我的答案 – gefei

+0

感謝gefi-理解(現在我有一個計劃,將工作和保存過​​程(A2,B2)作爲最後一個狀態......) – Mesmo

0

我覺得從你的實現角度來看,它們是一樣的。這裏的其他答案只是爭論語義,但這是你在問題中提出的問題。就產量而言,它們是相同的。初始假狀態不能有觸發器或警衛,最終狀態不能有傳出轉換。除非兩個區域都已完成,否則Process組合不能退出。所以,你的Process組合基本上接管了Fork和Join僞條件的角色。