PRINCIPLES

L - Liskov Substitution Principle

Le sottoclassi devono poter sostituire le superclassi senza rompere il programma. Il comportamento atteso deve essere preservato.

Il Problema

Sottoclassi che violano contratti della superclasse portano a bug nascosti. Il client si aspetta un comportamento ma ne riceve un altro.

La Soluzione

Le sottoclassi devono rispettare i contratti (pre/post-condizioni) della classe base. Non rafforzare precondizioni, non indebolire postcondizioni.

Struttura

Gerarchia di classi dove le sottoclassi sono sostituibili con la classe base senza sorprese.

Partecipanti:
Classe base - definisce contratto
Sottoclassi - rispettano il contratto
Esempi di Codice

PROBLEMA: Violazione LSP

Square viola il contratto di Rectangle. Comportamento inaspettato.

JAVASCRIPT
Loading...

SOLUZIONE: Rispetta LSP

Separate gerarchie o interfacce comuni. Comportamento consistente.

JAVASCRIPT
Loading...
Esempi nel Mondo Reale
Collections (List, Set) sostituibili nelle API
Stream processing (Reader, Writer con contratti comuni)
Payment gateways (interfaccia comune, implementazioni diverse)
Quando Usarlo
Quando crei gerarchie di classi
Per polimorfismo sicuro
Testing con mock/stub (devono sostituire oggetti reali)
Quando NON Usarlo
Composition over inheritance quando appropriato
Pattern Correlati