Когда стоит использовать композицию

«Когда стоит использовать композицию» — вопрос из категории ООП, который задают на 24% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Композиция предпочтительнее наследования, когда нужно:

  • Собирать функциональность из независимых компонентов
  • Избегать жесткой связности (fragile base class problem)
  • Гибко менять поведение во время выполнения

Пример с Car, который использует Engine:

class Car(private val engine: Engine) {
    fun start() = engine.start()
}

interface Engine {
    fun start()
}

class ElectricEngine : Engine {
    override fun start() = println("Electric engine started")
}

Плюсы композиции:

  • Лучшая тестируемость (можно мокать зависимости)
  • Гибкость (легко заменить реализацию)
  • Четкое разделение ответственности