Композиция — это связь "содержит" или "часть-целое", при которой один класс (композит) содержит ссылку на другой класс (компонент) или его экземпляры. Жизненный цикл компонента обычно тесно связан с жизнью композита. Это сильная связь, где компонент не может существовать без композита.
Преимущества композиции:
Пример: Класс Автомобиль может содержать ссылку на класс Двигатель. Если уничтожается Автомобиль, то и Двигатель (в этом контексте) перестает существовать.
java
Отличие от агрегации: В агрегации компоненты могут существовать независимо от композита (слабая связь). Пример: Класс Университет содержит ссылки на экземпляры класса Студент. Студенты могут существовать и вне университета.
В Android-разработке композиция активно используется, например, при создании представлений (ViewGroup содержит View), работе с зависимостями через Dagger/Hilt. Это предпочтительный подход по сравнению с множественным наследованием (которого в Java/Kotlin нет для классов) и часто более гибкий, чем одиночное наследование.
kotlin