2016-05-20 12 views
0

Ich habe Intellij IDEA 2016.1.1. Warum zeichnet das Intellij-UML-Diagramm immer eine Kompositionslinie statt einer Aggregation?Uml Aggregation in Java

Mein Code:

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); 
    } 

} 

Sie sehen können, ist diese Linie Zusammensetzung beschrieben? Warum?

Intellij Unentschieden:

enter image description here

+0

Ich bin nicht sehr vertraut mit Intellij, aber Ihre Student-Klasse enthält die Hauptmethode, in der die Objekte instanziiert werden. Wenn Sie eine separate Klasse für die Hauptmethode erstellen, sollte diese nicht mehr als Komposition angezeigt werden. –

+0

Ich weiß das. Warum? ( – Sustav

+0

Da die Student-Klasse den Lebenszyklus des Address-Objekts besitzt. Ich denke, es ist ein wenig verwirrend, da Sie Ihre static void main-Methode in Ihrer Student-Klasse haben. Wenn Sie Ihre Hauptmethode verwenden und in eine völlig separate Klasse einfügen Es wäre Aggregation/Association, weil das Objekt Student nicht das Leben des Address-Objekts besitzen würde. https://nirajrules.wordpress.com/2011/07/15/association-vs-dependency-vs-aggregation-vs-composition/ –

Antwort

0

Der Plangenerator hat keine Ahnung, ob das Adressobjekt über verschiedene Studenten Objekte wiederverwendbar ist (und somit ist dies Verband oder Shared Aggregation) bzw. jeder Schüler Objekt hat seine eigenen eindeutiges Adressobjekt (was zu einer zusammengesetzten Aggregation führt). Zu erkennen, dass der Generator das Verhalten analysieren müsste und es könnte immer noch keine definitive Antwort geben.

Wenn andererseits der Diagrammgenerator die Klassenstruktur analysiert (und das ist wahrscheinlich das einzige, was er tut), erkennt er einfach, dass das Objekt der Klasse Student aus dem Objekt der Klasse Address besteht - was bedeutet, dass es ein ganzer Teil ist Beziehung (dh zusammengesetzte Aggregation). Und so hat es dein Diagramm gezeichnet.

Jetzt einige Diagramm in einem solchen Fall modellieren die Beziehung als (navigierbare) Assoziation während einige zusammengesetzte Aggregation. Kein Ansatz ist zu 100% richtig, aber ein automatisierter Mechanismus wird niemals in der Lage sein, solche Fuzzy-Logik zu verstehen.

Anscheinend verwendet Intellij den letzteren Ansatz. Das ist alles.