2020
Appunti esame orale
Programmazione 2 - Java
Eccezioni : un’eccezione è un oggetto che segnala l’accadere di un evento anomalo durante l’esecuzione
di un programma. Il processo di creazione di questo oggetto è chiamato lancio di un’eccezione. Il codice
che rileva e che si occupa si dice che gestisce l’eccezione.
Gestire le eccezioni:
Le istruzioni try e catch, utilizzate insieme, sono il meccanismo di base per gestire le eccezioni.
try {
codice_da_provare;
eventuale_generazione_eccezione;
altro_codice;
} catch (nome_della_classe_eccezione parametro_del_blocco_catch) {
gestione_della_eccezione_di_tipo_nome_della_classe_eccezione;
}
Se all’interno del blocco try viene generata un’eccezione, la parte rimanente del blocco try viene ignorata e
l’esecuzione prosegue con il primo blocco catch che corrisponde al tipo dell’eccezione generata. Dopo
l’esecuzione del blocco catch che corrisponde al tipo dell’eccezione generata. Dopo l’esecuzione del blocco
catch, il programma prosegue con il codice che segue l’ultimo blocco catch definito.
Se nel blocco try non viene generata alcuna eccezione, dopo che ha completato l’esecuzione delle istruzioni
del blocco, l’esecuzione del programma prosegue con il codice che segue l’ultimo blocco catch definito. In
altre parole, se non viene generata alcuna eccezione, i blocchi catch vengono ignorati.
Per ogni blocco try è possibile definire più blocchi catch, ma ogni blocco catch può gestire un solo tipo di
eccezione. L’identificativo parametro_del_blocco_catch serve come segnaposto per un’eccezione che
potrebbe essere lanciata. Quando nel blocco try precedente viene generata un’eccezione della classe
nome_della_classe_eccezione, questa eccezione viene assegnata a parametro_del_blocco_catch. Il codice
nel blocco catch può utilizzare parametro_del_blocco_catch per gestire l’eccezione. Una scelta ampiamente
diffusa per l’identificativo di parametro_del_blocco_catch è e; è possibile utilizzare ogni altro identificativo
valido.
Il metodo getMessage:
Ogni oggetto eccezione ha una variabile di istanza di tipo String che contiene un messaggio. Tale messaggio
solitamente identifica la ragione per cui è stata generata l’eccezione. Per esempio, se l’eccezione è lanciata
dalla seguente istruzione: throw new Exception(argomento_di_tipo_stringa);
Il valore della variabile di istanza di tipo String è argomento di tipo string. Se l’oggetto eccezione viene
chiamato e, l’invocazione di e.getMessage() restituisce questa stringa.
Classi di eccezione definite dal programmatore:
Vi è la possibilità di definire nuove classi di eccezioni, a patto di derivarle da una classe di eccezione
esistente, sia essa predefinita o definita dal programmatore.
Linee Guida; 1
- Si utilizzi Exception come base, se non vi è una particolare esigenza che porta a scegliere come
classe base un’altra classe.
- Si definiscano almeno due costruttori che includono un costruttore di default e uno con un solo
parametro di tipo String.
- Si dovrebbe iniziare ogni definizione di costruttore con una chiamata al costruttore della classe
base, utilizzando super. Nel costruttore di default, la chiamata a super deve avere un argomento di
tipo stringa che indichi il tipo di eccezione rappresentata. Per esempio: super(“Eccezione
ClienteNotFoundException lanciata”);
- La classe di eccezione eredita il metodo getMessage, che non dovrebbe essere ridefinito.
Throw vs Throws:
La parola chiave throw è utilizzata per lanciare un’eccezione, mentre throws è utilizzata nell’intestazione
del metodo per dichiarare un’eccezione. Quini, un’istruzione throw lancia un’eccezione e una clausola
throws ne dichiara una.
Tipologie di eccezioni:
Ogni eccezione è discendente della classe Exception. RunTimeException è una classe derivata da Exception
e le classi a loro volta derivate da RunTimeException o dalle sue discendenti rappresentanto eccezioni non
controllate. Tali eccezioni non richiedono di essere dichiarate in una clasuola throws nell’intestazione di un
metodo. Tutte le altre eccezioni sono controllate e devono essere dichiarate in una clausola throws.
Checked exception: sono dovute a circostanze esterne che il programmatore non può prevenire e il
compilatore verifica che il il programma le gestisca. Esempi tipici si verificano con le operazioni di input e
output.
Un-checked exception: sottoclassi di RunTimeException che derivano da problemi di programmazione.
2
Ereditarietà : L’ereditarietà è uno dei concetti base della programmazione object oriented. Permette di
definire una classe base più generale e di definire in seguito classi specializzate che aggiungono nuovi
dettagli alla classe generale.
- Vantaggi: permette di risparmiare molto lavoro, e quindi tempo, perché la classe specializzata
eredita tutte le proprietà della classe generale e il programmatore deve solo realizzare le nuove
caratteristiche.
- Esempio: Si definirà una semplice classe chiamata Persona. La classe Persona non ha molta utilità di
per sé, ma sarà utilizzata per definire nuove classi. In Java, è possibile definire una classe chiamata
Persona che include la definizione di tutte quelle variabili di istanza che rappresentano le proprietà
comuni a tutte le sottoclassi di persone. La definizione
della classe può inoltre contenere tutti i metodi che Persona
gestiscono le variabili di istanza definite nella classe
Persona. Uno Studente è una persona e pertanto si
può definire la classe studente come una classe
derivata, o sottoclasse, della classe Persona. La classe Dipendente Studente
Persona è definita classe base, o superclasse.
La classe Studente e Dipendente ereditano le variabili di
istanza e i metodi pubblici della classe base che estende. Una classe derivata può inoltre aggiungere altre
variabili di istanza e nuovi metodi oltre quelli ereditati dalla sua classe base.
N.B. Date due classi se non sussiste la relazione is-a tra di esse, non si usa l’ereditarietà per derivare una
classe dall’altra. Una classe derivata include automaticamente tutte le variabili di istanza, le variabili
statiche e tutti i metodi pubblici della classe base. I membri ottenuti dalla classe base si dicono ereditati. In
una classe base è possibile modificare un metodo ereditato
- Overriding: Se una classe derivata definisce un metodo che ha lo stesso nome, gli stessi parametri e anche
lo stesso tipo di ritorno di un metodo della classe base, il metodo della classe derivata ridefinisce il metodo
presente nella classe base. Quando si ridefinisce un metodo ereditato dalla classe base, in generale non
-
Appunti Java
-
Appunti corso Programmazione 2
-
Appunti di Programmazione Java
-
Programmazione a Oggetti [Java], Base e Avanzata - Ing. Informatica, Appunti di Programmazione Java