В чем разница между двумя примерами ниже? - PullRequest
0 голосов
/ 23 апреля 2019

Что отличает композицию от агрегации, они оба объявлены как частные, это то, что в примере композиции мы создаем объект класса Address в конструкторе Person, если это то, как это делает управление объектом Person / владею объектом Address.

public class Person {

    private String firstName;
    private String lastName;
    private Address address;

    //Composition example
    public Person() {
            address = new Address();
    }



    public Address getAddress() {
            return address;
    }


}

Сотрудник класса

public class Employee {

    private String firstName;
    private String lastName;
    private int age;

    //Aggregation Java example
    private Address address;


    public void setAddress(Address address) {
            this.address = address;
    }
    public Address getAddress() {
            return address;
    }

}

1 Ответ

0 голосов
/ 23 апреля 2019

Хорошо, позвольте мне сначала начать с объяснения различий между Агрегацией и Композицией.

Aggregation: 1. Ребенок в отношениях Агрегации может существовать независимо от родителя. 2. Агрегация может читаться как "HAS A"

Пример. Если у нас есть класс Wheel, то связь между классом Wheel и Car является агрегацией: «У автомобиля четыре колеса». Колесо может существовать вне контекста автомобиля.

Состав: 1. Ребенок в отношениях Композиции не может существовать независимо от родителя. Другими словами, для дочернего класса нет смысла существовать, если он не может быть размещен в родительском классе. 2. Композиция может читаться как ЧАСТЬ

Пример: если у нас есть класс Human, отношения между классом Heart и Human являются композиционными. Ты никогда не видел, чтобы сердце висело само по себе, не так ли? Отсюда и необходимость в композиции.


В Java мы представляем отношение Composition, используя private final

class Human { private final Heart heart; }

В то время как агрегация будет просто:

class Wheel { ... }
class Car { private List<Wheel> wheels; }

Теперь, скажем, мы хотели бы полностью удалить объект класса Human (, учитывая, что он не является донором органа ), отношение Композиция вынуждает нас уничтожить экземпляр сердца, связанный с этот человек. В Агрегации это не так, колеса могут использоваться другим автомобилем, если экземпляр автомобиля, к которому они принадлежали, потерпел крушение.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...