Upload
others
View
5
Download
0
Embed Size (px)
Citation preview
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Javadoc ed EccezioniLaboratorio di Programmazione IICorso di Laurea in Bioinformatica
Dipartimento di Informatica - Università di Verona
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Sommario
Lettura e scrittura su fileJavadocEccezioni in Java
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Lettura e Scrittura su file
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Scrittura su file
Scrittura su file di testoScrivere stringhe su file di testoUsiamo gli oggetti FileWriter e PrintWriter
1 FileWriter apre un file in scrittura, ha come parametro ilnome del file
2 PrintWriter mette a disposizioni metodi di scrittura pertesto (print, println), ha come parametro un oggettoFileWriter
a scrittura terminata dobbiamo chiudere il file ed il canaledi scritturadobbiamo importare alcune classi del package diinput-output:
import java.io.*;
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Scrittura su file: Esempio
Example (Esempio scrittura su file di testo)
1 apertura del file in scrittura / creazione del fileFileWriter f = new FileWriter("prova.txt");PrintWriter out = new PrintWriter(f);
2 scrittura di testoout.println("scrivo su file");
3 chiusura del canale di scrittura e del fileout.close();f.close();
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Scrittura su file
NoteFileWriter crea un file pronto per essere scritto.Se il file già esiste viene preliminarmente eliminato tutto ilsuo contenuto.Per aggiungere testo ad un file già esistente:
si usa FileWriter(String, boolean) ponendo il secondoargomento a true.
EsempioFile.java
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Schema di ciclo di scrittura
Ciclo di scrittura su filePrintWriter out = ...while (condizione) {
out.println(dato);aggiorna condizione...
}out.close();
Esempio scrittura 10 stringhe di testo
FileWriter f = new FileWriter(nomefile);PrintWriter out = new PrintWriter(f);int i = 0;while(i<10){
out.println("stringa "+i);i++;
}out.close();f.close();
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Lettura da file
Leggere stringhe da file di testo1 Usiamo gli oggetti FileReader e BufferedReader
FileReader apre un file in lettura, accetta come parametroil nome del fileBufferedReader mette a disposizione metodi per la letturadi stringhe di testo (e.g., readLine()) accetta comeparametro un oggetto FileReader
2 Leggiamo una linea alla volta con il metodo readLine()della classe BufferedReader
3 Chiudiamo il file ed il canale di input
EsempioFile.java
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Lettura da file: Esempio
Example (Esempio lettura da file di testo)
1 apertura del file in letturaFileReader f = new FileReader("prova.txt");BufferedReader in = new BufferedReader(f);
2 lettura di una riga del fileString line = in.readLine();
3 chiusura del filef.close();in.close();
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Schema di ciclo di lettura
Ciclo di lettura da fileBufferedReader in = ...String linea = in.readLine();while (linea!=null) {
...linea = in.readLine();
}
Esempio: contare le linee di un file
FileReader f = new FileReader(nomefile);BufferedReader in = new BufferedReader(f);int n = 0;String linea = in.readLine();while (linea!=null) {
n++;linea = in.readLine();
}f.close();in.close();
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Esercizi
Esercizi su scrittura e letturaImplementare i metodi:
stampaStudenteFile(...)
calcolaMediaStudenti(...)
copiaStudentiInMedia(...)
della classe ClienteStudenteBase.java.
Scaricare il file StudenteBase.java ed il file di testo studenti.txtper verificare il corretto funzionamento dei metodi.
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Commentare il codice:Javadoc
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Premessa
I commenti nel codiceI commenti sono fondamentali per il riuso del softwareAlcune informazioni sono chiare dal codice (ad esempiol’interfaccia)Altre importanti informazioni sono meno chiare (adesempio il contratto)Javadoc: genera la documentazione (e.g., HTML o PDF)dai commenti
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Formato Javadoc
JavadocCommento Javadoc: testo HTML tra i tag: /** e */
Example (Commento Javadoc)
/*** Commento <em>Javadoc</em>* Spazi ed asterischi a inizio riga* sono <strong>sempre</strong> ignorati*/
Risultato:Commento JavadocSpazi ed asterischi a inizio riga sono sempre ignorati
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Cosa commentare
Scopo dei commentiCommentare tutto ciò che può essere utile a farcomprendere il codice al lettore (programmatori ed utenti)Documentazione minima:
ciascun package, classe ed interfacciaciasun metodo ed attributo pubblico
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Come commentare
Scopo dei commentiI commenti vengono posti prima della dichiarazione delcodice che si vuole commentare (classe, metodo, etc.)Un commento deve descrivere in modo sintetico quale è loscopo del codiceUn commento Javadoc può contenere tag speciali (nonHTML) che aiutano ad organizzare il commento
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Esempio Javadoc
Esempio
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Esempio Javadoc: discussione
Esempio: discussioneprimo paragrafo riassume lo scopo del metodo.paragrafi successivi sono suddivisi da <p>.Una riga vuota separa la parte descrittiva dalla parte deitag. Deve esserci solo 1 riga vuota in tutto.Una seconda parte in cui sono inseriti tag speciali (e.g.,@<nome>) che identificano le componenti dell’oggettoche si sta commentando.
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Tag Javadoc
Tag JavadocFormato generale di un tag: @name commentname specifica quale tipo di informazione si sta dandocomment è l’informazione:e.g. @author William ShakespeareOgni tag deve essere su una riga nuova.I commenti possono estendersi su più righe, ma non cidevono essere righe vuote!
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Tag Javadoc
Tag JavadocOrdine Tag: Tag Classi, Tag Metodi
Tag classi:@author <autore> il nome di chi ha scritto il programma.
Se ci sono più autori, si mettono più tag su righe separateAppare solo se javadoc viene compilato con l’opzione–author
@version <versione> la versione del codiceappare solo se javadoc viene compilato con l’opzione–version
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Tag Javadoc
Tag JavadocTag Metodi:
@param <nome parametro> breve descrizione delparametro.
Se ci sono più parametri, rispettare l’ordine con cui sonodichiarati.
@return breve descrizione di ciò che è tornato dal metodo.Esempio: @return true if the value was found in the array
@exception <nome eccezione> descrizione dellecircostanze che determinano il lancio dell’eccezione.
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Come si compila
Compilare con javadocIl comando per estrarre la documentazione è javadocpresente in tutte le Java Development Kit (JDK)Il comando javadoc può produrre la documentazione indiversi formati, ciascuno dei quali può richiedere dei file diistruzioni speciali (i cosidetti doclet)Il formato standard è HTML e non richiede nessun fileausiliario.Il comando da lanciare è il seguente: javadoc [parametri] -d<DirectoryDestinazione> <NomeFile.java>Ad esempio:javadoc -private -d mydocs/ Insegnamento.java
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Informazioni aggiuntive
Ulteriori dettagliSe si vuole la documentazione in PDF è necessariospecificare una doclet in grado di istruire Javadoc su comeprodurre un PDF (e.g. PdfDoclet )Leggere sun doc per un’esauriente spiegazione di come sidevono scrivere i commenti Javadoc.Commentare sempre il codice con javadoc anche in seded’esame.
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Esercizi
Esercizi: commentiCommentare la classe Insegnamento.java in javadocGenerare la documentazione in htmlsoluzione: Insegnamento.sol
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Eccezioni
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Esigenza eccezioni
EccezioniPermettono di gestire condizioni al di fuori dei parametrioperativi di un metodoEsempi tipici: errori di input, dati non disponibili, dati nonvalidi etc.Tali condizioni non possono sempre essere gestiteall’interno del metodoEccezioni: meccanismo ben definito per gestire talisituazioni
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Esempio
Example (Ricerca massimo reali da input)
Il metodo assume che l’utente inserisca sempre almeno undatoCosa succede se l’utente decide di non inserire nulla ?Exception in thread "main"java.util.InputMismatchExceptionat java.util.Scanner.throwFor(Scanner.java:840)at java.util.Scanner.next(Scanner.java:1461)at java.util.Scanner.nextDouble(Scanner.java:2387)at lezione1.MassimoReali.main(MassimoReali.java:12)
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Definizione Eccezione
DefinizioneOggetto creato dalla JVM a seguito di una situazioneanomalaL’oggetto contiene le informazioni riguardanti la situazioneanomala che ha generato l’eccezioneUn modulo può generare un’eccezione quando si verifica lacondizione anomala (throw)Un modulo può gestire un’eccezione generata da qualchealtro modulo (catch)Nella gestione di un’eccezione un modulo può generare unanuova eccezione che viene gestita da qualche altro modulo
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Costrutto Java per le eccezioni
La classe ThrowableThrowable: la superclasse per tutte le eccezioniError: sottoclasse di Throwable rappresenta eccezioni chepossono essere ignorate dai moduliException: sottoclasse di Throwable rappresenta eccezioniche dovrebbero essere gestite in qualche modo
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Eccezioni di tipo Error
ErrorCondizioni anomale difficilmente gestibili da un moduloPrincipali sottoclassi di Error:
ThreadDeathLinkageErrorVirtualMachineError
Queste eccezioni possono essere ignorateQuando si verificano il metodo termina segnalando ilcodice di errore relativo
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Eccezioni di tipo Exception
ExceptionDue categorie:
1 Eccezioni non controllate dal compilatoreSottotipo RunTimeExceptionIl compilatore non forza la loro gestioneEsempi: indice fuori dai limiti di un array statico,riferimento nullo a oggetto, divisione per 0, etc.Sottotipi di RunTimeException rappresentano questi casi,e.g. NullPointerException
2 Eccezioni controllate dal compilatoreTutti gli altri sottotipi di ExceptionIl compilatore forza la loro gestioneIl compilatore restitusce un errore di compilazione sel’eccezione viene ignorataEsempio: ClenteStudenteBase.java (leggiStudenteFile(...))
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Utilizzo Eccezioni
Modalità di utilizzo1 Generare Eccezioni
Riconoscere una situazione di errore e lanciare unaeccezione.
2 Gestire EccezioniIntercettare una eccezione ed eseguire codice specifico pergestirle
3 Possibilità di gestionedelegare la gestione ad un altro modulointercettare (e gestire) eccezioni di uno o più tipiintercettare una eccezione e generarne un’altraeseguire una parte di codice indipendentemente dallaeccezione
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Generare Eccezioni
GenerazioneDue categorie:
1 Dopo aver individuato una condizione anomala un metodopuò decidere di generare una eccezione per far gestire lasituazione ad altri moduli.
2 Generazione eccezioni in Java:Nella definizione del metodo dichiarare che può generareeccezioni
parola chiave throws nella definizione del metodoNel corpo del metodo
Istanziare un oggetto di tipo Exception appropriatoSollevare l’eccezione creata mediante l’istruzione throw.
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Esempio Generazione
Example (Esempio generazione eccezione)
public class MassimoGenerale {public static void main(String[] args)throws IllegalArgumentException {...if (trovato){System.out.println("Massimo trovato "+max);
}else {IllegalArgumentException e = newIllegalArgumentException("Nessun elemento inserito");
throw e;}
}}
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Generazione Eccezioni
NoteNullPointerException è un sottotipo di RunTimeExceptionquindi può non essere controllatathrows accetta una lista di tipi di eccezioni: e.g. throwsNullPointerException, IOException, ...L’esecuzione dell’istruzione throw causa l’interruzione delmetodo, il controllo passa al metodo chiamante
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Gestire Eccezioni
Intercettare eccezioniSe invochiamo un metodo che genera eccezioni controllate(e.g. non sottotipi di Error o RunTimeException)dobbiamo necessariamente gestire le eccezioni che possonoessere generate2 possibilità
Si dichiara che il metodo possa a sua volta sollevareeccezioni: delegaSi inserisce il codice necessario per risolvere l’eccezione
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Delega
Delegare la gestione delle eccezionipublic static Studente leggiStudente(String file){
FileReader f = new FileReader(file);BufferedReader in = new BufferedReader(f);
...}
Questo codice non compila: Errore: “Unhandled exception typeFileNotFoundException”
public static Studente leggiStudente(String file)throws FileNotFoundException{
FileReader f = new FileReader(file);BufferedReader in = new BufferedReader(f);
...}
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Delega
Catena di delegaSe l’eccezione delegata si verifica, il metodo termina ed ilcontrollo passa al metodo chiamante segnalandol’eccezioneSe anche il metodo chiamante delega la gestione di questotipo di eccezioni si passa al successivo metodo chiamanteLa catena si interrompe quando:
uno dei metodi chiamanti intercetta e gestisce quel tipo dieccezionilo stack delle chiamate termina: la JVM terminal’esecuzione del programma segnalando un errore.
Per delegare più eccezioni che appartengono alla stessasuperclasse basta delegare la superclasse:
Per delegare: FileNotFoundException, IOException bastascrivere throws IOException
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Gestire le eccezioni
Gestione direttaLe istruzioni per gestire le eccezioni sono:
try ... racchiude le istruzioni che possono generare leeccezioni che si vuole gestirecatch ... racchiude il codice da eseguire quando leeccezioni si verificanofinally ... racchiude codice che deve essere eseguito in ognicaso: sia se si è verificata un eccezione sia se non se ne èverificata nessuna.
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Gestire le eccezioni: Esempio
Example (Gestione diretta)
public static Studente leggiStudente2(String file){//tolto throwsFileReader f = null;try {//codice che può lanciare una o più eccezionif = new FileReader(file);
} catch (FileNotFoundException e) {//codice che gestisce l’eccezione ditipo FileNotFoundExceptionSystem.out.println("Il file" + file + "non è stato trovato");
}...
}
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Gestire le eccezioni: note
Gestione diretta: noteil blocco try viene eseguito normalmentese si verifica un eccezione nel blocco try
si interrompe l’esecuzionese esiste un blocco catch corrispondente si eseguono leistruzioni nel blocco catch e poi si prosegue con il codicedopo il blocco catch.se non esiste un blocco catch (eccezioni Error oRunTimeException) si interrompe il metodo e si passa alchiamante
se non si verifica un eccezione nel blocco try il blocco catchnon viene eseguito, si prosegue con il codice seguente.
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Gestire più di un eccezione: Esempio
Example (Gestione diretta: più eccezioni)
public static Studente leggiStudente3(String file){//tolto throwsFileReader f = null;BufferedReader in = null;String s = null;try {//codice che può lanciare una o più istruzionif = new FileReader(file);in = new BufferedReader(f);s = in.readLine();
} catch (FileNotFoundException e1) {//codice che gestisce l’eccezione FileNotFoundExceptionSystem.out.println(file + " non trovato");
} catch (IOException e2) {//codice che gestisce l’eccezione IOExceptionSystem.out.println("Problema nella lettura da file");
}...}
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Gestire le eccezioni: note
Gestione diretta: noteViene eseguito il blocco catch corrispondente al tipo dieccezione intercettataLe eccezioni gestite debbono essere di tipi differenti,altrimenti il compilatore restituisce un errore (Unreachablecatch block ...)I catch vengono valutati in sequenza quindi le sottoclassidebbono stare più in alto delle superclassi:
nell’esempio precedenteIl blocco IOException non può stare prima diFileNotFoundException
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Gestire le eccezioni
NoteGestire un’eccezione vuol dire fare delle operazioniparticolari se l’eccezione si verifica o cambiare il flusso delcodice in presenza dell’eccezioneIl semplice catch dell’istruzione può modificare il flusso diesecuzioneEsempio: metodo esempioGestione in Test.java
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Gestire le eccezioni: finally
Gestione diretta: il blocco finallyUtile per eseguire istruzioni a prescindere dalle eccezioniTipicamente usato per rilasciare risorse (e.g., chiudere unfile)Esempio: metodo esempioFinally in Test.java
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Esercizi I
Esercizi IRealizzare il metodo calcolaMedia() della classe Test.java.Il metodo deve leggere 3 interi da input, mediante un ciclowhile che termina quando l’utente inserisce un dato nonintero. Se l’utente inserisce esattamente 3 interi il metododeve calcolarne la media. Altrimenti il metodo devegenerare una IllegalArgumentExceptionRealizzare il metodo confrontaMedia() della classeTest.java, per calcolare due medie. Il metodo utilizzacalcolaMedia(), per calcolare due medie e stampa la mediapiù alta. Il metodo deve gestire le eccezioni sollevate dacalcolaMedia().
Javadoc edEccezioni
Lettura eScrittura sufile
Commentareil codice:Javadoc
Eccezioni
Esercizi II
Esercizi IIRealizzare il metodo calcolaMediaFile(String file) dellaclasse Test.java. Il metodo opera come calcola media malegge i dati da file. Il metodo deve delegare la gestione ditutte le eccezioni.Realizzare il metodo confrontaMediaFile(String file1,String file2) della classe Test.java. Il metodo utilizzacalcolaMediaFile(), per calcolare due medie e stampa lamedia più alta. Il metodo deve gestire le eccezioni solevateda calcolaMediaFile()Nota: per eseguire il della classe Test.java scaricare iseguenti file txt:
media1.txtmedia2.txtinput.txt