1 / 13

Eccezioni

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

midori
Download Presentation

Eccezioni

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Eccezioni: usi • Funzioni parziali • domini • 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)

  3. 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

  4. 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 Exceptions RuntimeException unchecked Class checked Class checked NullPointerException ClassCastException

  5. Eccezioni: definizione, sollevamento, gestione Introducono: come normali valori oggetto • new A_ExceptionClass(…)// un valore eccezione checked • new 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

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

  7. Cattura: Mascheramento o Riflessione • 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 • blocco calcola valore non eccezione • Riflessione: • eccezione non è risolta • blocco risolleva tale eccezione • Oppuresolleva una nuova eccezione • Sollevare eccezione richiede il costrutto • throw expr • dove expr ha valore un’eccezione

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

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

  10. Esempio: Eccezioni in Fact public class Fattoriale{ //overview: una classe per la procedura stand_alone fatt che calcola la funzione fattoriale public static int fact(int n) throws NegativeIntException{ //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: una classe per eccezioni su interi negativi public NegativeIntException(String s){ //Effects: costruisce un eccezione sollevata in un contesto s super(s);} }

  11. Esempio: Eccezioni in Fact - 2 public class Fattoriale{ //overview: una classe per la procedura stand_alone fatt che calcola la funzione fattoriale public static int fact(int n) throws NegativeIntException{ //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: una classe per eccezioni su interi negativi che tiene traccia del valore errato private Int val; public NegativeIntException(String s, Int n){ //Effects: costruisce un’eccezione sollevata in un contesto s con valore n super(s); val=n;} public Int value(){ //Effects: restituisce il valore errato return val;} }

  12. 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; } … Esempio: LList public class LList{ //overview: … //---stato: oggetti-classe public Object getFirst() throws EmptyListException{ //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: se Obj è null solleva eccezione, altrimenti …. if (obj == null) throw new NullPointerException(); … public class EmptyListException extends Exception{ //overview: una classe per eccezioni su LList public EmptyListException(){ //Effects: costruisce un’eccezione di tipo EmptyListExeption } public class NullPointerException extends RunTimeException{ //overview: una classe per eccezioni su oggetti null public NullPointerException(){ //Effects: costruisce un’eccezione NullPointerException }

  13. 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:..

More Related