Я понимаю, что такое композиция в ООП, но я не могу понять, что такое Агрегация. Может кто-нибудь объяснить?
object-oriented
Винот Кумар СМ
источник
источник
С http://en.wikipedia.org/wiki/Object_composition
Таким образом, пока у вас есть отношение владения композицией, принадлежащий объект также уничтожается, когда владельцем является - агрегация (и содержащиеся в ней объекты) может существовать независимо.
-
Обновление: Извинения - этот ответ слишком прост в ретроспективе.
c.batt дает превосходное определение в своем ответе: Агрегация против Композиции
источник
Там нет единого объяснения. Разные авторы имеют в виду совокупность разных вещей. Большинство на самом деле не имеют в виду ничего конкретного.
источник
Композиция является Ассоциацией
Агрегация является Ассоциацией
Композиция - это сильная ассоциация (если срок службы содержимого объекта полностью зависит от объекта-контейнера, это называется сильной ассоциацией)
Агрегация - это слабая ассоциация (если срок службы содержимого объекта не зависит от объекта-контейнера, это называется слабой ассоциацией)
Пример:
источник
Композиция (смесь) - это способ объединения простых объектов или типов данных в более сложные. Композиции являются важным строительным блоком многих базовых структур данных.
Агрегирование (сбор) отличается от обычного состава тем, что оно не предполагает владения. В композиции, когда владелец объекта уничтожается, также и содержащиеся объекты. В совокупности это не обязательно верно
Оба обозначают отношения между объектами и отличаются только их силой.
UML нотации для различного рода зависимости между двумя классами
Композиция : Поскольку Двигатель является частью Автомобиля, отношения между ними - Композиция. Вот как они реализованы между классами Java.
Агрегация . Поскольку в Организации в качестве сотрудников работают Персоны, отношения между ними - Агрегация. Вот как они выглядят с точки зрения классов Java
Источник
источник
агрегация представляет собой простую коллекцию, как мешок мрамора
композиция подразумевает внутренние / функциональные зависимости, такие как петли на коробке
автомобили объединяют пассажиров; они входят и выходят, не нарушая функциональность автомобиля
шины являются компонентами; удалить один и автомобиль больше не работает правильно
[примечание: запасное колесо - это агрегат!]
источник
Я всегда рассматриваю композицию как «нужно», т. Е. Машине нужен двигатель, а агрегат - как «вещи, имеющие отношение к цели». Поэтому, придерживаясь аналогии с автомобилями, я могу представить, как можно объединить автомобиль и пассажиров. Путешествие не принадлежит ни машине, ни пассажирам, я собираю данные, связанные с конкретным сценарием. Когда путешествие закончено, машина и пассажиры продолжают путь. Когда автомобиль заканчивается, автомобиль и его двигатель обычно уничтожаются вместе.
источник
Семантически все наборы сделаны из подмножеств, верно? Следовательно:
Агрегация - это когда эти подмножества существуют независимо от родительского набора. Как монитор можно отключить от компьютера для подключения к другому.
Композиция - это когда эти подмножества зависят от существования набора отца. Поскольку лист является частью дерева или печень является частью тела.
Эти понятия говорят о типе зависимости между двумя объектами или классами, концептуально. Непосредственно в программе, в агрегате, когда утилизируется родительский объект, агрегатные объекты также должны быть расположены. В том же сценарии для композиции составные объекты-сыновья сохраняются, а затем объект-родитель расходуются.
источник
Как насчет этого простого примера:
Массив объектов представляет собой композицию. Массив указателей на объекты является агрегацией.
Если я удаляю первый, его содержимое исчезает вместе с ним. Второй, с другой стороны, может исчезать, не влияя на существование его членов, если только не существует специального метода, который удаляет каждый объект при удалении его указателя.
источник