В чем разница между агрегацией, композицией, и ассоциацией?

В чем разница между агрегацией, композицией, и ассоциацией?
Ассоциация – знание одного класса о другом. Например, класс Начальник может быть связан с классом Подчиненный отношением ассоциации, чтобы передавать ему запросы. Если и Подчиненный должен обращаться к Начальнику – ассоциация называется двунаправленной.

Агрегация и композиция – две разновидности ассоциации. Композиция подразумевает, что ассоциированный объект – «подобъект», составная часть, не имеющая смысла без ссылающегося. На практике, например, отношение композиции появляется когда мы выделяем часть свойств объекта в отдельную сущность.

Агрегация не подразумевает отношения владения. Это просто ссылка на другой, самостоятельный объект. Он может продолжить функционировать, если ссылающийся объект прекратит существование. Например, класс-контейнер агрегирует хранимые элементы.

Каждое из этих трех отношений имеет собственное обозначение на UML-диаграммах: