2014-06-21 121 views
1

考慮到這樣的情況:
如果條件的UML狀態機圖

...當一個訂單時有可用性檢查,如果傳遞的準備工作將啓動其他的順序被拒絕。

如果客戶決定啓動訂單的價格被鎖定在信用卡上的準備之前,用信用卡支付。

當準備完成的訂單交付,並且如果從所述順序的放置30分鐘以上已通過有50%的折扣。

我的疑問是如何建模的,如果在一個狀態機圖狀態,我會把它以下列方式模型,但我不知道這是正確的方式:

http://f.cl.ly/items/29250u032k0d3d3U0i0p/state2.jpg

如何我應該模擬如果狀態機圖中的條件?

+0

查看示例http://www.uml-diagrams.org/examples/online-shopping-user-account-state-diagram-example.html?context=stm-examples和http://www.uml-diagrams .org/dicom-hosted-application-uml-state-machine-diagram-example.html?context = stm-examples – xmojmr

回答

3

在UML狀態機圖上,條件與轉換關聯。該轉換具有「trigger-signature [guard]/activity」形式的3部分標籤。 Guard是有條件的,並且爲了進行轉換必須評估爲真。轉換標籤的所有3個部分都是可選的。

從您的問題描述,我可以定義3種狀態爲「等待命令」,「準備命令」和「交付訂單」。從「等待訂單」過渡到「準備訂單」,並且該過渡可以標記爲「order placed [order is available] /」。我選擇放棄這項活動,因爲從問題描述中,我沒有看到與此轉換相關的任何活動。你可以畫另一個標籤爲「order placed [order is unavailable]/refuse order」的轉換。然而,這種轉變將從「等待訂單」開始,並返回到「等待訂單」,因爲當訂單被拒絕時我們不會更改狀態。在此轉換中,我包含了refuse order活動,因爲我認爲有一些實際活動與拒絕訂單相關。

或者,我已經看到了包含決策鑽石的過渡,其中鑽石的箭頭標有trigger,鑽石中的一個箭頭標記爲[guard]/activity,而鑽石外的另一個箭頭標有[else]/activity。但我不確定這是否是技術上正確的UML。

我認爲您在準備和交付狀態的條目活動中放入的條件非常好。因爲這些條件似乎與它們進入這些狀態時發生的活動相關聯,而不是任何狀態轉換。

0

這個圖(從here拍攝)可能會幫助:

enter image description here

因此,要回答你的問題,你沒有這樣做是錯誤的,它只是一個風格和可讀性問題。據我所知,UML並沒有真正定義表示條件的標準方式。所以,只要看看最好的和合理的。

+3

您示例中的圖似乎是一個不好的例子,因爲它不是一個狀態機圖(狀態?)。它看起來更像是一個活動圖,但我甚至不確定這是否是有效的UML。 – kkrambo

+0

無論如何,狀態機圖看起來幾乎相同,基本上我想說的是,如何在UML或狀態機圖中表示條件沒有通用的標準(每個人都以不同的方式表示,包括所有的大學教科書),所以我只是向他展示一個乾淨整潔的做法。他的做法是正確的,所以我把他的問題解釋爲應該使用什麼風格。 – cnsumner

0

不可能在狀態機的狀態元素內定義條件。複習你的圖。我想,你應該把一些信息放在圖上。例如,使用choice元素來定義替代轉換路徑。或從準備和交貨狀態中爲「準備訂單」和「付款」行爲繪製詳細圖表。

並不總是可以將所有信息都放在一張圖上。