Eccezioni – Precisazioni e approfondimenti

Slides:



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

IL PACKAGE java.io Il package java.io definisce quattro
Java Stream e File.
12/11/2004Laboratorio di Programmazione - Luca Tesei1 Caratteri – Input da Console Il tipo char Input dallo standard input.
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.
LIP: 19 Aprile Contenuto Soluzione Compitino Tipo di dato MultiSet, estensione con sottoclasse.
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.
Scomposizione di stringhe
I File.
GESTIONE DEGLI ERRORI Spesso vi sono istruzioni critiche, che in certi casi possono produrre errori. Lapproccio classico consiste nellinse- rire controlli.
Conversione da base 10 a base X (Utilizzo della pila)
Astrazione procedurale ed eccezioni
Eccezioni Metodi parziali Eccezioni: Usi e Metodi parziali Eccezioni: rimuovere i requires Eccezioni: rimuovere i requires Eccezioni: definizione, sollevamento,
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
1 Eccezioni in Java. 2 Ricordiamo che 4 una procedura può terminare –normalmente, ritornando un risultato –in modo eccezionale ci possono essere diverse.
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 Progettazione dettagliata di un Tipo di Dato Astratto: l’ambiente di metodi.
Liste Concatenate 11 Aprile E’ una delle strutture dati fondamentali in tutti i linguaggi di programmazione di alto livello Una Lista Concatenata.
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.
LIP: 22 Marzo 2005 Eccezioni. Eccezioni-Richiami Come si definiscono eccezioni Come si lanciano Come si gestiscono (gestione esplicita o di default)
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.
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 Input / Output Spesso un programma deve acquisire dati da una sorgente esterna o inviare informazioni a una destinazione esterna. L’informazione può.
13/08/02Input 1 Interagire con il computer Da tastiera Da riga di comando Funzioni di conversione.
1 Input / Output Spesso un programma deve acquisire dati da una sorgente esterna o inviare informazioni a una destinazione esterna. L’informazione puo’
Stringhe in Java. Definire una stringa. Definire una stringa in Java Il modo più semplice e diretto per creare un oggetto di tipo String è assegnare alla.
Input in Java. Uso Scanner Un oggetto per la lettura dalla tastiera Piuttosto, per rappresentare la tastiera del nostro calcolatore useremo un oggetto.
Introduzione alle Classi e agli Oggetti in Java 1.
Eccezioni in Java. Le eccezioni in Java Exception handling: insieme di costrutti e regole sintattiche e semantiche presenti nel linguaggio allo scopo.
Script bash I file di comandi in Linux. BASH  Bourne Again Shell  Modalità interattiva o batch (file di comandi)  Ambiente di programmazione “completo”
1 ELEMENTI DI INFORMATICA Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettronica Linguaggio C A.A. 2011/2012
Programmazione in Java Parte II Lezione 5 Dott. Marco Faella.
Amministrazione di reti di calcolatori - Massimo Bertozzi Shell e scripting.
Ereditarietà Uno dei principi della programmazione orientata agli oggetti (OOP) è il riuso Le classi dovrebbero essere progettate come componenti riutilizzabili.
Maurizio Cozzetto, Francesco Sarasini
Java: concetti e costrutti base
Tutorato Elementi di Informatica 2013
Condizioni decisionali
Approcci nella soluzione di un problema
Corso di Reti di Calcolatori Programmazione Java
I FILES AD ACCESSO SEQUENZIALE
Tipo di dato: array Un array è un tipo di dato usato per memorizzare una collezione di variabili dello stesso tipo. Per memorizzare una collezione di 7.
PROGRAMMAZIONE BASH – ISTRUZIONE IF
Esercizi.
Corso Java Esercitazione.
Java World Cicli e Array.
Corso Java Cicli e Array.
Oggetti Java.
Sommario cos’è un tipo di dato astratto astrazione tramite specifica:
Alberi n-ary Lezioni di C.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
comprensione e modifica di codice
Le stringhe in C++ Laboratorio 26 Aprile Dott. Serena Villata
Condizioni decisionali
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C
Paradigma di programmazione event-driven
Condizioni decisionali
concetti ed applicazioni
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Dalla programmazione tradizionale al paradigma OO
Ricerca 01/08/2019 package.
Ese 3 (del 3 Aprile 2003).
Transcript della presentazione:

Eccezioni – Precisazioni e approfondimenti Costruttore: il parametro String definisce il messaggio di errore associato all’eccezione Metodi particolarmente significativi getMessage(): ritorna l’istanza di String con il messaggio di errore specificato all’istanziazione dell’oggetto printStackTrace(): stampa lo Stack Trace permettendo di individuare metodo e linea di codice che ha lanciato l’eccezione (utile per il debug) getStackTrace(): ritorna un array di StackTraceElement – l’elemento di indice zero è la cima dello stack fillInStackTrace(): genera l’array di StackTraceElement accessibile mediante getStackTrace() o il cui contenuto è stampato da printStackTrace (attenzione: diverso da setStackTrace!) Classe StackTraceElement: rappresenta un’invocazione di metodo (a parte l’elemento in cima allo stack che è il metodo in esecuzione e da cui viene generato l’oggetto Throwable)

Esercizio 3: filtraggio file di testo Dall’esercizio 3 dell’esecitazione n.5: “Realizzare un’applicazione Java in grado di cercare una qualunque parola all’interno del file testo.txt allegato a queste slide, contando il numero di occorrenze. L’applicazione deve inoltre essere in grado di creare un nuovo file testo2.txt ottenuto da testo.txt sostituendo a tutte le occorrenze di un vocabolo il medesimo vocabolo con però tutte le lettere maiuscole.” La lettura delle specifiche permette di definire, a livello astratto, l’esistenza di un componente in grado di svolgere due operazioni (ricerca di una parola con conteggio delle occorrenze; sostituzione delle occorrenze di un vocabolo)

Soluzione: il componente package esercitazioni05.filtro; import java.io.*; import java.util.StringTokenizer; public class TextFileAnalyzer { private File file; // la classe file implementa un oggetto con le // caratteristiche di un file (vedi java.io) public TextFileAnalyzer(String fileName) throws FileNotFoundException { file = new File(fileName); if (! file.exists()) throw new FileNotFoundException("Il file " + fileName + "non esiste"); } Nota: se si fosse gestita l’eccezione dentro il costruttore (anziché lanciarla), si avrebbe un comportamento cablato nell’oggetto, cosa che impedirebbe a chi crea l’istanza di prendere diverse contromisure in caso di “file non trovato”

StringTokenizer La classe java.util.StringTokenizer permette di spezzare una stringa in più sottostringhe (token) distinguibili perché delimitate da caratteri considerati come separatori Costruttore StringTokenizer(String s, String delim, boolean returnDelims) StringTokenizer(String s, String delim) StringTokenizer(String s) I separatori sono i singoli caratteri della stringa delim; nel caso si ricorra al costruttore ad un parametro, delim è automaticamente impostata al valore di default: “ \t\n\r\f” (nota: \t, \n, \r, \f sono considerati come singoli caratteri) Metodi significativi (di veda la documentazione sulle API Java) hasMoreToken(): true se la stringa contiene altri token nextToken(): restituisce il token nextToken(String delim): restituisce il token individuato usando come separatori quelli del parametro delim (quello del metodo, non del costruttore!)

Soluzione: la funzionalità (metodo) di ricerca public int searchWord(String word) throws IOException { BufferedReader lineReader = new BufferedReader(new FileReader(file)); int counter = 0; String line, token; StringTokenizer tokenizer; do { line = lineReader.readLine(); if (line != null) { tokenizer = new StringTokenizer(line, " \n"); // delimitatori while (tokenizer.hasMoreTokens()) { token = tokenizer.nextToken(); if (token.equals(word)) counter++; } } while (line != null); return counter;

Soluzione: il metodo di ricerca e sostituzione public void replaceWord(String originalWord, String newWord) throws IOException { BufferedReader lineReader = new BufferedReader(new FileReader(file)); BufferedWriter lineWriter = new BufferedWriter(new FileWriter(file.getParent()+File.separator+"testo2.txt")); String originalLine, newLine, token; StringTokenizer tokenizer; La scelta di usare BufferedReader e BufferedWriter deriva dalla disponibilità di metodi “comodi” per l’applicazione, quali la lettura per linee e la corretta scrittura del newLine.

Soluzione: il metodo di ricerca e sostituzione originalLine = lineReader.readLine(); editedLine= ""; if (originalLine != null) { tokenizer = new StringTokenizer(originalLine, " \n",true); while (tokenizer.hasMoreTokens()) { token = tokenizer.nextToken(); if (token.equals(originalWord)) editedLine= editedLine + newWord; else editedLine= editedLine+ token; } lineWriter.write(editedLine); lineWriter.newLine(); lineWriter.flush(); // altrimenti il buffer non scrive i dati sul file } while (originalLine != null);

Soluzione: il main public class RunTextFileAnalyzer { public static void main(String[] args) { TextFileAnalyzer analyzer; String input; boolean searchAgain = true; // INPUT DA CONSOLE BufferedReader stdInput = new BufferedReader(newInputStreamReader(System.in)); try { while (searchAgain) { analyzer = new TextFileAnalyzer(args[0]); System.out.print("Inserire parola da cercare: "); input = stdInput.readLine(); if (input.equals("end_search")) searchAgain = false; else System.out.println("Numero occorrenze di " + input + " " + analyzer.searchWord(input)); } // fine while

Soluzione: il main // occorre creare una nuova istanza di TextFileAnalyzer perché il // BufferedReader usato internamente non permette di riportare il puntatore // all’inizio del file analyzer = new TextFileAnalyzer(args[0]); String oldWord, newWord; System.out.print("Inserire parola da rimpiazzare: "); oldWord = stdInput.readLine(); System.out.print("Inserire parola sostitutiva: "); newWord = stdInput.readLine(); analyzer.replaceWord(oldWord, newWord); } catch (IOException e) { System.err.println("Attezione: " + e.getMessage()); } // fine main