1 Principio di sostituzione Se un oggetto di tipo S può essere sostituito ovunque ci si aspetti un oggetto di tipo T, allora S è una sottoclasse corretta di T Barbara Liskov (1988)
Matteo Sacco - Università degli Studi di Brescia2 Asserzioni ed ereditarietà Alle sottoclassi è concesso Aggiungere variabili e/o metodi, rispettando il vincolo semantico: inv sottoclasse → inv classe Ridefinire metodi ereditati, soddisfando i vincoli semantici: post sottoclasse → post classe pre classe → pre sottoclasse
Matteo Sacco - Università degli Studi di Brescia3 Il subtyping da Linguaggi di Programmazione (prof. G. Lamperti)
Matteo Sacco - Università degli Studi di Brescia4 Caratteristiche della sottoclasse che garantiscono il subtyping Aggiunta di variabili e/o metodi Ridefinizione “compatibile” di metodi ereditati stesso protocollo = numero, ordine e tipo dei parametri formali + tipo del valore di ritorno Controvarianza dei parametri di input Covarianza del parametro di output Assieme al nome del metodo costituisce la signature da Linguaggi di Programmazione (prof. G. Lamperti)
Matteo Sacco - Università degli Studi di Brescia5 Controvarianza dei parametri di input I parametri di input del metodo ridefinito nella sottoclasse sono supertipi dei rispettivi parametri del metodo della superclasse Si allarga il tipo
Matteo Sacco - Università degli Studi di Brescia6 Covarianza del parametro di output Il parametro di output del metodo ridefinito nella sottoclasse è sottotipo del parametro di uscita del metodo della superclasse Si restringe il tipo
Matteo Sacco - Università degli Studi di Brescia7 LP e Ing. del Software B I parametri di input del metodo ridefinito nella sottoclasse sono supertipi dei rispettivi parametri del metodo della superclasse pre classe → pre sottoclasse Il parametro di output del metodo ridefinito nella sottoclasse è sottotipo del parametro di uscita del metodo della superclasse post sottoclasse → post classe
Matteo Sacco - Università degli Studi di Brescia8 Esempio da Linguaggi di Programmazione (prof. G. Lamperti) covarianza del parametro di output stesso verso rispetto al subclassing controvarianza del parametro di input: va controcorrente rispetto al subclassing Funziona sia che p referenzi C1 che C2: vale il principio di sostituibilità
Matteo Sacco - Università degli Studi di Brescia9 Esempio (2) Caso canonico: p referenzia oggetto di C1 y = p -> m(x) Caso critico: p referenzia oggetto di C2 y = p -> m(x) CC’C si assegna uno studente (val ritornato) ad una persona: ok si ha uno studente come parametro… è prevista una persona: ok (ne è sottotipo) tipi definiti nel metodo m da Linguaggi di Programmazione (prof. G. Lamperti)