110 likes | 247 Views
Sulla realizzazione dell’ereditarietà. Ereditarietà: statica / dinamica Binding: statico / dinamico Attribuzione dei tipi: statica / dinamica. Attribuzione dei tipi. Attribuzione dei tipi statica : le variabili, i parametri formali, il risultato dei metodi, sono tipati
E N D
Sulla realizzazione dell’ereditarietà • Ereditarietà: statica / dinamica • Binding: statico / dinamico • Attribuzione dei tipi: statica / dinamica Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 4
Attribuzione dei tipi • Attribuzione dei tipi statica: le variabili, i • parametri formali, il risultato dei metodi, sono tipati • Il compilatore può verificare a priori se lo scambio • dei messaggi e l’accesso alle variabili sono validi e • consistenti • Attribuzione dei tipi dinamica: il compilatore • ammette a priori tutti gli scambi di messaggi e tutti • gli accessi alle variabili - La loro validità viene • verificata solo a run-time Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 4
Designazione dell’oggetto ricevente: self e super Supponiamo di aggiungere un metodo “prezzoTotale” alla classe ARTICOLO,Calcolato come prezzoIva + prezzoTrasporto PROBLEMA: il prezzoIva di un articolo di lusso è calcolato diversamente dal prezzoIva di un articolo normale. Il metodo prezzoTotale deve quindi prevedere un trattamento differenziato se applicato ad articoli della sottoclasse ARTICOLO_LUSSO Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 4
Designazione dell’oggetto ricevente: self e super (cont.) Soluzione: uso della variabile speciale “self”: è un riferimento allo stesso oggetto che esegue “prezzoTotale” prezzoTotale (): return (send (self, prezzoIva) + send (self, prezzoTrasporto)) Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 4
Esempio: uso di self L’oggetto cav, istanza della classe CAVIALE, riceve il messaggio: send (cav, prezzoTotale)Esegue quindi il metodo prezzoTotale della classe ARTICOLO, che gli rimanda i messaggi: send (cav, prezzoIva) e send (cav, prezzoTrasporto) A questo punto cav esegue correttamente i metodi prezzoIva e prezzoTotale della classe ARTICOLO_LUSSO, come richiestoOSSERVAZIONE: notare l’utilità del binding dinamico Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 4
La variabile speciale super Supponiamo che il metodo “prezzoTrasporto” della classe ARTICOLO_LUSSO sia una specializzazione del corrispondente metodo della superclasse ARTICOLO,e che anche la sottoclasse ARTICOLO_DEPERIBILE specializzi lo stesso metodo,ma in maniera differente: ARTICOLOprezzoTrasporto(): return (0,05 x prezzo) ARTICOLO_LUSSOprezzoTrasporto(): return (0,06 x prezzo) ARTICOLO_DEPERIBILE prezzoTrasporto(): return (15.000 + 0,05 x prezzo) CAVIALE UOVA Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 4
La variabile speciale super (continua) • Il metodo “prezzoTrasporto” può essere scritto in entrambe le sottoclassi • Utilizzando il metodo corrispondente della superclasse nel modo seguente: • in ARTICOLO_LUSSO: prezzoTrasporto (): return (1,2 x send (super, prezzoTrasporto)) • in ARTICOLO_DEPERIBILE: prezzoTrasporto (): return (15.000 + send (super, prezzoTrasporto))Con la variabile speciale super, il messaggio è inviato allo stesso oggetto, • come con self, ma la ricerca del metodo da eseguire viene fatta nella • superclasse Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 4
Realizzazione di super PROBLEMA (soluzione dei conflitti): sia ob l’oggetto ricevente un messaggio con selettore sel, e sia C la superclasse di ob che contiene il metodo da eseguire. Se questo metodo fa riferimento a super, in quale classe va cercato il supermetodo? • Soluzione 1: viene scelto il primo metodo di selettore sel • incontrato al di sopra della classe C, nella lista di priorità • di C • Soluzione 2: viene scelto il primo metodo di selettore sel • incontrato al di sopra della classe C, nella lista di priorità • di ob Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 4
Fusione e composizione di oggetti Costruzione di classi per “fusione” di oggetti Ereditarietà multipla ARTICOLO ELETTRODOMESTICO ARTICOLO_LUSSO TELEVISORE Concettualmente corretto: TELEVISOREè un ELETTRODOMESTICO ed è unARTICOLO_LUSSO (relazione is_a) Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 4
Fusione e composizione di oggetti (continua) RUOTA CARROZZERIA MOTORE AUTOMOBILE Concettualmente scorretto: AUTOMOBILEnon è una CARROZZERIA, né un MOTORE,né una RUOTA Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 4
Fusione e composizione di oggetti (continua) Per la composizione di oggetti esiste già un valido meccanismo disponibile: le variabili di istanza AUTOMOBILEcarrozza : CARROZZERIAmotore : MOTOREruote_ant : RUOTA ruote_pos : RUOTA La classe AUTOMOBILE non eredita da CARROZZERIA, MOTORE, RUOTA, bensì possiede dei campi definiti di tali tipi (relazione has_a) NOTA: una classe può ereditare da un’altra una sola volta Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 4