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

Slides:



Advertisements
Presentazioni simili
Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 2 1 Progettazione e Sviluppo di Software ad Oggetti 4 OBJECT-ORIENTED ANALYSIS Processo.
Advertisements

Strutture dati per insiemi disgiunti
INFORMATICA Algoritmi fondamentali
Tipi di dato astratti Lista, Pila, Coda, Albero.
Strutture dati lineari
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
1 Semantica Operazionale di un frammento di Java: lo stato.
Liste di Interi Esercitazione. Liste Concatenate Tipo di dato utile per memorizzare sequenze di elementi di dimensioni variabile Definizione tipicamente.
Le gerarchie di tipi.
LIP: 19 Aprile Contenuto Soluzione Compitino Tipo di dato MultiSet, estensione con sottoclasse.
Semantica Operazionale di un frammento di Java: lo stato
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
Fondamenti di Informatica
Lez. 31 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Programmazione.
Alberi binari di ricerca
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Informatica di base A.A. 2003/2004 Algoritmi e programmi
File.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 4 Ordinamento: Heapsort Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie.
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
Introduzione al linguaggio C++ 5 lezioni
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA
eliana minicozzi linguaggi1a.a lezione2
1 Lezione XIII Lu 17-Nov-2005 Programmare le classi.
1 2. Analisi degli Algoritmi. 2 Algoritmi e strutture dati - Definizioni Struttura dati: organizzazione sistematica dei dati e del loro accesso Algoritmo:
Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 4 1 Sulla realizzazione dellereditarietà 4 Ereditarietà: statica / dinamica 4 Binding: statico.
1 Le gerarchie di tipi. 2 Supertipi e sottotipi 4 un supertipo –class –interface 4 può avere più sottotipi –un sottotipo extends il supertipo ( class.
memoria gestita staticamente:
Strutture di controllo in C -- Flow Chart --
Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio.
La Programmazione Ricorsiva
Elementi di Informatica di base
Esercizio 10.* Un cassiere vuole dare un resto di n centesimi di euro usando il minimo numero di monete. a) Descrivere un algoritmo goloso per fare ciò.
Algoritmi e Strutture Dati
14 marzo 2002 Avvisi:.
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA FINALE DEL 21 MAGGIO 2007 NOME: COGNOME: ________________________________________________________________________________.
Complessità di un algoritmo
Nota (rif. alla lezione precedente): Vector vs ArrayList Le classi generiche Vector e ArrayList sono sostanzialmente equivalenti, ma: I metodi.
Sistemi e Tecnologie Informatiche Ricorsione Umberto Ferraro Petrillo.
1 Un esempio con iteratore: le liste ordinate di interi.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE La Ricorsione Marco D. Santambrogio – Ver. aggiornata al 21 Maggio 2014.
Programmazione ad oggetti
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
AlgoLab - Pile e Code Pile e code Laboratorio di Algoritmi 02/03 Prof. Ugo de’ Liguoro.
Allievi Elettrici - AA Le funzioni ricorsive in C
1 Tipi di Dato §descrittori, tipi, controllo e inferenza dei tipi §specifica (semantica) e implementazione di tipi di dato l implementazioni “sequenziali”
Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.
Programmazione in Java. Classi I programmi in Java consistono di classi. Le classi consentono di definire: collezioni di procedure (metodi statici) tipi.
Ese 3 (del 3 Aprile 2003). Testo Progettare la specifica e l’implementazione del tipo di dato astratto modificabile Stack, supponendo che gli elementi.
Esercitazione del 7 marzo 2008 Ereditarieta’. Esercizio: soluzione Implementare la seguente specifica che definisce un tipo di dato Libro.
Cose nuove di Java (prima a chiacchiera, poi formalmente)
LIP: 2 Maggio 2008 Classi Astratte. Cos’e’ una Classe Astratta una classe astratta e’ un particolare tipo di classe permette di fornire una implementazione.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Sommario Oggetti immutabili e non Tipi Primitivi: String, Arrays.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
LIP: 11 Maggio 2007 Classi Astratte. Cos’e’ una Classe Astratta una classe astratta e’ un particolare tipo di classe permette di fornire una implementazione.
Esercitazione del 9 marzo 2007 Ereditarieta’. Richiami Definire sottoclassi (ereditarieta’) Overriding Specificatori di accesso (private, protected) Principio.
1 Semantica Operazionale di un frammento di Java: intro estensione (con piccole varianti) di quella di FP | v |
Esercitazione sull’ ordinamento 20 maggio 2003
LIP: 4 Maggio 2007 Interfacce. Cos’e’ una Interfaccia una interfaccia e’ un particolare tipo di classe contiene solo la specifica non ha implementazione.
LIP: 18 Aprile 2008 Interfacce. Rappresentazione Lista val next vuota Lista vuota: any true Lista non vuota: any true 154 false 24 false.
Corso di Algoritmi e Strutture Dati con Laboratorio Richiami di Java – parte II.
Corso di Algoritmi e Strutture Dati con Laboratorio A.A. 2015/16 Oltre le classi.
Introduzione all’Ereditarietà Pietro Palladino. Richiami UML Classe: descrizione di un insieme di oggetti software con caratteristiche simili Definisce.
1 MODULO STRUTTURE DATI FONDAMENTALI: Strutture dinamiche classe 4° INDUSTRIALE INFORMATICA Focus on.
Transcript della presentazione:

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 4 Punto di vista concettuale: la relazione di ereditarietà indica una specializzazione VESTITO è una sorta di ARTICOLO 4 La relazione di ereditarietà è comunque transitiva e determina una relazione dordine 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à della classe ASPIRAPOLVERE Restrizione del grafo di ereditarietà completo alle sole superclassi della classe considerata

Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3 3 Grafo di ereditarietà di una classe (continua) Grafo di ereditarietà della classe TELEVISORE

Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3 4 Proprietà della ereditarietà: uniformità Lereditarietà 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: allatto 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 dellistanza è 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) si riduce ad una catena, che ovviamente non ha bisogno di essere linearizzata: la lista di priorità è banalmente trovata ARTICOLO ELETTRODOMESTICOARTICOLO_LUSSO VESTITO ASPIRAPOLVERETELEVISORE 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 dordine parziale, in cui alcuni elementi possono essere inconfrontabili (es. ELETTRODOMESTICO e ARTICOLO_LUSSO). Per trovare la lista di priorità di O1, la relazione dordine parziale definita da G(O1) deve essere linearizzata per poter risolvere conflitti ARTICOLO ELETTRODOMESTICOARTICOLO_LUSSO VESTITO TELEVISORE CAVIALE CAMICIA G(telev) ARTICOLO ELETTRODOMESTICOARTICOLO_LUSSO TELEVISORE

Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3 11 Conflitti nella ricerca di priorità ARTICOLO ELETTRODOMESTICOARTICOLO_LUSSO TELEVISORE prezzoIva () non cè conflitto ARTICOLO ELETTRODOMESTICOARTICOLO_LUSSO TELEVISORE 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: lassociazione 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: lassociazione avviene solo in fase di esecuzione (late binding) andando a cercare nella lista di priorità dellistanza 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 allaltro 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 e stabilirne 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 e stabilirne 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 che implementa 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 che implementa 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 che implementa 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 che implementa 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 che implementa 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); }