package - diee.unica.itarmano/lpo1/pdf/lezione040429.pdf · l la piattaforma java definisce una...
TRANSCRIPT
2
Corso di Linguaggi di Programmazione ad Oggetti - 1
Gianmaria Mancosu
Slide 2
Package & Exception
API – Application Programming Interface
l I vecchi linguaggi (Pascal, C, FORTRAN) permettono di raccogliere le funzioni in librerie
l Con i linguaggi OO le librerie di funzioni sono sostituite dalle librerie di classi o toolkitl Stesse operazioni e funzionalità delle vecchie librerie
di funzionil Vantaggio: con l’uso dell’ereditarietà il programmatore
può facilmente estendere e modificare questi strumenti per la propria applicazione
3
Corso di Linguaggi di Programmazione ad Oggetti - 1
Gianmaria Mancosu
Slide 3
Package & Exception
API – Application Programming Interface
l Spesso si definiscono dei Framework che specificano una determinata interfaccia e si lascia liberi i fornitori di implementarla a proprio piacimento per la propria piattaforma
l La piattaforma Java definisce una serie di API e di Framework che sono continuamente estesi, per esempio:l Swing, per l’interfaccia grafica l JDBC API, Java DataBase Connectivity APIl JavaBeans, l’architettura per creare componenti
4
Corso di Linguaggi di Programmazione ad Oggetti - 1
Gianmaria Mancosu
Slide 4
Package & Exception
Astrazione
l Funzioni l Scrivere un algoritmo una volta ed usarlo in molte
situazioni
l Oggetti l Raggruppare un insieme correlato di attributi e
comportamenti (behavior) in una classe
l Framework e API l Gruppi di oggetti che forniscono un’attività complessa, che
possono essere estesi o usati così come sono
5
Corso di Linguaggi di Programmazione ad Oggetti - 1
Gianmaria Mancosu
Slide 5
Package & Exception
Package
l Aiutano la gestione di grandi progetti software
l Possono contenere classi e sotto-packagel Analogia con le directory e i filel File çè Classel Directory çè Package
l Le classi vengono raggruppate per attinenza l Es. classi di I/O, classi di GUI
6
Corso di Linguaggi di Programmazione ad Oggetti - 1
Gianmaria Mancosu
Slide 6
Package & Exception
Package in UML
painter
gui
printer
model
Drawing Figure
Square Circle
7
Corso di Linguaggi di Programmazione ad Oggetti - 1
Gianmaria Mancosu
Slide 7
Package & Exception
Package Declarationl Per specificare l’appartenenza di una classe ad un package si
usa la keyword package
package painter.model;
l I nomi dei package devono essere gerarchici e separati con un punto
l Solitamente si usano nomi con lettere minuscolel La dichiarazione deve essere fatta all’inizio del file sorgentel Si può specificare un solo package per ciascun file sorgentel Se non si dichiara nessun package allora la classe appartiene
ad un package di default
8
Corso di Linguaggi di Programmazione ad Oggetti - 1
Gianmaria Mancosu
Slide 8
Package & Exception
Package vs Namespace
l Questa tabella mostra il parallelo tra package e namespace in C/C++
packagenamespaceRaggruppamento
classeclasseEntità singola
importusing namespaceUtilizzo
package <nome>;namespace <nome> { }Definizione
.::Risoluzione di scope
JavaC/C++Operazione
9
Corso di Linguaggi di Programmazione ad Oggetti - 1
Gianmaria Mancosu
Slide 9
Package & Exception
Package Declaration
l Per esempio la classe Square nel diagramma precedente che appartiene al package model che a sua volta appartiene al package più generale painter si può definire in questo modo:
package painter.model;
public class Square extends Figure {...
}
10
Corso di Linguaggi di Programmazione ad Oggetti - 1
Gianmaria Mancosu
Slide 10
Package & Exception
Package Usagel Per utilizzare le classi contenute in un package occorre
importarlo tramite la keyword importl È possibile importare tutte le classi di un package utilizzando
l’asterisco (*) o solo una classe specificandone il nome
package painter.model;
import painter.printer.*;import java.io.*;import java.util.Vector;
public class Square extends Figure {Vector points = new Vector();...
}
11
Corso di Linguaggi di Programmazione ad Oggetti - 1
Gianmaria Mancosu
Slide 11
Package & Exception
Package Standardl java.langl Contiene tutte le classi principali del linguaggio, tra cui String,
Array, Number, Object, Systeml Viene importata automaticamente dal compilatore
l java.iol Contiene tutte le classi dedicate al I/O da tastiera e da file
l java.utill Contiene le collezioni, vari algoritmi di trattamento delle
collezioni, e tante altre classi utili durante lo sviluppol Ad esempio, contiene le classi Vector, Hashtable, Date, Time
l java.awtl Contiene le classi di gestione dell’interfaccia grafica
indipendenti dal sistema operativo
12
Corso di Linguaggi di Programmazione ad Oggetti - 1
Gianmaria Mancosu
Slide 12
Package & Exception
Modificatori di Accessol Java permette un ulteriore modificatore di accesso (oltre a
public, protected, private) che agisce a livello di packagel Consente di accedere a variabili o metodi anche dalle classi non
derivate purché appartenenti allo stesso packagel Serve per rendere più semplice lo scambio di dati o messaggi tra
le classi di uno stesso packagel Costituisce una violazione del principio dell’information hiding
(come friend in C++)l È il livello di default se non è esplicitamente indicato uno dei
modificatori public, protected, private:void packageMethod(int par) { ... }
13
Corso di Linguaggi di Programmazione ad Oggetti - 1
Gianmaria Mancosu
Slide 13
Package & Exception
Modificatori di Accesso
l Il modificatore di accesso di default risulta quindi meno restrittivo di private perché consente di accedere anche a slot di classi diverse
l Risulta più restrittivo di protected, perché le classi derivate che non appartengono allo stesso package non possono accedere agli slot con accesso default
l La conseguenza è che gli slot marcati con protectedpossono essere visti anche da classi non derivate, se queste appartengono allo stesso package
14
Corso di Linguaggi di Programmazione ad Oggetti - 1
Gianmaria Mancosu
Slide 14
Package & Exception
Modificatori di Accesso
OKOKOKOKpublic
OKOKOKprotected
OKOKdefault
OKprivate
UniversoSottoclassePackageClasseModificatore
15
Corso di Linguaggi di Programmazione ad Oggetti - 1
Gianmaria Mancosu
Slide 15
Package & Exception
Modificatori di Accessopackage first;public class AClass {
private int privateSlot ;int defaultSlot ;protected int protectedSlot ;
}
package first;public class AnotherClass {public void publicMethod() {
AClass obj = new AClass() ;obj.privateSlot = 0 ; // NO!!!obj.defaultSlot = 0 ; // YES!!!obj.protectedSlot = 0 ; // YES!!!
}}
Stesso package
16
Corso di Linguaggi di Programmazione ad Oggetti - 1
Gianmaria Mancosu
Slide 16
Package & Exception
Modificatori di Accessopackage first;public class AClass {
private int privateSlot ;int defaultSlot ;protected int protectedSlot ;
}
package second;public class AnotherClass {public void publicMethod() {
AClass obj = new AClass() ;obj.privateSlot = 0 ; // NO!!!obj.defaultSlot = 0 ; // NO!!!obj.protectedSlot = 0 ; // NO!!!
}}
Diverso package
17
Corso di Linguaggi di Programmazione ad Oggetti - 1
Gianmaria Mancosu
Slide 17
Package & Exception
Modificatori di Accessopackage first;public class AClass {
private int privateSlot ;int defaultSlot ;protected int protectedSlot ;
}
package second;public class AnotherClass extends Aclass {public void publicMethod() {
this.privateSlot = 0 ; // NO!!!this.defaultSlot = 0 ; // NO!!!this.protectedSlot = 0 ; // YES!!!
}}
Diverso package
18
Corso di Linguaggi di Programmazione ad Oggetti - 1
Gianmaria Mancosu
Slide 18
Package & Exception
Package Summary
l I package sono uno strumento per raggruppare le classi o sottopackage che sono attinenti per funzionalità o scopo
l La keyword package permette di definire la collocazione di una classe
l La keyword import permette di utilizzare le classi di altri package
l Se non viene specificato alcun modificatore di accesso, un metodo o una variabile si considera di default accessibile da tutte le classi nello stesso package
19
Gestione degliErrori e delle
Eccezioni in Java
Corso di Linguaggi diProgrammazione ad Oggetti 1
A.A. 2003/04
A cura diGianmaria Mancosu
20
Corso di Linguaggi di Programmazione ad Oggetti - 1
Gianmaria Mancosu
Slide 20
Package & Exception
Exceptions
l Come vengono trattati gli errori di esecuzione dagli altri linguaggi?
l Se fate l’ipotesi che il vostro codice funzioni bene, e invece qualche congettura non è corretta, cosa può succedere?
21
Corso di Linguaggi di Programmazione ad Oggetti - 1
Gianmaria Mancosu
Slide 21
Package & Exception
Exceptions
l Checked Exceptionsl Condizioni di errore che possono capitare in un
programma correttol Ci si aspetta che il programmatore debba gestirli
l Unchecked Exceptionsl Problemi solitamente gravi o bugl Difficilmente recuperabilil Non ci si aspetta che il programmatore debba recuperare
la situazionel Solitamente comportano l’uscita dal programma
22
Corso di Linguaggi di Programmazione ad Oggetti - 1
Gianmaria Mancosu
Slide 22
Package & Exception
Exceptionsl Checked Exceptionsl Rappresentati dalla classe Exceptionl Esempi:
l File not foundl Network error
l Unchecked Exceptionsl Situazioni fatali sono rappresentati dalla classe Errorl Possibili bug sono rappresentati dalla classe RuntimeExceptionl Esempi: (Error o RuntimeException?)
l Out of bounds, Division by zerol Out of memory, Stack overflow
23
Corso di Linguaggi di Programmazione ad Oggetti - 1
Gianmaria Mancosu
Slide 23
Package & Exception
Exception Hierarchy
Object
Throwable
Error Exception
RuntimeException
Checked Exceptions
Unchecked Exceptions
24
Corso di Linguaggi di Programmazione ad Oggetti - 1
Gianmaria Mancosu
Slide 24
Package & Exception
Exception Hierarchyl Error
l VirtualMachineErrorl StackOverflowErrorl OutOfMemroyError
l AWTErrorl RuntimeException
l ArithmeticExceptionl NullPointerExceptionl IndexOutOfBoundException
l Exceptionl IOException
l EOFExceptionl FileNotFoundException
l ClassNotFoundExceptionl SQLException
25
Corso di Linguaggi di Programmazione ad Oggetti - 1
Gianmaria Mancosu
Slide 25
Package & Exception
Exception Example
1 public class MathException {2 public static void main(String[] args) {3 int nLati = 4;4 int perimetro = 36;5 while (nLati<10) {6 System.out.println("lato : " + (perimetro / nLati));7 nLati--;8 }9 }
10 }
java.lang.ArithmeticExceptionjava.lang.ArithmeticException: / by zero: / by zeroat testjava.MathException.main(MathException.java:6)at testjava.MathException.main(MathException.java:6)
Exception in thread "main"Exception in thread "main"
26
Corso di Linguaggi di Programmazione ad Oggetti - 1
Gianmaria Mancosu
Slide 26
Package & Exception
Exceptionsl Un metodo che rileva un eccezione può segnalarla con la keyword
throw:
if (cond) throw new ConditionFailedException();
l Il metodo può gestire l’eccezione da solo, altrimenti viene interrotto e il controllo passa al metodo chiamante
l Se il metodo chiamante non è in grado di gestire l’eccezione passa il controllo al proprio chiamante
l Il meccanismo prosegue e l’eccezione risale nello stack delle chiamate dei metodi (bubbling)
l Se l’eccezione non viene gestita provoca l’uscita con errore dalprogramma (killed)
27
Corso di Linguaggi di Programmazione ad Oggetti - 1
Gianmaria Mancosu
Slide 27
Package & Exception
Exception Bubbling
main()main()
primo()primo()
secondo()secondo()
28
Corso di Linguaggi di Programmazione ad Oggetti - 1
Gianmaria Mancosu
Slide 28
Package & Exception
Exception Handling
l Consiste nel definire un comportamento personalizzato nel caso di una eccezione
l Dopo la gestione il programma può continuare con la sua esecuzione
l Il meccanismo è fatto in modo da distinguere il flusso normale del programma dalla gestione dei casi particolari
l Maggiore leggibilità
29
Corso di Linguaggi di Programmazione ad Oggetti - 1
Gianmaria Mancosu
Slide 29
Package & Exception
Exception Handlingtry {
// codice che può sollevare delle eccezioni// viene detto: codice protetto
} catch (TypeException e) {
// codice che viene eseguito se viene sollevata // un’eccezione di tipo TypeException
} catch (AnotherTypeException e) {
// codice che viene eseguito se viene sollevata // un’eccezione di tipo AnotherTypeException
}
30
Corso di Linguaggi di Programmazione ad Oggetti - 1
Gianmaria Mancosu
Slide 30
Package & Exception
Exception Handling
main()main()
primo()primo()
secondo()secondo()handle()handle()
catch try
31
Corso di Linguaggi di Programmazione ad Oggetti - 1
Gianmaria Mancosu
Slide 31
Package & Exception
Exception Handling
l Quando viene gestita un’eccezione il controllo passa alla fine del blocco try-catch che l’ha gestita
l Un modo per eseguire sempre un blocco di codice indipendentemente dalla cattura di una eccezione è quello di utilizzare l’istruzione finally
l Da utilizzarsi, ad esempio, per:l rilasciare le risorse allocate (grafiche, memoria)l chiudere file o canali di comunicazionil rilasciare semafori (evita i deadlock)
32
Corso di Linguaggi di Programmazione ad Oggetti - 1
Gianmaria Mancosu
Slide 32
Package & Exception
Exception Handlingtry {
// codice che può sollevare delle eccezioni
} catch (TypeException e) {
// codice che viene eseguito se viene sollevata // un’eccezione di tipo TypeException
} finally {
// codice che viene sempre eseguito anche se // non viene sollevata nessuna eccezione
}
33
Corso di Linguaggi di Programmazione ad Oggetti - 1
Gianmaria Mancosu
Slide 33
Package & Exception
Exception Declaration
l Ogni metodo che vuole gestire le eccezioni deve utilizzare i blocchi try-catch
l Se il metodo può sollevare un’eccezione non di runtime, deve dichiararlo tramite la keyword throws
void read() throws IOException
l Se un metodo non gestisce le eccezioni sollevate durante la sua esecuzione delegandole al chiamante, deve dichiararlo sempre con throws
void fileRead() throws IOException, BindException
l Solo gli errori e le eccezioni di runtime non necessitano di essere dichiarate esplicitamente nella definizione di un metodo
34
Corso di Linguaggi di Programmazione ad Oggetti - 1
Gianmaria Mancosu
Slide 34
Package & Exception
Exception Usage
l Un oggetto di tipo Exception contiene informazioni che specificano meglio cosa è successo e cosa stava avvenendo in quel momento:l String getMessage()l restituisce il messaggio di errore
l void printStackFrame()l stampa il contenuto dello stack al momento
dell’eccezione
35
Corso di Linguaggi di Programmazione ad Oggetti - 1
Gianmaria Mancosu
Slide 35
Package & Exception
Exception Usage
l Esempio di utilizzo di printstackFrame()catchedException.printStackFrame();
>> java.io.FileNotFoundException: HTML (Is a directory)at java.io.FileOutputStream.open(Native Method)at java.io.FileOutputStream.<init>(FileOutputStream.java:116)at java.io.FileOutputStream.<init>(FileOutputStream.java:76)at net.sourceforge.cruisecontrol.Project.serializeProject(Project.java:186)at net.sourceforge.cruisecontrol.Project.build(Project.java:175)at net.sourceforge.cruisecontrol.Project.execute(Project.java:98)at net.sourceforge.cruisecontrol.Main.main(Main.java:79)at CruiseControl.main(CruiseControl.java:68)
36
Corso di Linguaggi di Programmazione ad Oggetti - 1
Gianmaria Mancosu
Slide 36
Package & Exception
User Defined Exception
l È possibile definire le proprie eccezioni semplicemente ereditando da Exception o da una sua sottoclasse
l È possibile anche definire una propria gerarchia di eccezioni
l Le eccezioni dell’utente si possono sollevare e catturare esattamente come quelle standard
37
Corso di Linguaggi di Programmazione ad Oggetti - 1
Gianmaria Mancosu
Slide 37
Package & Exception
User Defined Exceptionpublic class MyException extends java.lang.Exception {
public MyException() {super();
}public MyException(String message) {super(message);
}}
// esempio di utilizzo...throw new MyException();...catch(MyException e) { e.printStackFrame(); }...
38
Corso di Linguaggi di Programmazione ad Oggetti - 1
Gianmaria Mancosu
Slide 38
Package & Exception
Exception Summaryl Le eccezioni sono degli eventi di errore o di malfunzionamento
che si verificano durante l’esecuzione di un programmal Le eccezioni possono essere sollevate tramite la keyword throwl Le eccezioni di tipo checked vanno obbligatoriamente gestite
tramite il costrutto try-catch-finally o segnalate nella dichiarazione di metodo tramite la keyword throws
l Le eccezioni di tipo unchecked non vanno obbligatoriamente gestite ma possono comunque essere catturate tramite try-catch-finally per rilasciare le risorse prima del termine del programma
l È possibile definire la propria gerarchia di eccezioni estendendo quelle standard