Что такое принцип открытости/закрытости (Open-Closed Principle)

«Что такое принцип открытости/закрытости (Open-Closed Principle)» — вопрос из категории ООП, который задают на 26% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Принцип открытости/закрытости (OCP) гласит: классы должны быть открыты для расширения, но закрыты для модификации. Это значит, что поведение класса можно менять через наследование или композицию, не изменяя его исходный код.

Пример нарушения OCP:

class Shape(val type: String) {
    fun area(): Double {
        return when(type) {
            "circle" -> /* расчёт для круга */
            "square" -> /* расчёт для квадрата */
            else -> 0.0
        }
    }
}

Правильный подход:

interface Shape {
    fun area(): Double
}

class Circle : Shape { /* реализация */ }
class Square : Shape { /* реализация */ }

Преимущества:

  • Уменьшает риск сломать существующий код
  • Упрощает добавление новой функциональности
  • Делает код более поддерживаемым