2016-05-20 10 views
0

私はIntellij IDEA 2016.1.1を持っています。 なぜIntellij UMLダイアグラムでは、集計ではなくコンポジションラインが常に描画されますか?Javaのuml集約

マイコード:

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

学生クラスはAddressオブジェクトのライフサイクルを所有しているので、学生クラスに静的void mainメソッドがあるので少し混乱していると思います。主な方法をとり、完全に別のクラスに入れるとスチューデントオブジェクトがAddressオブジェクトの寿命を所有しないため、集約/関連付けになります。https://nirajrules.wordpress.com/2011/07/15/association-vs-dependency-vs-aggregation-vs-composition/ –

答えて

0

Addressオブジェクトが異なるStudentオブジェクト間で再利用可能である(したがって、これは協会または共有の集約である)場合の図ジェネレータがない考えを持っていないというか、各学生のオブジェクトは、それが自分のしていますユニークなAddressオブジェクト(Composite Aggregationの結果)ジェネレータが行動を分析しなければならないことを認識し、それでもなお明確な答えを得られない可能性があります。

一方、ダイアグラムジェネレータがクラス構造を解析すると(これはおそらく唯一のことです)、クラスStudentのオブジェクトがクラスAddressのオブジェクトのビルドであることが認識されます。これは、これがパーツ全体であることを意味しますリレーションシップ(すなわち、複合アグリゲーション)。それがあなたの図を描いた方法です。

このような場合、いくつかの複合集計が行われている間、(移動可能な)関連としてモデル化されています。いずれのアプローチも100%正しいわけではないが、自動化されたメカニズムは、そのようなファジー論理を理解することは決してできない。

明らかに、Intellijは後者のアプローチを使用します。それで全部です。