Il principio di sostituzione di Liskou – Lezione 12 di Java Avanzato

Quando un metodo in Java viene sovrapposto viene applicato il principio di sostituzione di Liskou che dice:

“Se un client utilizza una classe A, quindi ne evoca i suoi metodi, deve poter funzionare anche con qualsiasi sottoclasse anche senza conoscerla, ovvero che per i suoi metodi in comune che sovrappone non deve violare i contratti”.

In un overriding di un metodo ci richiede quindi di:

  1. Indebolire la precondizione, ovvero richiedere meno vincoli;
  2. Rafforzare la postcondizione, ovvero garantire più vincoli.

Queste condizioni vengono dette “Regole del contro-variante“, una regola si espande ed una si restringe. In particolare la seconda regola ci dice che: se un un client ha siglato un accordo per ricevere determinate benefici non può ricevere meno di quanto già stabilito. Di conseguenza può ricevere solo più benefici, ma non di meno.

Il principio di sostituzione di Liskou applicato in Java

In Java, la situazione è ancora più restrittiva rispetto a Liskou, ad esempio con:

  x.f(A x);

Con un’invocazione ad un metodo di questo tipo avremo che:

  1. Non è possibile cambiare il tipo di parametro (ovvero A), anche se la regola ci dice che si potrebbe accettare anche una sua superclasse;
  2. Il tipo di ritorno può cambiare ed essere più restrittivo ed accettare anche una sottoclasse.

La scelta di rendere il funzionamento in Java più restrittivo è stata fatta per motivi pratici, gli sviluppatori del linguaggio hanno giudicato il meccanismo di utilizzo troppo difficile da gestire ed avrebbe comportato più rischi che benefici.

Indice Lezione PrecedenteLezione Successiva

Pubblicato in Guide, Java, Programmazione Taggato con: , ,

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

*