Explicați ce înseamnă principiul de substituție Liskov și cum se aplică în programarea orientată pe obiecte.
sobes.tech AI
Răspuns de la AI
Principiul substituției lui Liskov (Liskov Substitution Principle, LSP) este unul dintre cele cinci principii SOLID în programarea orientată pe obiecte. El afirmă că obiectele unei subclase trebuie să poată fi utilizate în locul obiectelor clasei de bază fără a modifica corectitudinea programului.
Pe scurt, dacă clasa B moștenește de la clasa A, atunci obiectele clasei B trebuie să se comporte astfel încât să poată fi folosite în locul obiectelor clasei A fără erori neașteptate sau modificări în logică.
Acest lucru se realizează asigurând că subclasa nu:
- Încalcă invariabilele clasei de bază.
- Restricționează precondițiile metodelor (solicitând date de intrare mai stricte).
- Extinde postcondițiile (oferind rezultate mai puțin garantate).
Exemplu:
class Bird {
func fly() {
print("Pasărea zboară")
}
}
class Sparrow: Bird {
override func fly() {
print("Măcăleandrul zboară")
}
}
// Încălcarea LSP dacă se adaugă o clasă Penguin care nu poate zbura
class Penguin: Bird {
override func fly() {
fatalError("Pinguinul nu poate zbura")
}
}
În acest exemplu, Penguin încalcă LSP, deoarece nu poate fi utilizat în locul lui Bird fără erori. Ar fi mai corect să se definească o interfață separată pentru păsările care zboară.
Astfel, LSP ajută la crearea de ierarhii de clase care sunt ușor de extins și întreținut, evitând erorile neașteptate la înlocuirea obiectelor.