LIP: 4 Aprile 2008 ECCEZIONI. Eccezioni Come si definiscono eccezioni Come si lanciano Come si gestiscono (gestione esplicita o di default)

Slides:



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

Costruttori e Distruttori
Universita di Camerino
Differenze nei vari linguaggi di Elisa Trifirò e Barbara Tacchino
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
Liste di Interi Esercitazione. Liste Concatenate Tipo di dato utile per memorizzare sequenze di elementi di dimensioni variabile Definizione tipicamente.
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.
PolyFun. Dare implementazione,funzione di astrazione, invarianti della rappresentazione. Provare che i metodi apply e bind preservano gli invarianti.
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.
Fisica computazionale I - 21 OPERATORI. Fisica computazionale I - 22 OGGETTI Gli oggetti sono strutture di dati che possono essere create, attraverso.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
1 Corso di Informatica (Programmazione) Lezione 12 (19 novembre 2008) Programmazione in Java: i metodi statici.
Corso di Laurea in Biotecnologie Informatica (Programmazione)
Specifiche senza JML: uso delle asserzioni. 2 Asserzioni in Java Dal jdk 1.4 (da Febbraio 2002) cè meccanismo per gestire asserzioni Asserzione: espressione.
Scomposizione di stringhe
Derivazione tra classi
AA 2005/06 Informatica Programmazione M.A. Alberti-L. Capra 1 Le eccezioni in Java Programmazione Corso di laurea in Informatica.
Gestione dei Progetti Software 2 (a.a. 2004/05) - Lezione 3 1 JAVA e Internet: il World Wide Web Internet: milioni di computer collegati fra di loro attraverso.
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.
Selezione (=scelta) con “if-else”
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.
Concetti di informatica e fondamenti di Java, 4 ed.Apogeo ©2007 Capitolo 11 Ingresso/uscita e gestione delle eccezioni Cay S. Horstmann Concetti di informatica.
Lezione XII Laboratorio di Programmazione. Eccezioni Per la gestione di operazioni che possono non andare a buon fine il C++ mette a disposizione un sistema.
GESTIONE DEGLI ERRORI Spesso vi sono istruzioni critiche, che in certi casi possono produrre errori. Lapproccio classico consiste nellinse- rire controlli.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
Programmazione concorrente
1 Lucidi delle esercitazioni di Sistemi di Elaborazione in Rete Università degli Studi della Calabria Corso di Laurea in Ingegneria Gestionale A.A. 2003/2004.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA FINALE DEL 21 MAGGIO 2007 NOME: COGNOME: ________________________________________________________________________________.
Corso JAVA Lezione n° 12 Istituto Statale di Istruzione Superiore “F. Enriques”
1 Applet ed HTML Fondamenti di Informatica Corso D.
Le eccezioni F. Bombi 01/11/ Errori e situazioni impreviste situazioni eccezionali In un programma situazioni eccezionali possono.
I nomi in Java F. Bombi 18 novembre novembre 2003.
Astrazione procedurale ed eccezioni
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Capitolo 6 Iterazione Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies.
Eccezioni Metodi parziali Eccezioni: Usi e Metodi parziali Eccezioni: rimuovere i requires Eccezioni: rimuovere i requires Eccezioni: definizione, sollevamento,
Capitolo 12 Thread 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
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.
10/12/2004Laboratorio di Programmazione - Luca Tesei1 Gestione delle eccezioni.
Liste Concatenate 11 Aprile E’ una delle strutture dati fondamentali in tutti i linguaggi di programmazione di alto livello Una Lista Concatenata.
1 Astrazione sul controllo: gli iteratori. 2 Gli iteratori 4 perché vogliamo iterarare “in modo astratto” 4 iteratori e generatori in Java –specifica.
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.
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 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.
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 Elementi di programmazione concorrente in Java: i threads.
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.
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: 15 Marzo 2005 Vettori di interi. Esercizio proposto Definire una classe VectorInt i cui oggetti sono vettori omogenei di interi ordinati in modo.
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:

LIP: 4 Aprile 2008 ECCEZIONI

Eccezioni Come si definiscono eccezioni Come si lanciano Come si gestiscono (gestione esplicita o di default)

Eccezioni in Java Un programma Java puo 1) terminare normalmente 2) terminare in modo eccezionale (linterprete segnala leccezione indicandone il tipo)

Esempio:riferimento null public class NestedNullPointer { public static void bar(){ Object o = null; System.out.println(o.toString()); } public static void foo(){ bar(); } public static void main(String [] args){ foo(); }

Esecuzione del main java java Tutti i metodi annidati terminano Viene elencata la catena dei metodi attivi nel momento in cui si verifica l'eccezione ( bar - foo - main ) e per ogni metodo la linea di codice dove si è verificata In questo caso leccezione NullPointer (primitiva) segnala un errore run-time, ovvero una chiamata di un metodo su un oggetto null

Le eccezioni in Java i tipi di eccezione sono particolari classi che –contengono solo il costruttore ci possono essere più costruttori overloaded le eccezioni sono oggetti –creati eseguendo new di un exception type e quindi eseguendo il relativo costruttore esiste una gerarchia predefinita di tipi relativi alle eccezioni –nuovi tipi di eccezioni sono collocati nella gerarchia con lusuale extends

La gerarchia di tipi per le eccezioni Throwable Exception Error RuntimeException se un nuovo tipo di eccezione estende la classe Exception –leccezione è checked se un nuovo tipo di eccezione estende la classe RuntimeException –leccezione è unchecked

Differenza: checked e unchecked se una procedura può sollevare una eccezione checked (controllata) –deve elencarla nel suo header (tramite throws) altrimenti si verifica un errore a tempo di compilazione se una procedura può sollevare una eccezione unchecked (runt-time) –può non elencarla nel suo header

Eccezioni Primitive: run-time –IndexOutOfBoundsException –NullPointerException –I metodi foo, bar e main possono terminare lanciando questa eccezione -- non e obbligatorio riportarla nellintestazione del metodo

Eccezione Controllata public class NotFoundException extends Exception { //costruttore public NotFoundException(String s) {super(s);} } la stringa contenuta nelleccezione permette allutente di identificare la procedura che la ha sollevata può comparire nel messaggio di errore che si stampa subito prima di forzare la terminazione dellesecuzione si puo anche mettere un costruttore senza argomenti

Lanciare eccezioni Una eccezione si lancia tramite il costrutto throw throw new NotFoundException(nome metodo corrente); La new crea leccezione contenente la stringa Il metodo corrente si sospende e passa il controllo al chiamante

Gestione delle Eccezioni Il chiamante puo –gestione di default, mediante propagazione delleccezione alla procedura chiamante possibile solo per eccezioni non checked o per eccezioni checked elencate nellheader della procedura che riceve leccezione –gestione esplicita (mediante try and catch), cattura e gestisce leccezione

Catturare una Eccezione Il codice che potrebbe sollevare leccezione e racchiuso allinterno di uno statement try Il codice per gestire leccezione e racchiuso allinterno di uno statement catch In realta possono esserci vari statements catch per catturare diverse eccezioni e gestirle in modo specifico (vedi documentazione Java)

Esempio public static boolean cerca(int[] a, int x) throws NotFoundException{ \\EFFECTS\\EFFECTS: se x occorre in a restituisce true, \\ altrimenti solleva leccezione NotFound for (int i=0; i<a.length,i++) if (a[i]==x) {return true;} throw new NotFoundException(cerca); } Il metodo chiamante deve gestirla in modo esplicito o per default NotFoundException e controllata (se un metodo puo sollevarla deve essere elencata nella sua intestazione)

Gestione Default public static void usa-cerca() throws NotFoundException{ cerca(b,8); } Se cerca(b,8 ) termina lanciando NotFound il metodo termina lanciando NotFound Dato che leccezione e controllata deve essere elencata nellintestazione

Gestione Esplicita public static void usa-cerca() { try{cerca(b,8)} catch (NotFoundException e) {....codice che gestisce e...}; } Se cerca(b,8 ) termina lanciando NotFound il metodo esegue.... codice che gestisce e....

Esempio Esempio: pila (Stack) di interi Mantiene gli elementi per ordine di inserimento (LIFO) E utile utilizzare le eccezioni per segnalare alcuni casi particolari o situazioni non richieste

Quali operazioni? isEmpty() serve per testare se la pila e vuota top() serve per leggere lelemento al top della pila, ovvero lultimo inserito pop() rimuove lultimo elemento inserito (al top della pila) push (int x) inserisce x nella pila al top PRECONDIZIONI: top() e pop() per garantire che non sia vuota

Modifica della Specifica Si possono rimuovere le precondizioni, trasformando i metodi da parziali a totali Usando uneccezione EmptyException (controllata) per segnalare il fatto che ce un errore Omettiamo la def. Del tipo eccezione (standard)

Specifica e implementazione public class Stack { \\ OVERVIEW: uno Stack e una collezione di interi organizzati per ordine di inserimento con una politica LIFO. E modificabile private Vector pila; public Stack () { \\ EFFECTS: costruisce uno Stack Vuoto pila=new Vector();} public boolean isEmpty() { \\ EFFECTS: se this e vuoto restituisce true, altrimenti false if (pila.size()==0) {return true;} else {return false;} }

Specifica e implementazione public int top()throws EmptyException { \\ EFFECTS: se this e vuota solleva EmptyException, altrimenti restituisce lultimo elemento inserito if (isEmpty()) {throws new EmptyException(Stack.top);} Integer x=pila.elementAt(pila.size()-1)); return x.intValue();} public void pop() throws EmptyException { \\ MODIFIES: this \\ EFFECTS: se this e vuota solleva EmptyException, altrimenti rimuove lultimo elemento inserito if (isEmpty()) {throws new EmptyException(Stack.pop);} pila.removeElementAt(pila.size()-1));} public void push (int x) { \\ MODIFIES: this \\ EFFECTS: inserisce x nella pila pila.addElement(new Integer(x));} } NOTA: specifica totale ( con eccezioni)

Gestione delle Eccezioni Chi usa il tipo di dato Stack deve gestire le eccezioni Esempio: procedura stand-alone che rimpiazza gli elemnenti della pila con la loro somma

public static void sum (Stack p) throws EmptyException { \\REQUIRES: p non e null \\MODIFIES\\MODIFIES: p \\EFFECTS\\EFFECTS: se p e vuota solleva EmptyException, altrimenti rimuove tutti gli elementi ed inserisce al top la loro somma int somma=p.top(); p.pop(); try {while (true) {somma = somma+p.top(); p.pop();} }catch(EmptyException e) {p.push(somma);} } Notate che non accede alla variabile pila di tipo Vector, usa solo linterfaccia pubblica! Leccezione controllata EmptyException viene propagata automaticamente al metodo chiamante (deve essere riportata nella clausola throws)

Esercizio I Definire una classe Frame che definisce oggetti che rappresentano funzioni parziali (a dominio finito) da String (dominio) ad int (Codominio) In sostanza sono delle tabelle (senza duplicati) (a,1) (c,14) (b,10) (c-13) (a,1)(a,6) non e un Frame!

Esercizio I Il tipo di dato e modificabile Vogliamo un ordinamento in base al primo elemento (String) (a,1) (b,10) (c,14)

Esercizio I Vogliamo le seguenti operazioni (al solito espresse da costruttori e metodi pubblici) - leggere il valore associato ad una certa stringa -inserire una nuova associazione -modificare lassociazione esistente per una certa stringa

Esercizio I Diamo la specifica in modo da soddisfare le richieste Le proprieta devono valere per costruzione Usiamo le eccezioni per segnalare i casi non richiesti

Esercizio: Eccezioni –NullPointerException e una eccezione unchecked primitiva – DuplicateException e una eccezione checked (da definire) –NotFoundException e una eccezione checked (da definire)

Specifica (Interfaccia Pubblica) public class Frame{ \\ OVERVIEW: un Frame e una funzione parziale da stringhe ad \\ interi. I valori del dominio sono ordinati. E \\modificabile public Frame(){ \\ EFFECTS: costruisce un nuovo Frame indefinito per tutti \\i valori } public boolean defined(String s) { \\EFFECTS\\EFFECTS: se s e null solleva NullPointerException, se this e definita per s restituisce true, altrimenti restituisce false}

Altri Metodi public int apply(String s) throws NotFoundException{ \\ EFFECTS: se s e null solleva NullPointerException, se this e \\ definita per s restituisce il valore associato, altrimenti solleva \\ NotFoundException} public String toString(){ \\ EFFECTS: restituisce una stringa che contiene le coppie di this, \\(x,y) dove y e lelemento associato ad x} public void bind(String s, int x) throws DuplicateException{ \\MODIFIES\\MODIFIES: this \\EFFECTS\\EFFECTS: se s o x e null solleva NullPointerException, se this e \\definita per s solleva DuplicateException, altrimenti modifica \\this aggiungendo lassociazione tra s ed x in base \\allordinamento}

Come si puo implementare Frame? La scelta fondamentale (come per tutte le classi che definiscono oggetti) e quella delle variabili distanza Definiscono lo stato degli oggetti Vanno dichiarate nella classe Inizializzate dal costruttore

Per esempio Dobbiamo di fatto memorizzare linsieme delle coppie (valore dominio, valore codominio) Si puo usare un Vector che contiene coppie (String, int) (va definito un tipo coppia) Si possono usare due Vector che memorizzano uno il dominio e laltro il codominio, mantenendo nella stessa posizione gli elementi associati La scelta tra le due implementazioni deve essere invisibile al di fuori della classe Frame (e.g. a chi lo usa)

A tale proposito Notate che la specifica data e astratta (non fa riferimento allimplementazione) Al contrario e progettata per astrarre dai dettagli della possibile implementazione

Tipo record Pair public class Pair{ public String left; public int right; public Pair(String s, int i) {left=s;right=i;} }

Esercizio II Estendere la specifica e limplementazione con due nuovi metodi --- union che modifica this, realizzando lunione con un Frame f (parametro) --- intersection che modifica this, realizzando lintersezione con un Frame f (parametro)

Attenzione Lunione e lintersezione devono garantire le proprieta richieste --funzione & ordinamento Problema: [ (a,20),(c,1)] unione [(a,3)] [(a,3),(a,20),(c,1)] non e un frame

Di conseguenza Bisogna trattare le situazioni non volute Tipicamente usando delle eccezioni

Sviluppare (in parallelo) un Tester Costruire un Frame vuoto Prendere dei valori da console ed inserire delle relative associazioni (usando bind) Testare sul Frame i metodi apply e defined Bisogna testare anche le eccezioni che questi metodi possono sollevare (bind e apply)

Cosa vuol dire? Provare apply su un valore che non e definito (il metodo deve sollevare leccezione NotFoundexception) Provare bind su un valore che e gia definito (il metodo deve sollevare leccezione Duplicateexception) Attenzione a catturare le Eccezioni e non fare fallire il main (mediante try e catch) Fare invece stampare il motivo delleccezione (con toString)