Compitino del 2004 Alberi Generici. Idea Si vuole un tipo di dato astratto che definisca una struttura ad albero in cui nodi e foglie hanno associato.

Slides:



Advertisements
Presentazioni simili
Tipi di dato astratti Lista, Pila, Coda, Albero.
Advertisements

Estendere i linguaggi: i tipi di dato astratti
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
29 febbraio 2008 Progettare tipi di dato astratti.
Liste di Interi Esercitazione. Liste Concatenate Tipo di dato utile per memorizzare sequenze di elementi di dimensioni variabile Definizione tipicamente.
MultiSet, Liste Ordinate
Le gerarchie di tipi.
Esercitazione Frame. Argomento Realizzazione di un tipo di dato astratto Usare le eccezioni per segnalare situazioni particolari Invariante e funzione.
LIP: 19 Aprile Contenuto Soluzione Compitino Tipo di dato MultiSet, estensione con sottoclasse.
1 Le gerarchie di tipi: implementazioni multiple e principio di sostituzione.
PolyFun. Dare implementazione,funzione di astrazione, invarianti della rappresentazione. Provare che i metodi apply e bind preservano gli invarianti.
1 Astrazioni sui dati : Ragionare sui Tipi di Dato Astratti.
Liste Ordinate 3 Maggio Ultima Lezione Abbiamo visto i tipi di dato astratti IntList e StringList Realizzano liste di interi e di stringhe Realizzati.
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
Alberi binari di ricerca
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati.
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.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Esercizi su alberi binari
Alberi binari Definizione della struttura dati: struct tree { };
Esercizi su alberi binari di ricerca
Astrazioni sul controllo Iteratori. 2 Nuove iterazioni Definendo un nuovo tipo come collezione di oggetti (p. es., set) si vorrebbe disporre anche di.
Algoritmi e Strutture Dati
Modello dati ALBERO Albero: Albero: insieme di punti chiamati NODI e linee chiamate EDGES EDGE: linea che unisce due nodi distinti Radice (root): in una.
Esercizi su alberi binari
Heap binari e HeapSort.
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.
Fondamenti di Informatica
1 Programmazione = decomposizione basata su astrazioni (con riferimento a Java)
1.Scrivere una funzione per cercare un numero x in una lista circolare di interi. La funzione deve restituire NULL se il numero non esiste. 2.Scrivere.
Strutture dati per insiemi disgiunti
1 Astrazioni sui dati : Ragionare sui Tipi di Dato Astratti dispense prof. G. Levi.
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Tail recursion: esempio
Esercizi su alberi binari di ricerca
Alberi binari Definizione della struttura dati: struct tree { };
Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
Alberi Alberi radicati : alberi liberi in cui un vertice è stato scelto come radice. Alberi liberi : grafi non orientati connessi e senza cicli. Alberi.
1 Astrazione sul controllo: gli iteratori. 2 Perché vogliamo iterarare “in modo astratto” 4 problema: iterare su tipi di dato arbitrari  esempio: procedura.
Liste di Interi Esercitazione. Una variante Liste concatenate di Integers Non modificabile Costruttori per creare la lista vuota o un nodo Metodi d’istanza.
Liste di Interi Esercitazione. IntList Lista di interi Problema tipico: memorizzare una sequenza di valori [6,0,9,3….9] Vediamo un tipo di dato utile.
Liste Concatenate 11 Aprile E’ una delle strutture dati fondamentali in tutti i linguaggi di programmazione di alto livello Una Lista Concatenata.
Liste di Interi Esercitazione. IntList Lista di interi Una lista è una disposizione ordinata di elementi ( non in modo crescente-descrescente, ma per.
1 Gerarchie e polimorfismo: liste. 2 Generalizzare le liste di interi  List 4 lista di oggetti –non modificabile 4 vorremo poi definire un sottotipo.
1 Astrazione sul controllo: gli iteratori. 2 Gli iteratori 4 perché vogliamo iterarare “in modo astratto” 4 iteratori e generatori in Java –specifica.
LIP: 9 Maggio Esercizi Riprendiamo un esercizio proposto Definire un tipo di dato Persona che definisce oggetti che rappresentano le informazioni.
1 Astrazioni sui dati : Ragionare sui Tipi di Dato Astratti.
1 Un esempio: le liste ordinate di interi. 2 Liste ordinate  OrderedIntList 4 lista ordinata di interi –modificabile.
1 Astrazione sul controllo: gli iteratori. 2 Perché vogliamo iterarare “in modo astratto” 4 problema: iterare su tipi di dato arbitrari  esempio: procedura.
1 Le gerarchie di tipi: implementazioni multiple e principio di sostituzione.
Esercitazione del 7 marzo 2008 Ereditarieta’. Esercizio: soluzione Implementare la seguente specifica che definisce un tipo di dato Libro.
Ese 3 (del 3 Aprile 2003). Testo Progettare la specifica e l’implementazione del tipo di dato astratto modificabile Stack, supponendo che gli elementi.
1 Le s-espressioni. 2  Sexpr 4 alberi binari (possibilmente “vuoti”) che hanno sulle foglie atomi (stringhe) 4 sono la struttura dati base del linguaggio.
PolyFun. Dare implementazione,funzione di astrazione, invarianti della rappresentazione. Provare che i metodi apply e bind preservano gli invarianti.
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.
1 Astrazione sul controllo: gli iteratori. 2 Perché vogliamo iterare “in modo astratto” 4 problema: iterare su tipi di dato arbitrari  esempio: procedura.
Sommario Oggetti immutabili e non Tipi Primitivi: String, Arrays.
Esercitazione. Problema Vogliamo definire in modo gerachico un tipo di dato che definisce Tabelle multi-dimensionali con un numero di righe variabili.
Ese 1 e 3 (del 6 Aprile 2005). Primo Ese Si identifichino gli errori che il compilatore segnalerebbe per il seguente programma Tipi Legami tra dichiarazioni.
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 14 Marzo Esercizio dell’altra volta Definire un tipo di dato Abbonato i cui oggetti descrivono le informazioni relative ad un abbonato.
Esercitazione del 9 marzo 2007 Ereditarieta’. Richiami Definire sottoclassi (ereditarieta’) Overriding Specificatori di accesso (private, protected) Principio.
Liste Concatenate 28 Marzo Avviso Martedi’ 4 Aprile: Verifica di LIP Per iscriversi (obbligatorio) inviare un e- mail entro venerdi’ 31 Marzo a.
1 Un esempio con iteratore: le liste ordinate di interi.
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: 15 Marzo 2005 Vettori di interi. Esercizio proposto Definire una classe VectorInt i cui oggetti sono vettori omogenei di interi ordinati in modo.
LIP: 18 Aprile 2008 Interfacce. Rappresentazione Lista val next vuota Lista vuota: any true Lista non vuota: any true 154 false 24 false.
Algoritmi e Strutture Dati HeapSort. Select Sort: intuizioni L’algoritmo Select-Sort  scandisce tutti gli elementi dell’array a partire dall’ultimo elemento.
Transcript della presentazione:

Compitino del 2004 Alberi Generici

Idea Si vuole un tipo di dato astratto che definisca una struttura ad albero in cui nodi e foglie hanno associato (sono etichettati) un valore di tipo qualsiasi ma tra loro omogenei I nodi non sono binari ma ogni nodo puo’ avere n figli dove n>0 Le foglie non hanno figli

h g s at “a” “c” “b” Esempio

Progettazione Gerarchica Supertipo definisce il tipo Albero Due sottotipi che definiscono i due casi Foglia e Nodo Vantaggio: le due implementazioni sono specializzate, sono piu’ facili da implementare Il supertipo Albero e’ definito da una classe astratta (e non da una interfaccia), alcune cose si possono implementare in modo comune

Prima Parte Si forniscano le specifiche delle due sottoclassi concrete Foglia e Nodo che realizzano foglie e nodi con figli, rispettivamente. Si diano solo (ove necessario) i costruttori e quei metodi per cui e’ diversa la specifica. Facile: basta specializzare i metodi astratti al caso del sottotipo

Foglia

Nota Il costruttore di Foglia deve necessariamente essere pubblico (altrimenti da dove si comincia a costruire un albero?). Il costruttore di Nodo non serve invece a chi utilizza il tipo di dato astratto, perche’ c’e’ il metodo costruisci; serve solo all’interno delle classi Foglia e Nodo per implementare il metodo costruisci. Assumendo che Foglia e Nodo facciano parte dello stesso package lo mettiamo privato e mettiamo delle pre- condizioni per garantire che il Nodo sia “ben- formato” (vedi invariante dopo).

Domanda Successiva 1.Si dimostri che la specifica del metodo seleziona di Nodo soddisfa la regola dei metodi Le specifiche non sono uguali: ma la soddisfa perche’, se this e’ di tipo Nodo, non e’ una foglia. Non deve sollevare l’eccezione NotANodeException in accordo alla specifica del metodo del supertipo.

Domanda Successiva Si definisca la rappresentazione della classe Nodo, con funzione di astrazione e invariante di rappresentazione 1.Si fornisca l’implementazione del metodo costruisci e del costruttore di Nodo

Rappresentazione Ricorsiva Simile a quella della lista concatenata e dell’albero binario Non serve la variabile booleana vuota (siamo nel acso del nodo) Per memorizzare gli Alberi figli usiamo un array di Alberi (prendendo spunto dal metodo costruisci)

Rappresentazione Privata

Invariante

F di Astrazione

Costruttore Notate che la precondizione garantisce le proprieta’ di figli Richieste dall’invariante Se fosse pubblico dovrei verificarle (meglio privato)

Costruisci

Nota che

Ultima domanda Si fornisca l’implementazione del metodo concreto etichette (iteratore della classe astratta) assumendo che l’implementazione di Albero contenga anche il seguente metodo concreto private int count() { // EFFECTS: restituisce il numero di foglie e nodi di this}

Iteratore Visita in ordine posticipato dell’esempio: a a a c a g b t s h

Problema Il generatore deve essere realizzato nella classe astratta (indipendentemente dalle sottoclasse) Deve iterare usando i metodi astratti per leggere i valori Non e’ un problema se uno usa i metodi seleziona, etichetta, figli (sono come first e rest della lista) Bisogna usare un generatore ricorsivo che generalizza quello della lista Si mantiene un sottogeneratore che inizilamente e’ quello del figlio di destra, poi si sposta fino all’ultimo figlio Quando sono finiti i figli produce la radice

Inner Class Per il Generatore

Costruttore ed hasNext

Metodo next