2016-05-20 4 views
0

У меня Intellij IDEA 2016.1.1. Почему Intellij UML-диаграмма всегда рисует композиционную линию вместо агрегации?uml aggregation в 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, но ваш Student Class содержит основной метод, в котором объекты создаются. Если вы хотите создать отдельный класс для основного метода, он больше не должен отображаться как композиция. –

+0

Я знаю это. Зачем? ( – Sustav

+0

Поскольку Student Class владеет жизненным циклом объекта Address. Я думаю, что это немного запутанно, так как у вас есть свой основной статический метод void в вашем классе студента. Если бы вы взяли свой основной метод и поместили его в совершенно отдельный класс , это будет Агрегация/Ассоциация, потому что объект-ученик не будет владеть жизнью объекта Address. https://nirajrules.wordpress.com/2011/07/15/association-vs-dependency-vs-aggregation-vs-composition/ –

ответ

0

Генератор схема не имеет ни малейшего представления, если объект Address является многоразовым между различными объектами Student (и, таким образом, это объединение или Shared Aggregation) или, вернее, каждый объект Student имеет собственный уникальный адресный объект (в результате составная агрегация). Чтобы понять, что генератор должен будет анализировать поведение, и он все равно может не дать определенного ответа.

С другой стороны, когда генератор диаграмм анализирует структуру классов (и это, вероятно, единственное, что он делает), он просто признает, что объект класса Student является сборкой объекта класса Address, что означает, что это целая часть отношения (т.е. составной агрегации). И вот как она нарисовала вашу диаграмму.

Теперь некоторые диаграммы в таком случае моделируют отношения как (судоходная) Ассоциация, а некоторые составные агрегирования. Ни один из подходов не на 100% прав, но автоматизированный механизм никогда не сможет понять такую ​​нечеткую логику.

Очевидно, Intellij использует последний подход. Это все.

Смежные вопросы