Gestione delle eccezioni

Documenti analoghi
19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

GESTIONE DEGLI ERRORI

RETI DI CALCOLATORI Linguaggio Java: Eccezioni

FONDAMENTI DI INFORMATICA C Linguaggio Java: Eccezioni

Eccezioni. Comportamento di default (esempio) Propagazione delle eccezioni

Laboratorio di reti I

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Insegnamento di Laboratorio di algoritmi e strutture dati

Gestione delle eccezioni in Java

Programmazione ad Oggetti

Capitolo 11 Ingresso/uscita e gestione delle eccezioni. Cay S. Horstmann Concetti di informatica e fondamenti di Java quarta edizione

Concetti Base Eccezioni Eccezioni e Metodi Gerarchia di Eccezioni. Java: Eccezioni. Damiano Macedonio

Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona

Eccezioni per codificare errori. Eccezioni. Gestione di eccezioni. lancio di eccezioni. checked e unchecked. cattura di eccezioni

Gestione delle eccezioni

OOP: L13: Eccezioni e loro trattamento in Java

Eccezioni. Corso di Tecniche di Programmazione

Prova d Esame Compito A

Eccezioni predefinite

Gestione delle Eccezioni

Programmazione II Compitino (Vers. B)

Gestione delle Eccezioni

SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica

SOLUZIONE. Requisiti. Requisiti (cont.) Requisiti (cont.) Sapienza - Università di Roma Facoltà di Ingegneria

Le eccezioni in Java

Eccezioni ed asserzioni

Informatica I. Ingegneria Medica. Prof. Diego Salamon

Esercizi classi e array

GESTIONE DEGLI ERRORI. Il gestore delle eccezioni

Introduzione. Java. Errori. Errori

Esercitazione. Docente Ing. Mariateresa Celardo

Il linguaggio Java. Le eccezioni

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

Gestione delle eccezioni Individuazione e ripristino parseint Individuazione e ripristino Individuazione e ripristino parseint

Corso: Fondamenti di Informatica (Canale 5) a.a Corsi di laurea: Ing. Settore Informazione

Laboratorio di Programmazione Ottobre. Simone Zaccaria

Gestione delle eccezioni

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

Programmazione II Compitino (Vers. A)

Introduzione agli oggetti

16 - Ereditarietà, tipi e gerarchie

16 - Ereditarietà, tipi e gerarchie

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A Gestione delle eccezioni in Java

18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Eccezioni Precisazioni e approfondimenti

5 - Istruzioni condizionali

Parcheggio.rtf 1/8 6 gennaio Prova di programmazione: parcheggio a pagamento

Principi di Progettazione del Software a.a

COGNOME NOME MATRICOLA DATA

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Corso sul linguaggio Java

Algoritmi di Ricerca. Esempi di programmi Java

Corso sul linguaggio Java

Laboratorio di Programmazione 1 [Java]

Principi di Progettazione del Software. Principi di Progettazione del Software a.a

Eccezioni. Gestione degli errori. Eccezioni per codificare errori. Eccezioni. Gestione di eccezioni. Approccio tradizionale: Problemi

Uguaglianza e copia di oggetti

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013

18 - Classi parzialmente definite: Classi Astratte e Interfacce

Esercizio: Lista Circolare

Le basi del linguaggio Java

Algoritmi di Ricerca. Esempi di programmi Java

Esercitazione n 2. Obiettivi

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Esempio su strutture dati dinamiche: ArrayList

6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object

Alberi Binario in Java

Università Ca Foscari DAIS. Programmazione ad Oggetti. Esame del modulo 1

Università degli Studi di Roma La Sapienza, Facoltà di Ingegneria. Corso di INGEGNERIA DEL SOFTWARE (Ing. Informatica, Nuovo Ordinamento)

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

Programmazione a oggetti

La fase di progetto e realizzazione. PROGETTAZIONE DEL SOFTWARE (Ing. Gestionale) Diagramma delle classi realizzativo

Le eccezioni sono eventi che si generano durante l esecuzione di un programma e in genere corrispondono a condizioni anomale.

Programmazione Java Avanzata Programmazione Object- Oriented in Java

Corso di Laurea Ingegneria Civile Fondamenti di Informatica. Esercizi sui metodi. Carla Limongelli. Maggio Esercizi 1

Fondamenti di informatica T-1 (A K) Esercitazione 2: Linguaggio Java, basi e controllo del flusso

Gestione delle eccezioni

Gestione delle eccezioni in Java

Eccezioni 1 CASO: SENTIRE E GESTIRE UN ALLARME. Prof. Enrico Denti Università di Bologna A.A. 2012/ SITUAZIONI CRITICHE IL CONCETTO DI ECCEZIONE

Lezione 4 Casting, stringhe e caratteri, operatori relazionali, espressioni e variabili booleane

Programmazione a Oggetti. Eccezioni

Input. Il tipo char Alcune modalità di acquisizione di input. Laboratorio di Programmazione - Luca Tesei

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object

Variabili e Metodi di classe Interfacce e Package Gestione di File in Java

Fondamenti di Informatica L-B Esercitazione n 5 Java: Interfaccia Comparable, Array

ESERCIZIO 1 (FILE DI TESTO)

14 - Metodi e Costruttori

3. un metodo che restituisce l elenco delle matricole di tutti gli studenti del corso;

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

SOLUZIONE. Requisiti. Requisiti (cont.) Requisiti (cont.)

Laboratorio di Sistemi Classi e relazioni Java

Corso di Laurea in Matematica Corso di Informatica Prova d Esame del 02/02/2010

Progettazione del Software

L input da tastiera in Java. Dott. Ing. M. Banci, PhD

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Programmazione I - Preparazione A.A. 2010/2011

OCA JAVA 7 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

Transcript:

Gestione delle eccezioni Raffaella Brighi, a.a. 2007/08 Ereditarietà Corso di Algoritmi e programmazione. A.A. 2007-08 CdL Operatore Informatico Giuridico. Casi di insuccesso Vi sono numerosi problemi che possono portare all insuccesso nell esecuzione di un metodo: da errori dovuti ai dati in ingresso (input) ad errori di programmazione. Un programma deve essere in grado di gestire il fallimento: individuazione e ripristino. Il meccanismo di gestione delle eccezioni consente di specificare cosa deve fare il programma quando l esecuzione di un metodo fallisce. I principi sono: le eccezioni non devono poter essere trascurate le eccezioni devono essere gestire da un gestore di eccezioni.

public class ContoCorrente double saldo; public void preleva(double valore) saldo=saldo-valore;//il saldo può diventare negativo System.out.println ( inserire un numero tra 1 e10 ); num=inp.nextint() // se num>10 errore di input System.out.println ( inserire un numero ); int num=inp.nextint() // errore se l utente non inserisce un numero intero String filename= c:\pippo ; Filereader reader = new FileReader(filename);//errore se il file viene trovato Scanner in = new Scanner (reader); Segnalare eccezioni Quando il programma intercorre in una situazione di errore occorre lanciare un oggetto eccezione di tipo appropriato, vale a dire segnalare tale situazione (INDIVIDUAZIONE DELL ECCEZIONE). throw oggettoeccezione; throw lancia Nel momento in cui viene lanciata un eccezione il controllo passa al gestore delle eccezioni ed il metodo termina immediatamente.

La classe Exception Java fornisce molti classi per rappresentare situazioni di errori. Quindi per lanciare eccezioni dobbiamo creare istanze di tali classi (oggettoeccezione) e richiamare l istruzione throw. Throwable Error Exception IOException ClassNotFou ndexception Runtime Exception Arithmetic Exception IllegalArgument Exception IndexOutOfBuon d Exception public class ContoCorrente double saldo; public void preleva(double valore) if (valore >saldo) IllegalArgumentException exception = new IllegalArgumentException ( prelievo non disponibile ) throw exception; else saldo=saldo-valore; ---------------------------------------------------- System.out.println ( inserire un numero tra 1 e10 ); int num=inp.nextint() if (num<1 num >10) throw new RuntimeException( input non valido ). ---------------------------------------------------------------------- Scanner inp = new Scanner (System.in); System.out.println ( inserire un numero ); num=inp.nextint() se l utente inserisce un dato che non sia un intero il metodo nextint() della classe Scanner lancia un eccezione InputMismatchException()

Eccezioni personalizzate E possibile creare classi di eccezioni per controllare casi di insuccesso specifici estendendo la classe Exception o RuntimeException. public class InsufficientFundsException extends RuntimeException public InsufficientFundsException() public InsufficientFundsException(String message) super(message); Eccezioni controllate e non controllate Le eccezioni controllate sono eccezioni per cui il compilatore verifica che l eccezione non venga ignorata. E obbligatorio quindi gestire l eccezione. Sono controllate ad esempio tutte le eccezioni IOException. Di regola sono controllate eccezioni dovute a circostanze esterne che non dipendono dal programmatore (es errori di connessione, ecc.) Per dichiarare che un metodo deve terminare se viene lanciata al suo interno un eccezione controllata si contrassegna il metodo con l istruzione throws public void read (String filename) throws FileNotFoundException Le eccezioni non controllate possono essere ignorate (anche se non è buona norma). Sono eccezioni di tipi RuntimeException.

Catturare le eccezioni try istruzione; istruzione; catch (ClasseEccezione oggettoeccezione) istruzione; istruzione; catch (ClasseEccezione oggettoeccezione) istruzione; istruzione; Nel blocco try vengono eseguiti una o più istruzioni che generano eccezioni. Se viene lanciata un eccezione l esecuzione si interrompe e riprende nel blocco catch corrispondente. ContoCorrente cc = new ContoCorrente(100); try cc.preleva(200); catch (IllegalArgumentException exception) System.out.println(exception.getMessage()); --------------------------------- try Scanner inp = new Scanner (System.in); System.out.println ( inserire un numero ); int num=inp.nextint() catch (InuptMismatchException exception) System.out.println(exception.getMessage());

Clausola finally La clausola finally consente di specificare un blocco di istruzioni che devono essere eseguite sempre alla fine del blocco try anche se non si solleva un eccezione. Esercizio 1 Progettare la classe Intervista, che ha lo scopo di porre domande ad uno o più utenti e memorizzarne le preferenze. La classe fornisce i seguenti servizi: compilaanagrafica(): chiede il nome dell utente e l età (l età deve essere un numero positivo e minore di 100) domanda1(): sottopone all utente la seguenti domande a riposta multipla 1) leggi libri (si/no)? domanda2(): sottopone all utente la seguenti domande a riposta multipla genere preferito (gialli/romanzi/saggi) Progettare anche la classe Risposta, caratterizzata da nome, eta, leggelibri (boolean) e genere, per memorizzare le risposte di ogni singola persona intervistata. salvaintervista() memorizza una Risposta completa in una arraylist. Nota implementare una classe personalizzata BadDataException, estensione di RuntimeException per gestire eventuali errori di input Realizzare il programma client che intervista una persona: la domanda 2 viene posta solo se l utente ha risposto si alla domanda 1. Eventuali errori di input vengono indicati dal programma all utente e l intervista termina

package prginterviste; public class BadDataException extends RuntimeException public BadDataException() /** Creates a new instance of BadDataException */ public BadDataException(String message) super (message); package prginterviste; public class Risposta String nome, genere; boolean leggelibri; int eta; /** Creates a new instance of Risposta */ public Risposta (String fnome, int feta, boolean flegge, String fgenere) genere=fgenere; eta=feta; leggelibri=flegge; nome=fnome;

import java.util.scanner; import java.util.inputmismatchexception; import java.util.arraylist; public class Intervista String nome, genere; int eta; ArrayList<Risposta> risposte= new ArrayList<Risposta>(); boolean leggelibri; /** Creates a new instance of Intervista */ public Intervista() public void compilaanagrafica() throws InputMismatchException Scanner inp= new Scanner(System.in); System.out.println ("Inserisci il tuo nome"); nome= inp.nextline(); System.out.println ("Inserisci la tua età"); inp= new Scanner (System.in); int eta= inp.nextint(); if (eta<0 eta>100) throw new BadDataException ("Errore di input: dato età non valido."); public boolean domanda1() System.out.println ("Ti piace leggere? (SI/NO)"); Scanner inp= new Scanner (System.in); String risp= inp.nextline(); if (risp.equals("si")) leggelibri=true; else if (risp.equals("no")) leggelibri=false; else throw new BadDataException("Errore di input: la risposta deve essere si o no"); return leggelibri; public void domanda2() genere=""; System.out.println ("Quale è il tuo genere preferito? (a-b-c)"); Scanner inp= new Scanner (System.in); String risp= inp.nextline(); if (risp.equals("a")) genere="romanzo"; else if (risp.equals("b")) genere="giallo"; else if (risp.equals ("c")) genere = "saggio"; else throw new BadDataException("Errore di input: digitare a, b o c"); public void salvarisposta() risposte.add(new Risposta (nome, eta,leggelibri,genere));

import java.util.inputmismatchexception; public class Main public static void main(string[] args) Intervista myintervista = new Intervista (); try myintervista.compilaanagrafica(); if (myintervista.domanda1()) myintervista.domanda2(); myintervista.salvarisposta(); catch (BadDataException exception) System.out.println (exception.getmessage()); catch (InputMismatchException exception) System.out.println ("LOG: Tipo non corrispondente. Stacktrace= " + exception.getstacktrace()); // TODO code application logic here Esercizio 1 II parte Modificare il programma driver perché vengano intervistate 100 persone, anziché una. Se si verificano errori di input in una delle risposte dell utente, si passa all intervista succesiva. Alla fine dell intervista stampare tutte le riposte salvate. Migliorare l esercizio precedente passando all intervista successiva se entro 1 min l utente non inserisce l input.

Esercizio 2 Progettare in UML e implementare in java la classe ProfessoreUniversitario. Il professore è caratterizzato da nome e numero di matricola. Ogni professore segue una o più tesi. Per rappresentare le tesi definire la classe Tesi: caratterizzata dal nome del tesista, dal titolo della tesi, dal campo booleano discussa (true/false) e dai metodi: - registravoto (int voto): che memorizza il voto e imposta a true il flag di discussione della tesi. Gestire come errore il caso in cui si cerchi di registrare il voto per una tesi già discussa. - tostring(): restituisce nome del tesista, titolo della tesi ed eventualmente voto per le tesi discusse. - boolean equals (Object anobject): verifica se due oggetti Tesi sono uguali (per esserlo devono avere nometesista uguale). La classe ProfessoreUniversitario fornisce i seguenti servizi: - getdescrizione(): restituisce nome e numero di matricola del Professore - aggiungitesi(nometesista, titolo): aggiunge una Tesi all'elenco delle tesi seguite. Gestire come errore il caso in cui si cerchi di inserire una tesi ad un tesista già esistente (nota: utilizzare il metodo equals della classi Tesi). - archiviatesi(nometesista, voto): il metodo prende in input il nome del tesista e il voto e aggiorna l'oggetto Tesi corrispondete. - elencatesi(): stampa l'elenco di tutte le tesi seguite dal professore (nome tesista, titolo ed eventualmente voto) Gestire gli errori definendo classi Eccezioni personalizzate. Esercizio 2 II parte 2) Partendo dalla classe ProfessoreUniversitario progettare e implementare in java le classi: ProfessoreAssociato e ProfessoreOrdinario. Per entrambe le sottoclassi il metodo getdescrizione deve restituire anche il ruolo. Il Professore ordinario, a differenza del Professore associato, può essere coordinatore di una ricerca, per la quale viene eventualmente memorizzato il titolo. La classe ProfessoreOrdinario fornisce i metodi: - coordinaricerca (titolo): prende in input il titolo della ricerca e la assegna al professore. Gestire come errore il caso in cui il professore sia coordinatore di altre ricerche restituisce un messaggio di errore. - getricerca (): indica se il professore è coordinatore o meno di una ricerca e ne restituisce il titolo.