Ответ
Принцип открытости/закрытости (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 { /* реализация */ }
Преимущества:
- Уменьшает риск сломать существующий код
- Упрощает добавление новой функциональности
- Делает код более поддерживаемым