Sunteți pe pagina 1din 2

Principiul Substitutiei (Liskov)-PSL

Functiile care utilizeaza pointeri sau referinte catre clasele de baza trebuie sa poata folosi
obiecte din clasa derivata fara sa stie. Importanta acestui principiu devine evidenta atunci
cand iei in calcul consecintele incalcarii acestuia. Daca o functie nu respecta PSL, atunci acea
functie foloseste un pointer sau o referinta catre clasa de baza, insa trebuie sa cunoasca toate
derivatele clasei de baza. O astfel de functie incalca PDI deoarece ea trebuie modificata
oricand o nou clasa derivata este creata
Comportamentul anuntat al unui obiect:
-Necesitatile anuntate (Preconditii)
-Promisiunile anuntate (Postconditii)
Cnd redefinim o metod ntr-o clas derivat, putem nlocui precondiia sa doar cu o
precondiie mai slab, i postcondiia sa doar cu o precondiie mai tare.
Serviviile claselor derivate: sa nu ceara mai mult, sa nu promita mai putin.
PSL: Semantica si Inlocuire
-Semantica si scopul fiecarei metode si clase trebuie clar documentat.
-Lipsa intelegerii utilizatorului va duce la incalcarea PSL

-Oriunde se face referire la o clasa in cod, orice subclase existente sau viitoare ale sale
trebuie sa fie 100% substituibile
-Orice cod ce poate chema legal metodele altei metode trebuie sa poata substitui orice
subclasa a clasei respective, fara modificari



Euristici PSL:
Nu este permis ca o clasa derivate sa suprascrie o metoda a clasei de baza printr-o
metoda NOP (no-operation; metoda ce nu face nimic)
Solutii:
1. Relatie de derivare inversa
-daca in clasa de baza initiala exista doar comportament additional
2. Extragerea unei clase de baza commune
-daca atat clasa initiala cat si clasele derivate au comportament diferit

S-ar putea să vă placă și