Junior — Middle
85
SOLID-тан L принципін практикада қалай қолдануға болатынын көрсете аласыз ба?
Сұралған компаниялар
Dogma
AI-дан жауап
sobes.tech AI
Принцип 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. Чтобы соблюдать принцип, нужно проектировать иерархию так, чтобы подклассы полностью поддерживали контракт базового класса, например, выделить летающих и нелетающих птиц в разные иерархии.