2009-10-01 93 views
3

我有一個應用程序,它用類Tree,Node和Edge(我需要Edge類!)對樹進行建模,並且我不知道如何表示類圖中的關係這個。我已閱讀其他文章,但我仍然有疑問。UML類圖中的關係

Tree對象有一個指向節點(它的根節點)的指針,我相信這個節點定義了一個單向關聯(Tree ->節點),其兩端的重數爲1..1。這樣對嗎?

每個節點對象都有指向它的邊緣的指針(邊緣對象)。由於這些邊緣只在節點存在的情況下才存在,我相信這是一個組合關聯。

但是,我在每個Edge對象中都有一個指向邊緣目標節點的指針。考慮到我已經具有上述的節點->邊緣組成,我該如何表示這種關係?另外,如果你還在閱讀:),每個節點都有一個指向其父節點的指針。在這裏,我將使用單向一元關聯,但我不知道用於這種關係的名稱。

感謝您的任何幫助。

回答

1

我想說的是:

  • 樹有一個根節點
  • 節點有子節點
  • 節點可以有一個父節點

注:

  • 您可能想區分UML類圖與UML對象圖
  • 我不知道根節點和子節點是否是同一個類(子節點可能是根節點的子類,因爲兩種類型的節點都有子節點,但只有子節點有父節點)

Edge可能根本不是一個類:相反,Edge可能只是Node的一個實例。

+0

我喜歡專門研究Node類的想法。關於Edge,我不會涉及細節,但我需要它用於此應用程序。謝謝! – 2009-10-01 02:31:53

1

從你描述它聽起來像UML類應該有:

Tree -> Node, aggregation, 1..0-1 
Node -> Edge, aggregation, 1..* 
Edge -> Node, composition, 1..2 (an edge exists only if it connects 2 nodes) 
Node -> Node, aggregation, 1..1 (would be composition, except the root node doesn't point to a node. 

聚合和組合之間的差異可以在生命週期的角度來理解。如果兩個對象的生命週期是相同的,因爲它們是相互依賴的,那麼這個關係就是合成關係,否則就是聚合關係。

1

- Tree對象有一個指向節點(它的根節點)的指針,我相信它定義了一個單向的關聯(樹 - >節點),其中兩端的重數爲1..1。這樣對嗎?

沒有,多樣性應該是0..1 - 1(不是所有的節點將是樹的根)

你還應該考慮邊緣是否真的是一個類或沒有。如果你不需要存儲任何有關邊緣的信息(即他們沒有被標記),我只是將邊緣建模爲節點之間的二元關聯

0

OO中樹結構的處理由CompositeDesign Pattern解決。

你似乎被聚合和組合之間的差異所困惑。當整體和部件的壽命相等時使用複合材料,在部件的壽命不同的情況下使用聚合,即從集合中添加和/或刪除部件。