2016-05-20 231 views
0

我Intellij IDEA 2016.1.1。 爲什麼Intellij UML圖總是繪製組合線而不是聚合?uml聚合在Java

我的代碼:

public class Address { 

    int streetNum; 
    String city; 
    String state; 
    String country; 

    Address(int street, String c, String st, String coun) 
    { 
     this.streetNum=street; 
     this.city =c; 
     this.state = st; 
     this.country = coun; 
    } 

} 

public class StudentClass { 

    int rollNum; 
    String studentName; 
    Address studentAddr; 

    StudentClass(int roll, String name, Address addr){ 
     this.rollNum=roll; 
     this.studentName=name; 
     this.studentAddr = addr; 
    } 
    public static void main(String args[]){ 
     Address ad = new Address(55, "Agra", "UP", "India"); 
     StudentClass obj = new StudentClass(123, "Chaitanya", ad); 
     System.out.println(obj.rollNum); 
     System.out.println(obj.studentName); 
     System.out.println(obj.studentAddr.streetNum); 
     System.out.println(obj.studentAddr.city); 
     System.out.println(obj.studentAddr.state); 
     System.out.println(obj.studentAddr.country); 
    } 

} 

可以看到,該行被描述組成? 爲什麼?

的IntelliJ抽獎:

enter image description here

+0

我對intellij不是很熟悉,但是你的學生類包含實例化對象的主要方法。如果您要爲主要方法創建單獨的類,則不應再顯示爲組合。 –

+0

我知道這一點。爲什麼? ( – Sustav

+0

因爲Student Class擁有Address對象的生命週期,所以我覺得有點困惑,因爲你在你的Student類中有static void main方法,如果你把你的主要方法放到一個完全獨立的類中,它會是Aggregation/Association,因爲學生對象不會擁有Address對象的生命。https://nirajrules.wordpress.com/2011/07/15/association-vs-dependency-vs-aggregation-vs-composition/ –

回答

0

圖生成器不知道如果地址對象是在不同的Student對象可重複使用的(因此這是協會或共享聚合)或者更確切地說,每個學生對象都有它自己的唯一的地址對象(導致組合聚合)。要認識到發生器將不得不分析行爲,它仍然可能不會給出明確的答案。

另一方面,當圖發生器分析類結構時(它可能是它唯一做的事情),它只是認識到Student類的對象是類Address的對象的構建 - 這意味着這是一個整體部分關係(即複合聚合)。這就是它如何繪製你的圖。

現在在這種情況下,一些圖表將關係建模爲(可導航)關聯,而一些複合聚合。這兩種方法都不是100%正確的,但自動化機制永遠無法理解這種模糊邏輯。

顯然Intellij使用後一種方法。就這樣。