2016-05-20 152 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使用后一种方法。就这样。