2014-02-12 71 views
3

我一直認爲UML總量的定義是在路徑的開頭黑色(填充)的鑽石,並沒有說結束箭頭:UML聚集有和沒有箭頭

|--------|  |--------| 
| :MyA |<>------| :MyB | 
|--------|  |--------| 

今天我來了橫跨像<>----->這樣的符號(在右端有一個明確的箭頭)。所以我在UML 2.4規範中查找並實際找到了兩個版本的參考。

我最喜歡的參考:Craig Larman的「UML and Patterns」只提到沒有箭頭的第一個版本。在UML規範中,我發現了一條關於可導航端點的通知,但我不確定這是否相關,以及它們之間有什麼區別?

有人可以更徹底地解釋這一點,並舉例說明每個版本的使用情況嗎?

回答

6

任何關聯端的關聯/適航/聚合更仔細閱讀可以被指定爲「通航」與適航箭頭的幫助。但是,UML的「導航性」概念並沒有明確的含義,人們將它與另一端的類關聯結尾概念混爲一談。 關聯結束所有權按類別的這一概念意味着關聯結束對應於該類別的參考屬性。這個問題僅在去年的新版UML 2.5中得到了澄清,該版本引入了一個關於最終所有權的新視覺記號,如A composition where the end at the component class is owned by the aggregate class.中的一個「點」。這是最有可能的你來幹什麼跨越,即A composition where the end at the component class is "navigable",和它真正的意思是下面的參考屬性本意:

enter image description here

更多解釋見這tutorial

其他答案的評論:如果你的類模型指定所有關聯的所有權結束,類圖中顯示出來,並沒有所有權點(也沒有適航箭頭),爲A plain composition,那麼,根據UML 2.5,關聯端由協會本身「擁有」。由於我們在MyA端沒有所有權點,因此兩端都由組合關聯「擁有」。就編寫/生成代碼而言,這意味着複合關聯不是通過MyA或MyB中的引用屬性實現的,而是必須在單獨的類的幫助下實現,比如說「MyA-has- MYB」,它具有用於引用兩骨料和任何組合物鏈路的部件,如在下面的類矩形兩個參考屬性:

enter image description here

+0

你可以用一個點或箭頭省略的例子來擴展你的答案,並且稍微解釋一下這個區別嗎? – lanoxx

0

方向意味着客戶端/服務器或主/從關係。在聚合的情況下,通常情況是程序員使用聚集來找到該對象的子組件(例如,使用汽車來查找汽車部件)。對零件類的方向性使得這種關係是明確的,儘管在大多數情況下它是多餘的。

0

一個關聯有兩端。關聯的結尾是通過UML屬性建模的,UML屬性可以由關聯相關端所涉及的分類器擁有,在這種情況下,關聯被認爲是可導航的,因爲源分類器可以直接引用目標實例(實例在該協會的另一端)通過該屬性。否則代表關聯端的屬性可以通過關聯實例所擁有自身

看到http://lowcoupling.com/post/47802411601/uml-diagrams-and-models-with-papyrus

+0

適航(箭頭)和關聯端的所有權是不一樣的。儘管UML的「導航性」概念沒有明確的含義,但關聯最終所有權意味着關聯結束對應於該類的引用屬性。這個問題僅在去年新的UML 2.5版中得到澄清。請參閱https://oxygen.informatik.tu-cottbus.de/IT/JsFrontendApp/tutorial.html的第5章 –

0

一個箭頭,表示該協會通航這種方式。沒有箭頭表示該協會可以通過兩種方式進行導航。兩個箭頭被省略。

這可能是一個問題,因爲兩個結合undefined導航的方式是一樣的,但它是標準。

可以關於這個我的回答https://stackoverflow.com/a/21478862/715269

+1

您的陳述「沒有箭頭表示關聯可以通過兩種方式」是不正確的。沒有箭頭意味着導航性未指定。 –

+0

@gwag可以查看VP UML幫助或UML標準頁面上顯示的圖表。不久前我也認爲你也是,但那些雙面箭頭已經過時了。 – Gangnus

+1

在最新的UML 2.5規範中,他們描述了三個工具視覺完整性選項(第211頁)。第二個是「禁止所有的箭頭和十字架:不能推斷導航」,第三個是「禁止雙向導航的關聯箭頭」(在這種情況下,雙向導航性不能與在任何情況下,如果你在圖表中有一個與箭頭的關聯,並且有另一個沒有箭頭,那麼這不具有你所建議的意義(可以在兩個方向上導航) –