Eccezioni Metodi parziali Eccezioni: Usi e Metodi parziali Eccezioni: rimuovere i requires Eccezioni: rimuovere i requires Eccezioni: definizione, sollevamento,

Slides:



Advertisements
Presentazioni simili
Java base V: La gestione delle Eccezioni
Advertisements

Universita di Camerino
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
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.
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.
Eccezioni Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – – SIENA Uff
Fisica Computazionale I - 51 OPERAZIONI DI INPUT/OUTPUT Le operazioni di input/output sono estremamente complesse perche' implicano una sostanziale interazione.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
AA 2005/06 Informatica Programmazione M.A. Alberti-L. Capra 1 Le eccezioni in Java Programmazione Corso di laurea in Informatica.
Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6 1 Estensione di classi: il Contratto INTERFACCIA E REALIZZAZIONE Che cosa realizza una.
AA2003/04 © M.A. Alberti Programmazione Eccezioni 1 Le eccezioni in Java Programmazione Corso di laurea in Informatica.
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.
Eccezioni.
GESTIONE DEGLI ERRORI Spesso vi sono istruzioni critiche, che in certi casi possono produrre errori. Lapproccio classico consiste nellinse- rire controlli.
Le eccezioni F. Bombi 01/11/ Errori e situazioni impreviste situazioni eccezionali In un programma situazioni eccezionali possono.
Astrazione procedurale ed eccezioni
Polimorfismo Significato Significato Varie famiglie Varie famiglie Polimorfismo in java Polimorfismo in java Polimorfismo di Sottotipo: Apparato in Java.
1 Un esempio con iteratore: le liste ordinate di interi.
Argomenti della lezione
Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie.
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.
Capitolo 6 Iterazione Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies.
1 Eccezioni in Java. 2 Ricordiamo che 4 una procedura può terminare –normalmente, ritornando un risultato –in modo eccezionale ci possono essere diverse.
Gestione dei thread in Java
Input-Output 16 Maggio Nei programmi sviluppati sino ad oggi abbiamo usato * output su schermo (con System.out.print e System.out.print ) * input.
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.
Capitolo 17 Introduzione alle strutture dati Tratti da ©2002 Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2 1 Liste Introduzione alle.
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 Progettare un Tipo di Dato Astratto. 2 Scelte di Progetto (astrazione) 4 Caratteristiche degli oggetti –Modificabilità 4 Scelta delle operazioni –Realizzare.
1 Astrazione procedurale ed Eccezioni. 2 Procedure stand alone 4 indipendenti da specifici oggetti 4 come si realizzano in Java –metodi statici definiti.
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.
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)
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.
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.
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.
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.
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: 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.
1 Metodo I metodi sono uno strumento che i programmatori usano per strutturare i programmi, sia per renderli più facili da capire che per permettere il.
Eccezioni in Java. Le eccezioni in Java Exception handling: insieme di costrutti e regole sintattiche e semantiche presenti nel linguaggio allo scopo.
Ese 3 (del 3 Aprile 2003).
Transcript della presentazione:

Eccezioni Metodi parziali Eccezioni: Usi e Metodi parziali Eccezioni: rimuovere i requires Eccezioni: rimuovere i requires Eccezioni: definizione, sollevamento, gestione Eccezioni: definizione, sollevamento, gestione Cattura: mascheramento o riflessione Cattura: mascheramento o riflessione Eccezioni: regole d’uso Eccezioni: regole d’uso Defensive programming : Checked vs. Unchecked Esempi: fattoriale, LList, compressione di files Esempi: fattoriale, LList, compressione di files

Eccezioni: usi Funzioni parziali domini Gestione di eventi Gestione di eventi thread e concorrenza Catastrofi errori incontrollabili Scopo: Garantire una terminazione “regolare” del programma (stato finale appartiene agli stati consentiti per la terminazione)

Metodi parziali Tre cause principali: Realizza funzione parziale fattoriale Implementazione utilizza funzioni parziali algoritmi di ricerca (possono richiedere strutture ordinate) Strutture sovradimensionate per lo spazio dei valori del dominio fattoriale: Naturali invece di interi

Eccezioni: rimuovere i requires Eccezioni: –Non sono speciali valori del dominio di definizione del metodo parziale –Sono trattabili come fossero valori di un dominio particolare del linguaggio –In JAVA formano una gerarchia di classi Throwable Error RuntimeExceptionunchecked Exceptions Class ClasscheckedClasschecked NullPointerExceptionClassCastException

Eccezioni: definizione, sollevamento, gestione Introducono: come normali valori oggetto new A_ExceptionClass(…) // un valore eccezione checkednew A_ExceptionClass(…) // un valore eccezione checked new NullPointerException(“insert”) // un valore eccezione uncheckednew NullPointerException(“insert”) // un valore eccezione unchecked Definiscono: gerarchia di classe Exception public class NoIntegerException extends Exception{ //OVERVIEW: contiene eccezioni che segnalano uso, come oggetti Integer, // di oggetti che non hanno Integer come superclasse public NoIntegerException(){ super(); } public NoIntegerException(String s){ super(s); } } Spesso non hanno stato

Eccezioni: come si usano? come valoricome valori A_ExceptionClass e; // una variabile x e = new A_ExceptionClass (…) // un assegnamento in metodi che le possono sollevarein metodi che le possono sollevare void luigi (object x) throws A_ExceptionClass {…}// un metodo public int fact (int x) throws NegativeInt {…}// un metodo gestiti:gestiti: –Cattura –Mascheramento –Risollevamento

Cattura: Mascheramento o Riflessione Cattura:Cattura: –Sia C un blocco che può sollevare un’eccezione di classe A –try {C} catch (A v) {..trattamento eccezione associata a v..} Mascheramento: eccezione è risolta eccezione è risolta blocco calcola valore non eccezione blocco calcola valore non eccezioneRiflessione: eccezione non è risolta eccezione non è risolta blocco risolleva tale eccezione blocco risolleva tale eccezione Oppure solleva una nuova eccezione Oppure solleva una nuova eccezione Sollevare eccezione richiede il costrutto Sollevare eccezione richiede il costrutto throw expr dove expr ha valore un’eccezione dove expr ha valore un’eccezione

Eccezioni: regole d’uso (Implementazione di una parziale) 1.Uso locale - funz. privata di una classe a)Lasciamo la clausola requires b)Verifichiamo che nessun uso violi i requires (la verifica è possibile) 2.Uso non locale - funz. pubblica del sistema a)Rimuoviamo la clausola requires b)Introduciamo opportuna classe Exception (se non presente) c)Equipaggiamo il metodo con controlli sull’imput e con sollevamento di eccezione in violazione d)Consideriamo ogni uso (nel sistema) del metodo per cattura- mascheramento-riflessione

ogni procedura controlla di non generare errori Defensive Programming ogni procedura controlla di non generare errori Checked:Checked: Introdotte nel programma --poste in un package dedicatoIntrodotte nel programma --poste in un package dedicato –Mediante classi della gerarchia obbligatorio dichiarare ogni metodo che le può sollevareobbligatorio dichiarare ogni metodo che le può sollevare –Mediante: …. throws ExceptionClass… Vantaggio: gestione esplicita dell’eccezione -- mascheramentoVantaggio: gestione esplicita dell’eccezione -- mascheramento Uso suggerito: metodi parziali in contesto non localeUso suggerito: metodi parziali in contesto non locale Unchecked:Unchecked: Introdotte nei pakages di linguaggioIntrodotte nei pakages di linguaggio Nessun obbligo di dichiarare metodi che le sollevanoNessun obbligo di dichiarare metodi che le sollevano Vantaggio: gestione automatica -- riflessioneVantaggio: gestione automatica -- riflessione Uso suggerito:Uso suggerito: »metodi parziali in contesto locale (o non) ma eccezione non sollevabile -- invocazioni possibili non la provocano »catastrofi -- comportamento non previsto e inatteso

Esempio: Eccezioni in Fact public class Fattoriale{ //overview: //overview: una classe per la procedura stand_alone fatt che calcola la funzione fattoriale public static int fact(int n) throws NegativeIntException{ //Effects: //Effects: se n = 0 calcola 1, se n>0 calcola n*fact(n-1), altrimenti solleva un // eccezione NegativeIntException if (n < 0) throw new NegativeIntException(”Fattoriale:fact”); if (n == 0) return 1; return n*fact(n-1);} } public class NegativeIntException extends Exception{ //overview: //overview: una classe per eccezioni su interi negativi public NegativeIntException(String s){ //Effects: //Effects: costruisce un eccezione sollevata in un contesto s super(s);} }

Esempio: Eccezioni in Fact - 2 public class Fattoriale{ //overview: //overview: una classe per la procedura stand_alone fatt che calcola la funzione fattoriale public static int fact(int n) throws NegativeIntException{ //Effects: //Effects: se n = 0 calcola 1, se n>0 calcola n*fact(n-1), altrimenti solleva un // eccezione NegativeIntException specificando il valore errato if (n < 0) throw new NegativeIntException(”Fattoriale:fact”, n); if (n == 0) return 1; return n*fact(n-1);} } public class NegativeIntException extends Exception{ //overview: //overview: una classe per eccezioni su interi negativi che tiene traccia del valore errato private Int val; public NegativeIntException(String s, Int n){ //Effects: //Effects: costruisce un’eccezione sollevata in un contesto s con valore n super(s); val=n;} public Int value(){ //Effects: //Effects: restituisce il valore errato return val;} }

Esempio: LList public class LList { private Link first; private class Link { Object data; Link next; } … public Object getFirst() { if (first == null) return null; else return first.data; } … public void addFirst(Object obj) { Link newLink = new Link(); newLink.data = obj; newLink.next = first; first = newLink; } … public class LList{ //overview: //overview: … //---stato: oggetti-classe public Object getFirst() throws EmptyListException{ //Effects: //Effects: se this è empty solleva eccezione, altrimenti restituisce // il primo elemento di this. if (first == null) throw new EmptyListException(); … public void addFirst(Object obj) throws NullPointerException{ //Effects: //Effects: se Obj è null solleva eccezione, altrimenti …. if (obj == null) throw new NullPointerException(); … public class EmptyListException extends Exception{ //overview: //overview: una classe per eccezioni su LList public EmptyListException(){ //Effects: //Effects: costruisce un’eccezione di tipo EmptyListExeption } public class NullPointerException extends RunTimeException{ //overview: //overview: una classe per eccezioni su oggetti null public NullPointerException(){ Effects //Effects: costruisce un’eccezione NullPointerException }

Esempio: Compress(Fin,Fout) public class Compress{ //OVERVIEW: contiene la procedura compress. public static void compress(File FIn, File FOut) throws UndefFileException, IllegalSymbol, FileNotFoundException{ //MODIFIES: FOut //EFFECTS: Se FIn o FOut è null solleva un’eccezione della nuova classe UndefFileException, sottoclasse di Exception, con // testo: "compress:argK" (con K=1 o K=2, rispetttivamente). Se FIn o FOut non sono nomi di file solleva eccezione prede- // finita FileNotFoundException. Altrimenti, fintanto che legge da FIn sequenze di lettere su più linee, le filtra (eliminando gli // spazi in eccesso) preservando la disposizione in linee. Allorché incontri un carattere non lecito (non lettera, non speciali "\b", // "\n”), termina chiudendo il file FOut e sollevando un'eccezione della nuova classe IllegalSymbolException, sottoclasse di // Exception, con testo: "compress:C (con C il carattere illegale letto). BufferedReader FInBuff if (Fin == null) then throw (new UndefFileException(“compress: arg1”));} try{FInBuff = OpenReader(FIn);}catch(FileNotFoundException e){throw (new FileNotFoundException(“compress: arg1”));} PrintStream FOutPrinter = OpenPrinter(FOut); // ---- specifica violata: modificare qui while (true) {String line; try { line = FInBuff.readLine(); } catch (java.io.IOException e) {return; } if (line == null) {return; } else {String out; try { out = Filter(line); } catch (IllegalSymbol e) { FOutPrinter.println(e.line); throw (new IllegalSymbol(e.symbol)); } FOutPrinter.println(out); FOutPrinter.flush(); }}} private static BufferedReader OpenReader(File FIn) throws UndefFileException, FileNotFoundException { //EFFECTS:.. private static PrintStream OpenPrinter(File FOut) throws UndefFileException, FileNotFoundException { //EFFECTS:.. private static String Filter(String line) throws IllegalSymbolException { //EFFECTS:..