package - diee.unica.itarmano/lpo1/pdf/lezione040429.pdf · l la piattaforma java definisce una...

38
Package Corso di Linguaggi di Programmazione ad Oggetti 1 A.A. 2003/04 A cura di Gianmaria Mancosu

Upload: truongtruc

Post on 16-Feb-2019

214 views

Category:

Documents


0 download

TRANSCRIPT

1

Package

Corso di Linguaggi diProgrammazione ad Oggetti 1

A.A. 2003/04

A cura diGianmaria Mancosu

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