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.

Slides:



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

1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
1 Semantica Operazionale di un frammento di Java: lo stato.
Classi ed Oggetti in Java (Cenni). Richiami Ruolo delle Classi in Java Oggetti.
LIP: 4 Aprile 2008 ECCEZIONI. Eccezioni Come si definiscono eccezioni Come si lanciano Come si gestiscono (gestione esplicita o di default)
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.
Metodologie di Programmazione = decomposizione basata su astrazioni
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.
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.
Type int_stack = struct { int top; int P[100]; } int_stack creapila() { int_stack s = new int_stack; s.top = 0; return s; } int_stack push(int_stack s,
1 Astrazioni sui dati : Ragionare sui Tipi di Dato Astratti dispense prof. G. Levi.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA FINALE DEL 21 MAGGIO 2007 NOME: COGNOME: ________________________________________________________________________________.
Conversione da base 10 a base X (Utilizzo della pila)
Astrazione procedurale ed eccezioni
1 Un esempio con iteratore: le liste ordinate di interi.
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.
Eccezioni Metodi parziali Eccezioni: Usi e Metodi parziali Eccezioni: rimuovere i requires Eccezioni: rimuovere i requires Eccezioni: definizione, sollevamento,
1 Eccezioni in Java. 2 Ricordiamo che 4 una procedura può terminare –normalmente, ritornando un risultato –in modo eccezionale ci possono essere diverse.
Astrazione di dati Esercizio 1. Si completi l’implementazione Poly.add data a lezione con la specifica e l’implementazione degli ausiliari min e max data.
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.
Primo Compitino Primo esercizio Identificare gli errori segnalati dal compilatore Verifica statica del codice Regole di binding per i nomi (quelle.
1 Progettazione dettagliata di un Tipo di Dato Astratto: l’ambiente di metodi.
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 Laboratorio di Introduzione alla Programmazione §II MODULO §3 crediti §Esame e voto unico (su 6 crediti totali)
1 Astrazione sul controllo: gli iteratori. 2 Gli iteratori 4 perché vogliamo iterarare “in modo astratto” 4 iteratori e generatori in Java –specifica.
Ese 1 (del 31 Marzo 2004). Il compilatore Non esegue il programma, non guarda i valori che possono assumere di volta in volta le variabili, non fa assunzioni.
LIP: 9 Maggio Esercizi Riprendiamo un esercizio proposto Definire un tipo di dato Persona che definisce oggetti che rappresentano le informazioni.
1 Progettare un Tipo di Dato Astratto. 2 Scelte di Progetto (astrazione) 4 Caratteristiche degli oggetti –Modificabilità 4 Scelta delle operazioni –Realizzare.
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.
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 Astrazione sul controllo: gli iteratori. 2 Perché vogliamo iterarare “in modo astratto” 4 problema: iterare su tipi di dato arbitrari  esempio: procedura.
Metodologie di Programmazione Esercizi sulla semantica di Java.
Ese 3 (del 3 Aprile 2003). Testo Progettare la specifica e l’implementazione del tipo di dato astratto modificabile Stack, supponendo che gli elementi.
Ese 3 (del 31 Marzo 2004). Testo Dare rappresentazione e realizzazione dei metodi della seguente classe QueueWithPriority. Nella risposta, non riportare.
LIP: 22 Marzo 2005 Eccezioni. Eccezioni-Richiami Come si definiscono eccezioni Come si lanciano Come si gestiscono (gestione esplicita o di default)
Esercizio 3. Testo Dare rappresentazione e realizzazione dei metodi della seguente classe QueueWithPriority. Nella risposta, non riportare i commenti.
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.
Primo Compitino Terzo Esercizio Implementare il tipo di dato astratto Table un oggetto di tipo Table ha due colonne e un numero variabile di righe.
Progettare una classe 21 Febbraio La classe BankAccount Vogliamo realizzare una classe i cui oggetti sono dei semplici conti bancari. * Identifichiamo.
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
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 Semantica Operazionale di un frammento di Java: intro estensione (con piccole varianti) di quella di FP | v |
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.
Ex.1 - Astrazioni su Dati Si abbia il tipo di dato stack di interi, IntStack, specificato sotto: public class IntStack { \\ OVERVIEW: uno Stack è una collezione.
Ese 3 (del 3 Aprile 2003).
Transcript della presentazione:

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 ed uso dei nomi (metodi e variabili)-visibilita’ tra nomi

public class Sopra extends Object{ private int [] a; private int b; public void metodo1(int i) {b=a[i];} public Sopra metodo2 (Object o) { o. metodo1(10); return o;} * o di tipo Object {a = new int [10]; b = 5;} } public class Sotto extends Sopra { public int c; public Sopra metodo2 (Object o) { Sopra y = new Sotto(); ((Sopra) o).metodo1(3); return y;} {c = a[0]; }* a private } public class Princ extends Object{ static Sopra e; static Sotto f; public static void main() { Sopra d = new Sotto(); e = f.metodo2(d); e.c = 15; f = e; * e di tipo Sopra System.out. println (f); } }

Si abbia il tipo di dato stack di interi (IntStack) così specificato: public class IntStack { \\ OVERVIEW: uno Stack è una collezione di interi organizzati \\ per ordine di inserimento con una politica LIFO. \\ E’ modificabile. public Stack () { \\ EFFECTS: costruisce uno Stack vuoto } public int top() throws EmptyException {\\ EFFECTS: se this è vuoto solleva EmptyException, \\ altrimenti restituisce l’ultimo elemento inserito. } public void pop() throws EmptyException { \\ MODIFIES: this \\ EFFECTS: se this non è vuoto rimuove l’ultimo elemento \\ inserito, altrimenti solleva EmptyException. } public void push (int i) { \\ MODIFIES: this \\ EFFECTS: inserisce i nella pila }

Si dia la rappresentazione e si implementino il costruttore ed il metodo push Facile piccola variante di quello visto in classe in cui gli elementi erano pero’ Object

public class IntStack { \\ OVERVIEW: uno Stack è una collezione di interi organizzati \\ per ordine di inserimento con una politica LIFO. \\ E’ modificabile private Vector pila; \\ rappresentazione privata public IntStack () { \\ EFFECTS: costruisce uno Stack vuoto pila=new Vector(); } public void push (int i) { \\ MODIFIES: this \\ EFFECTS: inserisce i nella pila pila.add (new Integer(i)); }

Si realizzi una procedura stand-alone che, dato uno stack di interi, lo modifica aggiungendo in testa la somma degli elementi (0 se lo stack è vuoto). La procedura deve sollevare eccezione se lo stack e’ null SPECIFICA (metodo statico di un’altra classe) public static void sum(IntStack p) throws NullPointerException { \\MODIFIES: p \\EFFECTS: se p e’ null solleva NullPointerException, altrimenti inserisce al top la somma degli elementi inseriti }

Come si implementa? Bisogna utilizzare l’interfaccia pubblica del tipo di dato astratto IntStack (costruttori e metodi) La rappresentazione (ovvero la variabile d’istanza pila di tipo Vector non e’ visibile) Questo e’ fondamentale per preservare l’astrazione, ovvero per rendere i moduli che usano IntStack indipendenti dalla sua implementazione

Problemi Non esiste un modo per accedere direttamente a tutti gli elementi della pila Per leggere gli elementi e farne la somma bisogna usare top e pop fino a che non si e’ svuotata !!!!! Non esiste un metodo per dirci che la pila e’ vuota (bisogna catturare EmptyException) Inoltre la pila deve essere alla fine ricostruita (gli elementi vanno memorizzati in una struttura ausiliaria una pila o un Vector per esempio)

Altro modo Esisteva un modo molto piu’ semplice per fare la procedura Procedendo in modo ricorsivo Caso base: la pila e’ vuota, metto 0 al top. Caso ricorsivo: richiamo il metodo sum sulla pila da cui ho tolto l’elemento al top x Faccio poi la somma tra l’elemento x che era al top ed il top della pila modificata dalla chiamata ricorsiva (contiene la somma di tutti gli elementi della pila -x)

Errori Comuni Nelle dichiarazioni delle variabili d’istanza (stanno nella classe non dentro i metodi---vedi la semantica diversa) Nella procedura statica: Accedere direttamente alla rappresentazione di IntStack ovvero al Vector che la implementa p.pila.size() Per vedere quanti elementi ha

Altri Confondere le operazioni del tipo di dato IntStack con quelle del tipo di dato usato per implementarlo p.size() p.add(sum) Errore Metodologico: cambiare la specifica del tipo di dato IntStack (dovete imparare a pensare che la specifica e’ fissata a priori in base alle esigenze di altri) dovete imparare usare quello che c’e’) Dovete imparare usare quello che c’e’, se si potesse sempre modificare tutti i moduli di un programma in base alle nostre esigenze pensate che casino, ogni utente farebbe le sue modifiche e poi?