2017-02-22 82 views
1

在考慮組合時的UML圖中。我們是否應該以邏輯或實現的方式來使用它。兩個條款的示例:UML中的組合

  • 實施 - 機場將包含對該國家的引用。換句話說,一個國家是機場的一部分。
  • 邏輯 - 一個國家可以有零個或多個機場。換句話說,一個機場是該國的一部分。

UML example diagram

從圖的上方,這種情況下,示出的組合物,正確使用? 注意:如果這兩種情況都不好,請建議其他方式來顯示國家和機場之間的關係。

+0

這不是'1:1',除非每個國家都有一個機場。這是'*'國家機場。我猜想鑽石應該在關係的「機場」一側(但不會發誓)。 – khelwood

+0

一個'<>'是一個數據類型,而不是一個刻板的類(儘管它們看起來相同)。從這個意義上講,你不能編寫一個'<>'的類。這意味着這兩個圖都是錯誤的。第二名甚至比第一名更「低調」。 –

回答

2

我認爲這是而不是在強烈的「UML意義」這個詞的組成。

wikipedia

複合和部件之間的關係是一個強烈的「具有」的關係,作爲複合對象採用該組件的所有權。這意味着複合材料負責組件的創建和銷燬。

機場不是創建國家(在IT意義上,「國家」對象也不負責提供/創建「機場」對象)。

從這個意義上說,你正在尋找一個協會在這裏;我認爲第一個更合適(以「一般」的方式說話)。但核心方面是:您的型號必須明確您的域的具體要求。換句話說:兩種解決方案都是有效的;它非常依賴於選擇哪個環境。換句話說:你選擇一個能夠幫助你解決問題的人!

+0

我將改變只是簡單的關聯,就是這樣。 –

+0

枚舉永遠不是組成部分的方向!這是(幾乎)永遠的依賴(其他人依賴於它)。 –

0

這將取決於您嘗試構建的最終模型。

如果你的模型包含國家作爲一流的對象或實體,那麼顯然一個國家包含機場。如果國家是機場屬性(更適當地說是機場位置的一個屬性),則將其模型化。

除非你有充分的理由將國家建模爲實體,否則我會選擇屬性,因爲邊界可能會改變,機場可能會改變國家。

換句話說,這個問題沒有一個確定的答案,要麼取決於你的最終目標。

+0

'國家'將屬於'機場' - 這是我的模型 –

0

如果我可以建議: cf. UML規範的第9.5.3節(2015年3月):

複合:表示該屬性是複合聚合的,即複合對象負責組合對象的存在和存儲(請參見11.2中的零件定義0.3)。

複合凝聚是聚集的強有力的形式,需要一個部分對象在每次最多一個複合 對象被包括英寸如果複合對象被刪除,則它的所有零件實例都將被刪除。

對我來說,實現和邏輯的問題更多的是關於db模型的問題。但也許我錯了。

而如果我必須做出選擇,我將只設計實施案例。

0

你可以說機場是一個國家的一部分,換句話說就是負責它。所以從商業角度來看,第二種方法是正確的。爲了從機場角度表明關於該國的「知識」,您可以在鑽石前面的國家方向上添加一個空心箭頭。

無論採用何種方法,您想要建模的第一個圖都是不正確的。有了這個圖表,每個機場將負責一個國家,所以每個機場將在不同的國家。