Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 4 1 Sulla realizzazione...

11
Progettazione dei Sistemi Int erattivi (A.A. 2004/05) - Le zione 4 1 Sulla realizzazione dell’ereditarietà Ereditarietà: statica / dinamica Binding: statico / dinamico Attribuzione dei tipi: statica / dinamica

Transcript of Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 4 1 Sulla realizzazione...

Page 1: Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 4 1 Sulla realizzazione dellereditarietà 4 Ereditarietà: statica / dinamica 4 Binding: statico.

Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 4

1

Sulla realizzazione dell’ereditarietà

Ereditarietà: statica / dinamica

Binding: statico / dinamico

Attribuzione dei tipi: statica / dinamica

Page 2: Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 4 1 Sulla realizzazione dellereditarietà 4 Ereditarietà: statica / dinamica 4 Binding: statico.

Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 4

2

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

Page 3: Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 4 1 Sulla realizzazione dellereditarietà 4 Ereditarietà: statica / dinamica 4 Binding: statico.

Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 4

3

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

Page 4: Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 4 1 Sulla realizzazione dellereditarietà 4 Ereditarietà: statica / dinamica 4 Binding: statico.

Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 4

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))

Page 5: Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 4 1 Sulla realizzazione dellereditarietà 4 Ereditarietà: statica / dinamica 4 Binding: statico.

Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 4

5

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

Page 6: Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 4 1 Sulla realizzazione dellereditarietà 4 Ereditarietà: statica / dinamica 4 Binding: statico.

Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 4

6

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_DEPERIBILEprezzoTrasporto():

return (15.000 + 0,05 x prezzo)

CAVIALE UOVA

Page 7: Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 4 1 Sulla realizzazione dellereditarietà 4 Ereditarietà: statica / dinamica 4 Binding: statico.

Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 4

7

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

Page 8: Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 4 1 Sulla realizzazione dellereditarietà 4 Ereditarietà: statica / dinamica 4 Binding: statico.

Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 4

8

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

Page 9: Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 4 1 Sulla realizzazione dellereditarietà 4 Ereditarietà: statica / dinamica 4 Binding: statico.

Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 4

9

Fusione e composizione di oggetti

ARTICOLO

ELETTRODOMESTICO ARTICOLO_LUSSO

TELEVISORE

Ereditarietà multipla Costruzione di classi per “fusione” di oggetti

Concettualmente corretto: TELEVISOREè un ELETTRODOMESTICO ed è unARTICOLO_LUSSO (relazione is_a)

Page 10: Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 4 1 Sulla realizzazione dellereditarietà 4 Ereditarietà: statica / dinamica 4 Binding: statico.

Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 4

10

Fusione e composizione di oggetti (continua)

RUOTACARROZZERIA MOTORE

AUTOMOBILE

Concettualmente scorretto: AUTOMOBILEnon è una CARROZZERIA, né un MOTORE,né una RUOTA

Page 11: Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 4 1 Sulla realizzazione dellereditarietà 4 Ereditarietà: statica / dinamica 4 Binding: statico.

Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 4

11

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 : RUOTAruote_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