1 / 22

La relazione di ereditarietà

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

joel-dawson
Download Presentation

La relazione di ereditarietà

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. La relazione di ereditarietà • Punto di vista insiemistico: la relazione di ereditarietà descrive una inclusione tra insiemix Î VESTITO ==> x Î ARTICOLO • Punto di vista concettuale: la relazione di ereditarietà indica una specializzazioneVESTITO è 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 Restrizione del grafo di ereditarietà completo alle solesuperclassi della classe considerata Grafo di ereditarietà dellaclasse ASPIRAPOLVERE Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3

  3. Grafo di ereditarietà di una classe (continua) 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 tuttele 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 della Creazione della classe • 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 nel • grafo 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 VESTITO ELETTRODOMESTICO ARTICOLO_LUSSO ASPIRAPOLVERE TELEVISORE CAMICIA CAVIALE ARTICOLO G(telev) ARTICOLO_LUSSO Lista di priorità di telev:TELEVISORE < ARTICOLO_LUSSO < ARTICOLO TELEVISORE 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 VESTITO ELETTRODOMESTICO ARTICOLO_LUSSO TELEVISORE CAMICIA CAVIALE G(telev) ARTICOLO ELETTRODOMESTICO ARTICOLO_LUSSO TELEVISORE Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3

  11. Conflitti nella ricerca di priorità prezzoIva() ARTICOLO prezzoIva() ELETTRODOMESTICO ARTICOLO_LUSSO TELEVISORE non c’è conflitto ARTICOLO prezzoIva() prezzoIva() ELETTRODOMESTICO ARTICOLO_LUSSO TELEVISORE 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 • 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 : Stack METODI add_disco (n) sfila_disco () } Class Stack { CAMPI stack : array[MAX] of Object top : Integer METODI push (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 { CAMPI pioloA : 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); } } } Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3

More Related