Принцип L из SOLID — это принцип подстановки Лисков. Он говорит, что объекты подклассов должны быть взаимозаменяемы с объектами базового класса без нарушения корректности работы программы.
Можешь показать, как применяется принцип L из SOLID в практике разработки?
Принцип L из SOLID — это принцип подстановки Лисков. Он говорит, что объекты подклассов должны быть взаимозаменяемы с объектами базового класса без нарушения корректности работы программы.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Принцип L из SOLID — это принцип подстановки Лисков. Он говорит, что объекты подклассов должны быть взаимозаменяемы с объектами базового класса без нарушения корректности работы программы.
Пример на Kotlin:
open class Bird {
open fun fly() {
println("Птица летит")
}
}
class Sparrow : Bird() {
override fun fly() {
println("Воробей летит")
}
}
class Ostrich : Bird() {
override fun fly() {
throw UnsupportedOperationException("Страус не умеет летать")
}
}
fun makeBirdFly(bird: Bird) {
bird.fly()
}
fun main() {
val sparrow = Sparrow()
val ostrich = Ostrich()
makeBirdFly(sparrow) // Работает корректно
makeBirdFly(ostrich) // Нарушение принципа L, так как страус не умеет летать
}
В этом примере класс Ostrich нарушает принцип L, так как не поддерживает поведение базового класса Bird. Чтобы соблюдать принцип, нужно проектировать иерархию так, чтобы подклассы полностью поддерживали контракт базового класса, например, выделить летающих и нелетающих птиц в разные иерархии.