Sobes.tech
Junior — Middle

Можеш ли да покажеш как се прилага принципът L от SOLID в практиката на разработката?

sobes.tech AI

Отговор от 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. За да спазваме принципа, трябва да проектираме йерархията така, че подкласовете да поддържат напълно контракта на базовия клас, например, да разделим летящите и нелетящите птици в различни йерархии.