Package Corso di Linguaggi di Programmazione ad Oggetti 1 A.A. 2003/04 A cura di Gianmaria Mancosu 1 Corso di Linguaggi di Programmazione ad Oggetti - 1 Slide 2 API – Application Programming Interface l l I vecchi linguaggi (Pascal, C, FORTRAN) permettono di raccogliere le funzioni in librerie Con i linguaggi OO le librerie di funzioni sono sostituite dalle librerie di classi o toolkit l l Stesse operazioni e funzionalità delle vecchie librerie di funzioni Vantaggio: con l’uso dell’ereditarietà il programmatore può facilmente estendere e modificare questi strumenti per la propria applicazione Package & Exception Gianmaria Mancosu 2 Corso di Linguaggi di Programmazione ad Oggetti - 1 Slide 3 API – Application Programming Interface l 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 La piattaforma Java definisce una serie di API e di Framework che sono continuamente estesi, per esempio: l l l Swing, per l’interfaccia grafica JDBC API, Java DataBase Connectivity API JavaBeans, l’architettura per creare componenti Package & Exception Gianmaria Mancosu 3 Corso di Linguaggi di Programmazione ad Oggetti - 1 Slide 4 Astrazione l Funzioni l l Oggetti l l Scrivere un algoritmo una volta ed usarlo in molte situazioni Raggruppare un insieme correlato di attributi e comportamenti (behavior) in una classe Framework e API l Gruppi di oggetti che forniscono un’attività complessa, che possono essere estesi o usati così come sono Package & Exception Gianmaria Mancosu 4 Corso di Linguaggi di Programmazione ad Oggetti - 1 Slide 5 Package l l l Aiutano la gestione di grandi progetti software Possono contenere classi e sotto-package Analogia con le directory e i file l l l File çè Classe Directory çè Package Le classi vengono raggruppate per attinenza l Es. classi di I/O, classi di GUI Package & Exception Gianmaria Mancosu 5 Corso di Linguaggi di Programmazione ad Oggetti - 1 Slide 6 Package in UML painter model gui Drawing Figure Square Circle printer Package & Exception Gianmaria Mancosu 6 Corso di Linguaggi di Programmazione ad Oggetti - 1 Slide 7 Package Declaration l Per specificare l’appartenenza di una classe ad un package si usa la keyword package package painter.model; l l l l l I nomi dei package devono essere gerarchici e separati con un punto Solitamente si usano nomi con lettere minuscole La dichiarazione deve essere fatta all’inizio del file sorgente Si può specificare un solo package per ciascun file sorgente Se non si dichiara nessun package allora la classe appartiene ad un package di default Package & Exception Gianmaria Mancosu 7 Corso di Linguaggi di Programmazione ad Oggetti - 1 Slide 8 Package vs Namespace l Questa tabella mostra il parallelo tra package e namespace in C/C++ Operazione Entità singola Raggruppamento Risoluzione di scope Definizione Utilizzo Package & Exception C/C++ Java classe classe namespace package :: . namespace <nome> { } package <nome>; using namespace import Gianmaria Mancosu 8 Corso di Linguaggi di Programmazione ad Oggetti - 1 Slide 9 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 { ... } Package & Exception Gianmaria Mancosu 9 Corso di Linguaggi di Programmazione ad Oggetti - 1 Slide 10 Package Usage l l Per utilizzare le classi contenute in un package occorre importarlo tramite la keyword import È 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(); ... } Package & Exception Gianmaria Mancosu 10 Corso di Linguaggi di Programmazione ad Oggetti - 1 Slide 11 Package Standard l java.lang l l l java.io l l Contiene tutte le classi dedicate al I/O da tastiera e da file java.util l l l Contiene tutte le classi principali del linguaggio, tra cui String, Array, Number, Object, System Viene importata automaticamente dal compilatore Contiene le collezioni, vari algoritmi di trattamento delle collezioni, e tante altre classi utili durante lo sviluppo Ad esempio, contiene le classi Vector, Hashtable, Date, Time java.awt l Contiene le classi di gestione dell’interfaccia grafica indipendenti dal sistema operativo Package & Exception Gianmaria Mancosu 11 Corso di Linguaggi di Programmazione ad Oggetti - 1 Slide 12 Modificatori di Accesso l Java permette un ulteriore modificatore di accesso (oltre a public, protected, private) che agisce a livello di package l l l l Consente di accedere a variabili o metodi anche dalle classi non derivate purché appartenenti allo stesso package Serve per rendere più semplice lo scambio di dati o messaggi tra le classi di uno stesso package Costituisce una violazione del principio dell’information hiding (come friend in C++) È il livello di default se non è esplicitamente indicato uno dei modificatori public, protected, private: void packageMethod(int par) { ... } Package & Exception Gianmaria Mancosu 12 Corso di Linguaggi di Programmazione ad Oggetti - 1 Slide 13 Modificatori di Accesso l l l Il modificatore di accesso di default risulta quindi meno restrittivo di private perché consente di accedere anche a slot di classi diverse Risulta più restrittivo di protected, perché le classi derivate che non appartengono allo stesso package non possono accedere agli slot con accesso default La conseguenza è che gli slot marcati con protected possono essere visti anche da classi non derivate, se queste appartengono allo stesso package Package & Exception Gianmaria Mancosu 13 Corso di Linguaggi di Programmazione ad Oggetti - 1 Slide 14 Modificatori di Accesso Modificatore Classe Package Sottoclasse private OK default OK OK protected OK OK OK public OK OK OK Package & Exception Universo OK Gianmaria Mancosu 14 Corso di Linguaggi di Programmazione ad Oggetti - 1 Slide 15 Modificatori di Accesso package first; public class AClass { private int privateSlot ; int defaultSlot ; protected int protectedSlot ; } Stesso package package first; public class AnotherClass { public void publicMethod() { AClass obj = new AClass() ; obj.privateSlot = 0 ; // NO!!! obj.defaultSlot = 0 ; // YES!!! obj.protectedSlot = 0 ; // YES!!! } } Package & Exception Gianmaria Mancosu 15 Corso di Linguaggi di Programmazione ad Oggetti - 1 Slide 16 Modificatori di Accesso package first; public class AClass { private int privateSlot ; int defaultSlot ; protected int protectedSlot ; } Diverso package package second; public class AnotherClass { public void publicMethod() { AClass obj = new AClass() ; obj.privateSlot = 0 ; // NO!!! obj.defaultSlot = 0 ; // NO!!! obj.protectedSlot = 0 ; // NO!!! } } Package & Exception Gianmaria Mancosu 16 Corso di Linguaggi di Programmazione ad Oggetti - 1 Slide 17 Modificatori di Accesso package first; public class AClass { private int privateSlot ; int defaultSlot ; protected int protectedSlot ; } Diverso package package second; public class AnotherClass extends Aclass { public void publicMethod() { this.privateSlot = 0 ; // NO!!! this.defaultSlot = 0 ; // NO!!! this.protectedSlot = 0 ; // YES!!! } } Package & Exception Gianmaria Mancosu 17 Corso di Linguaggi di Programmazione ad Oggetti - 1 Slide 18 Package Summary l l l l I package sono uno strumento per raggruppare le classi o sottopackage che sono attinenti per funzionalità o scopo La keyword package permette di definire la collocazione di una classe La keyword import permette di utilizzare le classi di altri package 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 Package & Exception Gianmaria Mancosu 18 Gestione degli Errori e delle Eccezioni in Java Corso di Linguaggi di Programmazione ad Oggetti 1 A.A. 2003/04 A cura di Gianmaria Mancosu 19 Corso di Linguaggi di Programmazione ad Oggetti - 1 Slide 20 Exceptions l l Come vengono trattati gli errori di esecuzione dagli altri linguaggi? Se fate l’ipotesi che il vostro codice funzioni bene, e invece qualche congettura non è corretta, cosa può succedere? Package & Exception Gianmaria Mancosu 20 Corso di Linguaggi di Programmazione ad Oggetti - 1 Slide 21 Exceptions l Checked Exceptions l l l Condizioni di errore che possono capitare in un programma corretto Ci si aspetta che il programmatore debba gestirli Unchecked Exceptions l l l l Problemi solitamente gravi o bug Difficilmente recuperabili Non ci si aspetta che il programmatore debba recuperare la situazione Solitamente comportano l’uscita dal programma Package & Exception Gianmaria Mancosu 21 Corso di Linguaggi di Programmazione ad Oggetti - 1 Slide 22 Exceptions l Checked Exceptions l l Rappresentati dalla classe Exception Esempi: l l l File not found Network error Unchecked Exceptions l l l Situazioni fatali sono rappresentati dalla classe Error Possibili bug sono rappresentati dalla classe RuntimeException Esempi: (Error o RuntimeException?) l l Out of bounds, Division by zero Out of memory, Stack overflow Package & Exception Gianmaria Mancosu 22 Corso di Linguaggi di Programmazione ad Oggetti - 1 Slide 23 Exception Hierarchy Object Throwable Error Exception RuntimeException Checked Exceptions Unchecked Exceptions Package & Exception Gianmaria Mancosu 23 Corso di Linguaggi di Programmazione ad Oggetti - 1 Slide 24 Exception Hierarchy l Error l VirtualMachineError l l l l AWTError RuntimeException l l l l StackOverflowError OutOfMemroyError ArithmeticException NullPointerException IndexOutOfBoundException Exception l IOException l l l l EOFException FileNotFoundException ClassNotFoundException SQLException Package & Exception Gianmaria Mancosu 24 Corso di Linguaggi di Programmazione ad Oggetti - 1 Slide 25 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.ArithmeticException: / by zero java.lang.ArithmeticException: at testjava.MathException.main(MathException.java:6) Exception in thread "main" Package & Exception Gianmaria Mancosu 25 Corso di Linguaggi di Programmazione ad Oggetti - 1 Slide 26 Exceptions l Un metodo che rileva un eccezione può segnalarla con la keyword throw: if (cond) throw new ConditionFailedException(); l l l l Il metodo può gestire l’eccezione da solo, altrimenti viene interrotto e il controllo passa al metodo chiamante Se il metodo chiamante non è in grado di gestire l’eccezione passa il controllo al proprio chiamante Il meccanismo prosegue e l’eccezione risale nello stack delle chiamate dei metodi (bubbling) Se l’eccezione non viene gestita provoca l’uscita con errore dal programma (killed) Package & Exception Gianmaria Mancosu 26 Corso di Linguaggi di Programmazione ad Oggetti - 1 Slide 27 Exception Bubbling main() main() primo() primo() secondo() secondo() Package & Exception Gianmaria Mancosu 27 Corso di Linguaggi di Programmazione ad Oggetti - 1 Slide 28 Exception Handling l l l l Consiste nel definire un comportamento personalizzato nel caso di una eccezione Dopo la gestione il programma può continuare con la sua esecuzione Il meccanismo è fatto in modo da distinguere il flusso normale del programma dalla gestione dei casi particolari Maggiore leggibilità Package & Exception Gianmaria Mancosu 28 Corso di Linguaggi di Programmazione ad Oggetti - 1 Slide 29 Exception Handling try { // 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 } Package & Exception Gianmaria Mancosu 29 Corso di Linguaggi di Programmazione ad Oggetti - 1 Slide 30 Exception Handling main() main() catch handle() handle() Package & Exception try primo() primo() secondo() secondo() Gianmaria Mancosu 30 Corso di Linguaggi di Programmazione ad Oggetti - 1 Slide 31 Exception Handling l l l Quando viene gestita un’eccezione il controllo passa alla fine del blocco try-catch che l’ha gestita Un modo per eseguire sempre un blocco di codice indipendentemente dalla cattura di una eccezione è quello di utilizzare l’istruzione finally Da utilizzarsi, ad esempio, per: l l l rilasciare le risorse allocate (grafiche, memoria) chiudere file o canali di comunicazioni rilasciare semafori (evita i deadlock) Package & Exception Gianmaria Mancosu 31 Corso di Linguaggi di Programmazione ad Oggetti - 1 Slide 32 Exception Handling try { // 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 } Package & Exception Gianmaria Mancosu 32 Corso di Linguaggi di Programmazione ad Oggetti - 1 Slide 33 Exception Declaration l l Ogni metodo che vuole gestire le eccezioni deve utilizzare i blocchi try-catch 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 Package & Exception Gianmaria Mancosu 33 Corso di Linguaggi di Programmazione ad Oggetti - 1 Slide 34 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 l restituisce il messaggio di errore void printStackFrame() l stampa il contenuto dello stack al momento dell’eccezione Package & Exception Gianmaria Mancosu 34 Corso di Linguaggi di Programmazione ad Oggetti - 1 Slide 35 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) Package & Exception Gianmaria Mancosu 35 Corso di Linguaggi di Programmazione ad Oggetti - 1 Slide 36 User Defined Exception l l l È possibile definire le proprie eccezioni semplicemente ereditando da Exception o da una sua sottoclasse È possibile anche definire una propria gerarchia di eccezioni Le eccezioni dell’utente si possono sollevare e catturare esattamente come quelle standard Package & Exception Gianmaria Mancosu 36 Corso di Linguaggi di Programmazione ad Oggetti - 1 Slide 37 User Defined Exception public 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(); } ... Package & Exception Gianmaria Mancosu 37 Corso di Linguaggi di Programmazione ad Oggetti - 1 Slide 38 Exception Summary l l l l l Le eccezioni sono degli eventi di errore o di malfunzionamento che si verificano durante l’esecuzione di un programma Le eccezioni possono essere sollevate tramite la keyword throw Le eccezioni di tipo checked vanno obbligatoriamente gestite tramite il costrutto try-catch-finally o segnalate nella dichiarazione di metodo tramite la keyword throws Le eccezioni di tipo unchecked non vanno obbligatoriamente gestite ma possono comunque essere catturate tramite trycatch-finally per rilasciare le risorse prima del termine del programma È possibile definire la propria gerarchia di eccezioni estendendo quelle standard Package & Exception Gianmaria Mancosu 38