ELEMENTI DI PROGETTAZIONE SOFTWARE

Похожие документы
Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

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

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

Gestione delle Eccezioni

appunti delle lezioni Architetture client/server: applicazioni client

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

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni server

Esercizio 6 Realizzare una classe astratta per le Figure piane e due sottoclassi, la sottoclasse Quadrato e la sottoclasse Rettangolo.

Gestione delle eccezioni in Java

Esercizi della lezione 5 di Java

1 JSPDynPage, componenti portale e Java Server Pages

Main System Monitor Keyboard

Test di unità con JUnit4

13. Chain of Responsibility

7 Esercitazione (svolta): Callback. Polling. Java RMI: callback. Server. Server. Client. Client. due possibilità:

Java Virtual Machine

SAPIENZA Università di Roma, Facoltà di Ingegneria

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Unità B3 Strutture di controllo

appunti delle lezioni Architetture client/server: applicazioni server

QUEUE : considerazioni. QUEUE : considerazioni. QUEUE : esempio. QUEUE : esempio

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

Le variabili. Olga Scotti

LAVORI ESTIVI DI INFORMATICA PER LA CLASSE IV Sez. Ainf (Prof. Tessore Luca)

Prova d Esame Compito B

20 - Input/Output su File

Informatica 3. Informatica 3. LEZIONE 6: Il controllo dell esecuzione. Lezione 6 - Modulo 1. Errori durante l esecuzione. Il controllo dell esecuzione

Ottava Esercitazione. introduzione ai thread java mutua esclusione

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

Esercizi sulla definizione di classi (Fondamenti di Informatica 1 Walter Didimo) Soluzioni

Java threads (2) Programmazione Concorrente

Prova d Esame Compito A

La concorrenza in Java package java.util.concurrent Antonio Furone

ProgettAzione tecnologie in movimento - V anno Unità 4 - Realizzare applicazioni per la comunicazione in rete

19. Introduzione al multi-threading

Introduzione. Java. Composizione. Esempio -- composizione. G. Prencipe È qualcosa che abbiamo già visto varie volte

Corso sul linguaggio Java

Corso di Reti di Calcolatori L-A

Esercitazione n 4. Obiettivi

Corso sul linguaggio Java

Realizzazione di una classe con un associazione

Parola chiave extends

Sistema operativo: Gestione dei processi

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Algoritmi di Ricerca. Esempi di programmi Java

Programmazione 1 A.A. 2015/2016

/** * VETTORE DINAMICO elementi */ private Vector elementi; /** * METODO COSTRUTTORE */ public coda() { elementi=new Vector(); }

Cifratura simmetrica

Organizzazione della lezione. Lezione 18 Remote Method Invocation - 6. (con callback) L accesso al registry per il rebind()

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

Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Secondo Compitino 17 Dicembre 2005

Java: Compilatore e Interprete

Java. Linguaggi di Programmazione Linguaggi Speciali & Tecnologie dei Linguaggi di Programmazione: Scritto del 30 Giugno 2006

Concetto di Funzione e Procedura METODI in Java

Chat. Si ha un server in ascolto sulla porta Quando un client richiede la connessione, il server risponde con: Connessione accettata.

Esercitazioni 7 e 8. Bounded Buffer con sincronizzazione Java (1)

GESTIONE DEI PROCESSI

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

Corso di Informatica (Programmazione) Lezione 6 (31 ottobre 2008)

Parte II: Reti di calcolatori Lezione 10

Il linguaggio C# Eventi ed eccezioni

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Politecnico di Milano. Ingegneria del Software a.a. 2006/07. Appello del 14 settembre 2007 Cognome Nome Matricola

RMI. Java RMI RMI. G. Prencipe

GESTIONE DEGLI ERRORI

Guida all uso dell ambiente di sviluppo 1 integrato o IDE. JCreator LE 4.50

Sistemi Operativi MECCANISMI E POLITICHE DI PROTEZIONE. D. Talia - UNICAL. Sistemi Operativi 13.1

MECCANISMI E POLITICHE DI PROTEZIONE 13.1

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

Le command line di Java

Esempi di esercizi d esame

Corso Linguaggi di programmazione II - Unina Esercitazione (prova intercorso)

Introduzione JDBC interfaccia java.sql driver caricare i driver

Operazioni di input/output. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Primo scritto 11 Gennaio 2008

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Client e Server comunicano tramite il protocollo SOAP.

Specifica i tipi di oggetti a creare, utilizzando un istanza prototipo, e crea nuove istanze tramite la copia di questo prototipo.

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Secondo Compitino 21 Dicembre 2006

public class Hello { public static void main(string[] args){ // visualizza un messaggio sulla finestra di // console System.out.

INFORMATICA GRAFICA - FONDAMENTI DI INFORMATICA Ing. Civile - Edile/Architettura Dott. Penzo SOLUZIONE PROVA SCRITTA DEL 16/09/2002.

Транскрипт:

ELEMENTI DI PROGETTAZIONE SOFTWARE Massimiliano Redolfi Lezione 7: la fortezza Perché un sistema sia robusto ogni suo componente deve essere robusto.

Una semplice metodo public class Main { public static int eval(int a, int b) { Il metodo eval è robusto? NO! ad esempio se invoco eval(12, 0) ottengo un eccezione! proviamo Vedi jex16 Una semplice metodo public class Main { public static int eval(int a, int b) { public static void main(string[] args) { Scanner reader = new Scanner(System.in); PrintStream writer = System.out; Il metodo eval è robusto? ed il modo in cui lo utilizziamo?

Una semplice metodo: irrobustiamo la chiamata public class Main { public static int eval(int a, int b) { public static void main(string[] args) { Scanner reader = new Scanner(System.in); PrintStream writer = System.out; do { while(b == 0); i bastioni della fortezza try/catch

Irrobustiamo la chiamata: alziamo i muri try/catch public static void main(string[] args) { Scanner reader = new Scanner(System.in); PrintStream writer = System.out; try { catch(exception ex) { writer.printf("si è verificato un errore!"); Il blocco try delimita il perimetro di controllo Il blocco catch intercetta le eccezioni che avvengono all interno di tale perimetro Gestiamo diverse tipologie di eccezioni Esistono diverse tipologie di Exception, il blocco catch può essere utilizzato per intercettare alcuni tipi e lasciarne passare altri, lasciando ad altre parti del sistema il compito di gestirle La classe Exception può essere derivata per generare subclass specifiche try { catch(arithmeticexception ex) { writer.printf("si è verificato un errore nell'utilizzo delle funzioni matematiche"); catch(nullpointerexception ex2) { // gestione NullPointerException catch(exception ex3) { // fallback di quelle exception non gestite precedentemente

Generiamo eccezioni: throw E possibile generare esplicitamente un eccezione tramite la parola chiave throw public static int eval(int a, int b) { if(b == 0) throw new ArithmeticException("Il dividendo deve essere diverso da 0!"); Creiamo eccezioni specifiche al contesto La classe Exception può essere derivata per generare subclass specifiche package it.unibs.eps; NegativeIntegerException.java public class NegativeIntegerException extends Exception { public NegativeIntegerException() { this(""); public NegativeIntegerException(String msg) { super(msg);

Dichiariamo le possibili eccezioni di un metodo: throws Quando un metodo può generare eccezioni non standard deve dichiararlo public static int eval(int a, int b) throws NegativeIntegerException { if(b == 0) throw new ArithmeticException("Il dividendo deve essere diverso da 0!"); if(b < 0 a < 0) throw new NegativeIntegerException("La funzione elabora solo valori positivi"); Esercizio: la resurrezione Creare tramite un ciclo do-while un modo per far riprendere il programma anche nel caso si verifichi un errore public static void main(string[] args) { Scanner reader = new Scanner(System.in); PrintStream writer = System.out; boolean ok = false; do { try { ok = true; catch(arithmeticexception ex) { writer.printf("si è verificato un errore nell'utilizzo : %s", ex.getmessage()); // omissis while(!ok); Vedi jex17

i bastioni della fortezza stack trace, rethrowing & finally block Vedi jex18 Il Contesto: lo stack trace Un eccezione porta con sé il suo contesto, to stack delle chiamate al momento in cui si è verificata l eccezione stessa catch(negativeintegerexception ex3) { writer.printf("eccezione utilizzo di interi negativi: %s", ex3); writer.println("lo stack al momento dell'eccezione era..."); ex3.printstacktrace(writer);

Rilanciare un eccezione Se non viene gestita completamente un eccezione DEVE essere rilanciata affinché qualcuno se ne occupi catch(negativeintegerexception ex3) { writer.printf("eccezione utilizzo di interi negativi: %s", ex3); writer.println("lo stack al momento dell'eccezione era..."); ex3.printstacktrace(writer); throw ex3; E possibile anche rilanciare eccezioni di tipo diverso catch(negativeintegerexception ex3) { writer.printf("eccezione utilizzo di interi negativi: %s", ex3); writer.println("lo stack al momento dell'eccezione era..."); ex3.printstacktrace(writer); throw new RuntimeException("Errore interno impossibile proseguire", ex3); Exception chaining: ex3 rappresenta la inner exception, quella che ha generato l errore C è un unico punto da cui uscire: finally Se esiste un blocco finally associato ad un blocco try si passerà sempre da tale blocco al termine dell elaborazione del blocco try stesso: caso 1: senza errori: try > finally caso 2: con errori: try > catch > finally (sempre che esista catch altrimenti come caso 1) finally { writer.println("...da qui si passa sempre!");

Exception Mantra Non intercettare un eccezione se non si sa come gestirla Lasciare che le eccezioni risalgano lo stack Intercettare eccezioni al livello applicativo corretto Utilizzare cicli di retry per tentare di fissare un problema e rieseguire il codice che ha generato l eccezione Un eccezione può essere gestita anche solo parzialmente, in tal caso deve essere rilanciata la stessa eccezione od un altra per la gestione completa Se non si sa come gestire un eccezione terminare il programma nel miglior modo possibile Lo schema di gestione delle eccezioni deve essere semplice