2013-11-15 75 views
3

我有兩個問題要問。所以我們假設有一個類A和B是這樣定義的。如何繪製一個UML圖,當A類與B類具有聚合和組合關係時?

1.

class A { 
    private B b; 
    private B otherB; 
    public A(B otherB) 
    { 
     this.otherB = otherB; 
    } 
} 
class B { 
} 

因此類A有與可變otherB變量b和聚合關係的組成的關係。我如何在UML圖中繪製這個圖。

2.以下情況是否仍然是構圖關係?

class A 
{ 
    private B b; 
    public B getMethod(){ 
     B newB = new B(); 
     newB.bValue = b.bValue; 
     return newB; 
    } 
} 
class B 
{ 
    private int bValue; 
} 
+0

不是。這不是來自任務或學校的問題。我讀到了這種關聯關係,我想更清楚地知道在上述情況下它將如何工作。 –

+0

你指的是什麼聚合/組合?我所能看到的是從A到B的兩個簡單的方向關聯(一個命名爲「b」,另一個命名爲「otherB」)。 –

回答

2
  1. 作爲其它評論/回覆所指出的那樣,不存在具有相同的類之間不同的關聯(由與否)的問題。 composition vs aggregation

  2. 從實施情況來看(這也適用於前面的問題),你需要了解什麼是composition association means

基本上,如果我們有實例規範A1A2(作爲類的實例),僅它們中的一個可以構成一個實例B1(作爲類的實例B)通過複合關聯的作用(關聯結束)「composesB」。

同樣,條件是A1 經由複合協會的 「composesB」 的作用,每次A1被 「破壞」,B1也應 「破壞」 構成B1。相反,如果a1對象聚合b1通過聚合關聯的「aggregatesB」角色不會發生。

正如你可以想象的,從實現的角度來看,爲了支持兩個類之間的複合關聯,你需要的遠不止一個字段和一個類中的簡單方法。

更新:包括一個例子。

例如,EMF是EMOF規範(它不是UML)的實現,其中包含引用的概念(類似於組合關聯的概念)可以描述如下。在我們的具體情況:

Generated code for a composite reference

展望從技術細節的時候,你可以把握,當你設置A B實例作爲部分(包含,組成)由A實例對象。您首先必須通過相同的包含引用來檢查前者是否可能包含在不同的A實例中,如果是,則需要從舊的A實例中刪除此類B實例。

+0

1.兩個不同的A實例不能同時由B的單個實例組成。約定。 – jaco0646

+0

2.如果a1由b1組成,那麼銷燬a1也應該銷燬b1。這是作文最基本的定義。根據維基百科,這不是一個嚴格的要求,但是:「請注意,在允許的情況下,可以在複合材料被刪除之前從複合材料中刪除零件,從而不會將其作爲複合材料的一部分刪除。」 – jaco0646

+0

3.您說,「如果a1對象聚合b2,這不會發生。」爲什麼不呢?聚合b2不會影響b1的生命週期(儘管如此,根據維基百科,b1的破壞並非嚴格要求)。 – jaco0646

0
  1. Creating Multiple Associations Between Classes,事實上,法律。建議在您這樣做時爲每個關係分配一個角色。

  2. 我要說的是,這仍然是一個構圖關係(儘管其他人可能不同意)。爲了說明我的情況,我們看看簡單的IBM definition,顯示Student由Schedule組成(推測可能包括其他內容)。很容易想象,還會有一個由時間表組成的教師,而教師可能想要得到學生的時間表,反之亦然。另一個課程獲得課程表是否使作曲關係無效?我想不是;或者至少,IBM的定義看起來並不那麼狹窄以至於排除了這種可能性。