Junior — Middle
Můžeš ukázat, jak se v praxi vývoje uplatňuje princip L ze SOLID?
sobes.tech AI
Odpověď od AI
Liskovova princip v SOLID je princip nahrazení. Říká, že objekty odvozených tříd by měly být zaměnitelné s objekty základní třídy bez narušení správnosti programu.
Příklad v Kotlinu:
open class Bird {
open fun fly() {
println("Pták létá")
}
}
class Sparrow : Bird() {
override fun fly() {
println("Vrabec létá")
}
}
class Ostrich : Bird() {
override fun fly() {
throw UnsupportedOperationException("Pštros neumí létat")
}
}
fun makeBirdFly(bird: Bird) {
bird.fly()
}
fun main() {
val sparrow = Sparrow()
val ostrich = Ostrich()
makeBirdFly(sparrow) // Funguje správně
makeBirdFly(ostrich) // Porušení principu L, protože pštros neumí létat
}
V tomto příkladu porušuje třída Ostrich princip L, protože nepodporuje chování základní třídy Bird. Abychom princip dodrželi, je třeba navrhnout hierarchii tak, aby podtřídy plně podporovaly kontrakt základní třídy, například oddělením létajících a nelétajících ptáků do různých hierarchií.