Ispirato da questa risposta:
Liskov principio di sostituzione richiede che
- Le condizioni preliminari non possono essere rafforzate in un sottotipo.
- Le postcondizioni non possono essere indebolite in un sottotipo.
- Gli invarianti del supertipo devono essere conservati in un sottotipo.
- Vincolo storico (la "regola della storia"). Gli oggetti sono considerati modificabili solo attraverso i loro metodi (incapsulamento). Poiché i sottotipi possono introdurre metodi che non sono presenti nel supertipo, l'introduzione di questi metodi può consentire cambiamenti di stato nel sottotipo che non sono ammessi nel supertipo. Il vincolo storico lo proibisce.
Speravo che qualcuno pubblicasse una gerarchia di classi che viola questi 4 punti e come risolverli di conseguenza.
Sto cercando una spiegazione elaborata per scopi educativi su come identificare ciascuno dei 4 punti nella gerarchia e il modo migliore per risolverlo.
Nota:
speravo di pubblicare un esempio di codice su cui le persone lavorassero, ma la domanda stessa riguarda come identificare le gerarchie difettose :)