Назад к вопросам
Middle
70
questionbank

Что ты знаешь о композиции классов?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Композиция — это отношение между классами, где один класс содержит в себе экземпляры других классов. Это форма связывания объектов, где связанный объект (компонент) живет и умирает вместе с содержанием объектом.

Отличительные черты композиции:

  • Строгое включение: Компонент является частью содержащего его объекта и не может существовать отдельно.
  • Сильная зависимость: Изменение в содержащем объекте часто требует изменений в его компонентах.
  • Отношение "является частью": Например, автомобиль имеет двигатель. Двигатель - часть автомобиля.

Пример:

Класс Car может содержать экземпляр класса Engine:

class Engine {
    fun start() {
        // Запуск двигателя
    }
}

class Car {
    private val engine = Engine() // Композиция

    fun drive() {
        engine.start()
        // Логика движения
    }
}

В данном примере Engine является компонентом Car. Engine не может существовать без Car. Когда объект Car уничтожается, его компонент Engine также перестает существовать (в контексте данного агрегата).

Композиция предпочтительнее наследования во многих случаях, поскольку она обеспечивает большую гибкость и меньшую связанность между классами. Она способствует принципу "программируйте на интерфейсах, а не на реализациях" и "составной функционал, а не наследование".