Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3 1 La relazione di ereditarietà...

22
Progettazione dei sistemi int erattivi (A.A. 2004/05) - Lez ione 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à)

Transcript of Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3 1 La relazione di ereditarietà...

Page 1: Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3 1 La relazione di ereditarietà Punto di vista insiemistico: la relazione di ereditarietà

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

Page 2: Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3 1 La relazione di ereditarietà Punto di vista insiemistico: la relazione di 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

Page 3: Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3 1 La relazione di ereditarietà Punto di vista insiemistico: la relazione di ereditarietà

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

Page 4: Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3 1 La relazione di ereditarietà Punto di vista insiemistico: la relazione di ereditarietà

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)

Page 5: Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3 1 La relazione di ereditarietà Punto di vista insiemistico: la relazione di ereditarietà

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)

Page 6: Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3 1 La relazione di ereditarietà Punto di vista insiemistico: la relazione di ereditarietà

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

Page 7: Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3 1 La relazione di ereditarietà Punto di vista insiemistico: la relazione di ereditarietà

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

Page 8: Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3 1 La relazione di ereditarietà Punto di vista insiemistico: la relazione di ereditarietà

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

Page 9: Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3 1 La relazione di ereditarietà Punto di vista insiemistico: la relazione di ereditarietà

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

Page 10: Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3 1 La relazione di ereditarietà Punto di vista insiemistico: la relazione di ereditarietà

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

Page 11: Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3 1 La relazione di ereditarietà Punto di vista insiemistico: la relazione di ereditarietà

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

Page 12: Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3 1 La relazione di ereditarietà Punto di vista insiemistico: la relazione di ereditarietà

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

Page 13: Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3 1 La relazione di ereditarietà Punto di vista insiemistico: la relazione di ereditarietà

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

Page 14: Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3 1 La relazione di ereditarietà Punto di vista insiemistico: la relazione di ereditarietà

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

Page 15: Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3 1 La relazione di ereditarietà Punto di vista insiemistico: la relazione di ereditarietà

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

Page 16: Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3 1 La relazione di ereditarietà Punto di vista insiemistico: la relazione di ereditarietà

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

}

Page 17: Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3 1 La relazione di ereditarietà Punto di vista insiemistico: la relazione di ereditarietà

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)

}

Page 18: Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3 1 La relazione di ereditarietà Punto di vista insiemistico: la relazione di ereditarietà

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;

}}

Page 19: Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3 1 La relazione di ereditarietà Punto di vista insiemistico: la relazione di ereditarietà

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

}

Page 20: Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3 1 La relazione di ereditarietà Punto di vista insiemistico: la relazione di ereditarietà

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;

}}

Page 21: Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3 1 La relazione di ereditarietà Punto di vista insiemistico: la relazione di ereditarietà

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

}

Page 22: Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3 1 La relazione di ereditarietà Punto di vista insiemistico: la relazione di ereditarietà

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

}}

}