Upload
santino-casagrande
View
220
Download
4
Embed Size (px)
Citation preview
Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3
1
La relazione di ereditarietà
Punto di vista insiemistico: la relazione di ereditarietà descrive una inclusione tra insiemi
x VESTITO ==> x ARTICOLO
Punto di vista concettuale: la relazione di ereditarietà indica una specializzazione
VESTITO è una sorta di ARTICOLO
La relazione di ereditarietà è comunque transitiva e determina una relazione d’ordine tra le classi (chiusura
transitiva della ereditarietà)
Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3
2
Grafo di ereditarietà di una classe
Grafo di ereditarietà dellaclasse ASPIRAPOLVERE
ARTICOLO
Codice
Descrizione
Prezzo
Quantità
PrezzoIva () PrezzoTrasporto () Carico () Scarico () Aggiorna ()
APP_ELETTRICO
Voltaggio
Potenza
Consumo
ASPIRAPOLVERE
Pressione
Raggio_azione
Garanzia
Restrizione del grafo di ereditarietà completo alle solesuperclassi della classe considerata
Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3
3
Grafo di ereditarietà di una classe (continua)
ARTICOLO
Codice
Descrizione
Prezzo
Quantità
PrezzoIva () PrezzoTrasporto () Carico () Scarico () Aggiorna ()
ARTICOLO_DI_LUSSO
prezzoIva ()
APP_ELETTRICO
Voltaggio
Potenza
Consumo
TELEVISORE
Tipo
Dimensione
Canali
Grafo di ereditarietà dellaclasse TELEVISORE
Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3
4
Proprietà della ereditarietà: uniformità
• L’ereditarietà si applica a tutte le proprietà della classe (non è possibile ereditare solo una parte dei campi e dei metodi)
• La relazione di ereditarietà è uniforme per tutti gli oggetti, senza eccezioni (non è possibile che alcuni oggetti ereditino proprietà da una superclasse mentre altri oggetti della stessa classe non ereditino dalla superclasse)
Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3
5
Ereditarietà statica / dinamica
• Ereditarietà statica: tutte le proprietà della superclasse
sono ricopiate nella sottoclasse al momento della creazione
(VANTAGGIO: maggiore efficienza)
• Ereditarietà dinamica: all’atto della creazione non viene
effettuata alcuna copia di proprietà, le quali rimangono nella
sola superclasse e sono accessibili solo dinamicamente
(VANTAGGIO: flessibilità e modificabilità locale)
Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3
6
Ereditarietà statica
Il dizionario delle variabili di una classe viene fissato al momento dellaCreazione della classe
ARTICOLO VESTITO
Misura
Codice
Descrizione
Prezzo
Quantità
Colore
Genere
Codice
Descrizione
Prezzo
Quantità
CAMICIA
Codice
Descrizione
Prezzo
Quantità
Misura
Colore
Genere
Collo
Tessuto
Manica
40976
camicia
35.000
27
43
verde
maschile
francese
cotone
lunga
VANTAGGI:
• Il formato dell’istanza è fissato alla creazione della classe
• Gli indirizzi relativi della struttura fisica sono noti e restano invariati
SVANTAGGIO: • Stile di programmazione top-down
Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3
7
Ereditarietà dinamica
Non viene eseguita alcuna copia del dizionario delle variabili e del dizionario dei metodi al momento della creazione della classe - Queste proprietà appartengono esclusivamente alla classe in cui sono definite
VANTAGGI: • Flessibilità: le proprietà ereditate possono evolvere senza coinvolgere nessuna altra classe che quella di appartenenza
• Il grafo di ereditarietà può essere modificato facilmente con interventi locali
Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3
8
Ricerca di proprietà
PROBLEMA: dato un oggetto O1 della classe C1 e una proprietà p, trovare nelgrafo di ereditarietà G(O1) di O1 la classe C2 da cui eredita p
SCHEMA DI SOLUZIONE:
• linearizzare la gerarchia delle classi espressa in G(O1), ottenendo un ordine totale fra le classi (lista di priorità di O1)
• ricercare nella lista di priorità così ottenuta la prima occorrenza di p
Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3
9
I° caso: ereditarietà semplice
Poiché ogni classe può avere al più una superclasse diretta, il grafo G(O1) siriduce ad una catena, che ovviamente non ha bisogno di essere linearizzata:la lista di priorità è banalmente trovata
ARTICOLO
ELETTRODOMESTICO ARTICOLO_LUSSO VESTITO
ASPIRAPOLVERE TELEVISORE CAVIALE CAMICIA
G(telev)
ARTICOLO
ARTICOLO_LUSSO
TELEVISORE
Lista di priorità di telev:TELEVISORE < ARTICOLO_LUSSO < ARTICOLO
Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3
10
II° caso: ereditarietà multipla
I grafo G(O1) rappresenta una relazione d’ordine parziale, in cui alcuni elementipossono essere inconfrontabili (es. ELETTRODOMESTICO e ARTICOLO_LUSSO). Per trovare la lista di priorità di O1, la relazione d’ordineparziale definita da G(O1) deve essere linearizzata per poter risolvere conflitti
ARTICOLO
ELETTRODOMESTICO ARTICOLO_LUSSO VESTITO
TELEVISORE CAVIALE CAMICIA
G(telev) ARTICOLO
ELETTRODOMESTICO ARTICOLO_LUSSO
TELEVISORE
Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3
11
Conflitti nella ricerca di priorità
ARTICOLO
ELETTRODOMESTICO ARTICOLO_LUSSO
TELEVISORE
prezzoIva()
prezzoIva()
non c’è conflitto
ARTICOLO
ELETTRODOMESTICO ARTICOLO_LUSSO
TELEVISORE
prezzoIva() prezzoIva()
c’è conflitto
Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3
12
Soluzione dei conflitti
• Algoritmi per la linearizzazione (criteri euristici)
• Restrizioni: vietare i conflitti
• Usare la conoscenza del creatore del programma o di un esperto del campo di applicazione caso per caso
ESEMPI
JAVA consente solo ereditarietà semplice
EIFFEL costringe il programmatore a rinominare le proprietà in conflitto
Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3
13
Selezione dei metodi (binding)
send (telev, prezzoIva)
Binding (legame): associazione fra selettore e metodo
Binding statico: l’associazione tra il selettore e il metodo avviene in fase di compilazione (early binding), andando a cercare il metodo nella lista di priorità del riferimento telev
Binding dinamico: l’associazione avviene solo in fase di esecuzione (late binding) andando a cercare nella lista di priorità dell’istanza cui telev fa riferimento
Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3
14
Esercizio: La torre di Hanoi
A B C
Problema: spostare n dischi dal piolo A al piolo B usando il piolo C come appoggio
Regole:
• Si può spostare un solo disco alla volta da un piolo all’altro
• Non si può appoggiare un disco di raggio maggiore su uno di raggio inferiore
Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3
15
Fase di analisi: individuare i dati e i loro comportamenti
Disco: oggetto passivo caratterizzato da un unico dato: il raggio
Piolo: oggetto che detiene un numero variabile di dischi, aggiunge dischi in cima e toglie dischi dalla cima
Solutore: oggetto che detiene tre pioli, e che facendo una giusta sequenza di mosse, risolve il problema
Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3
16
Fase di progettazione: individuare le classi estabilirne le proprietà
Class Piolo {CAMPI
pila : StackMETODI
add_disco (n)sfila_disco ()
}
Class Stack {CAMPI
stack : array[MAX] of Objecttop : Integer
METODIpush (ob) pop ()top ()vuoto ()
}
Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3
17
Fase di progettazione: individuare le classi estabilirne le proprietà (continua)Class Hanoi {
CAMPIpioloA : Piolo;pioloB : Piolo;pioloC : Piolo;
METODI
sposta_disco (p1, p2)Hanoi (n)risolvi (A, B, C, n)
}
Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3
18
Fase di sviluppo: scrivere il codice cheimplementa le classi
Class Piolo {Stack pila = new Stack;add_disco (int n) {
if (pila.vuoto() || pila.top() > n)pila.push(n);
else exit(1);}int sfila_disco () {
int t;if (!pila.vuoto())
t = pila.top();else exit(1);pila.pop();return t;
}}
Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3
19
Fase di sviluppo: scrivere il codice cheimplementa le classi (continua)
Class Stack {Object stack[MAX] = new Object[MAX];int top = 0;
push (Object ob) {if (top < MAX) {
stack[top] = ob;top ++;
} else exit(1);}
pop () {if (top > 0)
top --;else exit(1);
}
Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3
20
Fase di sviluppo: scrivere il codice cheimplementa le classi (continua)
Object top () {if (top > 0)
return stack[top -1];else exit(1);
}
boolean vuoto () {if (top < 1)
return true;else return false;
}}
Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3
21
Fase di sviluppo: scrivere il codice cheimplementa le classi (continua)
Class Hanoi {Piolo pioloA = new Piolo;Piolo pioloB = new Piolo;Piolo pioloC = new Piolo;
sposta_disco (Piolo p1, Piolo p2) {int disco = p1.sfila_disco();p2.add_disco(disco);// VISUALIZZA LO SPOSTAMENTO
}
Hanoi (int n) {int i;for (i = n; i > 0; i--)
pioloA.add_disco(i);risolvi(pioloA, pioloB, pioloC, n);
}
Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3
22
Fase di sviluppo: scrivere il codice cheimplementa le classi (continua)
risolvi (Piolo A, Piolo B, Piolo C, int n) {if (n < 1) return;if (n == 1) sposta_disco(A, B);else {
risolvi(A, C, B, n-1);sposta_disco(A, B);risolvi(C, B, A, n-1);
}}
}