Sobes.tech
Junior — Middle

Можеш ли да покажеш како се принцип L из SOLID примењује у пракси развоја?

sobes.tech АИ

Одговор од АИ

Princip L iz SOLID je princip zamene Liskov. On kaže da objekti podklasa treba da budu zamenjivi sa objektima osnovne klase bez narušavanja ispravnosti programa.

Primer u Kotlinu:

open class Bird {
    open fun fly() {
        println("Ptica leti")
    }
}

class Sparrow : Bird() {
    override fun fly() {
        println("Soko leti")
    }
}

class Ostrich : Bird() {
    override fun fly() {
        throw UnsupportedOperationException("Struć ne može da leti")
    }
}

fun makeBirdFly(bird: Bird) {
    bird.fly()
}

fun main() {
    val sparrow = Sparrow()
    val ostrich = Ostrich()

    makeBirdFly(sparrow)  // Funkcioniše ispravno
    makeBirdFly(ostrich)  // Kršenje principa L, jer struć ne može da leti
}

U ovom primeru, klasa Ostrich krši princip L jer ne podržava ponašanje osnovne klase Bird. Da bismo poštovali princip, treba dizajnirati hijerarhiju tako da podklase u potpunosti podržavaju ugovor osnovne klase, na primer, razdvajajući ptice koje lete i one koje ne lete u različite hijerarhije.