2016-03-12 2 views
-1

Я новичок в java и программировании в целом, сегодня я столкнулся с проблемой этих трех отношений. К сожалению, из моих материалов я не могу понять, как их реализовать. Надеюсь, кто-то может это понять.Java - Association, Composition, Aggregation

1) Ассоциация Например, у меня есть 2 класса. Студент и школа, это связь с множественностью 1: 1, я понимаю, что в каждом классе у меня будет атрибут, относящийся к другому классу. Но мой вопрос: если внутри конструктора я объявляю эту ссылочную переменную? Я также создаю набор и получаю методы для них? Что делать, если эта ассоциация имеет множественность 1: N? У меня есть ссылочная переменная, которая ссылается на список, я объявляю, что так или иначе в конструкторе тоже? Я могу создать набор и получить методы для этого списка массивов?

2) Агрегация Из того, что я понимаю, с точки зрения реализации в агрегации Java есть не что иное, как односторонняя связь. Таким образом, эталонная переменная находится только в одном классе. Действительно ли моя гипотеза?

3) Состав Я знаю, что композиция представляет собой особый тип агрегации. Так что, я думаю, с точки зрения реализации на Java, что это будет одна из ассоциаций, поэтому реализация будет такой же, и единственное, что отличается, - это то, как мы распознаем это отношение вне программирования.

Если кто-нибудь может помочь мне, что я действительно ценю это

Жаль, что я не показал ни одного примера, правда, что это помогло бы мне, чтобы описать мои мысли.

Допустим, у нас есть класс, студент

public class Student { 
    private String name; 
    private School school; 
    } 
    public Student(String namei, School school) { 
     this.name = name; 
     this.school = school; 
    } 

Если класс школы, будет иметь atribute частный Студент, было бы объединение. Но если нет, и единственный ссылочный атрибут будет в классе Student, я прав, если бы я сказал, что связь между этими классами - Агрегация?

Что делать, если мы немного изменим его, и мы говорим, что в этой школе должны быть студенты. Итак, единственное, что мы изменим, это контекст, то, как мы думаем о предмете, и ничего больше, если мы это сделаем. Буду ли я прав, если бы я сказал, что это отношение будет составом?

+0

Лучше показать нам свои попытки кода примеров того, что, по вашему мнению, Assoc ясность, агрегация и состав могут быть похожими. –

+0

Связанный, хотя я не убежден в его обмане (не стесняйтесь cv хотя): http://stackoverflow.com/questions/885937/difference-between-association-aggregation-and-composition –

ответ

0

Школа, безусловно, нуждается в учебе, но она не может быть составной, потому что в составе контейнер (Школа в этом случае) и содержание (в данном случае Студент) таковы, что уничтожение одного означает уничтожение другого. Даже когда вы оставить школу для получения высшего образования (Content уходит) содержание должно еще оставаться,

Я хотел бы рассмотреть связь между школой и учеником, как агрегирование

Aggregation: Здесь существует связь между этими двумя объектами в таком способ использования другого, содержащийся объект (ученик) инициализируется в основной функции

Здесь School is Container и Student довольны, это агрегация, потому что, когда и когда родился ученик, он не зачисляется в школу (это было бы так, если бы вы использовали композицию), поэтому нам нужно инициализировать ученика в основная функция и передать его в качестве параметра в школу в конструкторе

Aggregation:

class Student 
{ 
    String Name; 
int grade; 

Student() {} 

Student(String Name,int grade) 
{ 

    this.Name=Name; 
    this.grade=grade; 
} 

public String toString() 
{ 

    return(this.Name + " : "+this.grade); 
} 
} 






class School 
{ 
    Student student; 
    String SchoolName; 

School(Student student,String SchoolName) 
{ 

    this.student=student; 
    this.SchoolName=SchoolName; 
} 

public String toString() 
{ 
    return(this.student + " : "+this.SchoolName); 
} 

} 





class Aggregation 
{ 
public static void main(String[] args) 
{ 
    Student student = new Student("Sourabh",4); 

    School school = new School(student,"SBI"); 

    System.out.println(school); 
} 
} 

Если вы хотите реализовать его в составе отношение инициализации студента объекта в конструкторе школы