java uni pavia.pdf

165
Università degli Studi di Pavia Corso di base in Programmazione Java Programmazione Java Luigi Santangelo

Upload: ermeyogio

Post on 31-Oct-2015

46 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Java Uni Pavia.pdf

1Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Università degli Studi di Pavia

Corso di base in

Programmazione JavaProgrammazione Java

Luigi Santangelo

Page 2: Java Uni Pavia.pdf

2Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Obiettivo

- Il presente corso ha l'obiettivo di presentare i fondamenti di Java- E' un corso prevalentemente pratico, si consiglia pertanto di svolgere regolarmente gli esercizi- Cosa NON faremo:

- Librerie Swing e Awt (interfaccia grafica)- Applet- J2EE- J3ME- Librerie specifiche (es. accesso alla base dati)

Page 3: Java Uni Pavia.pdf

3Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esame

Alla fine del corso è previsto (per chi vuole) lo svolgimento di un esame, il cui superamento comporta l'acquisizione di 2 CF. L'esame è esclusivamente pratico. Al candidato verrà richiesto lo sviluppo di un algoritmo simile a quelli che vedremo a lezione.

Page 4: Java Uni Pavia.pdf

4Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Risorse

In rete sono presenti tantissime risorse su Java:

www.java.sun.comJava Italian PortalMokabyteMattone dopo mattone

Page 5: Java Uni Pavia.pdf

5Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Introduzione allo Introduzione allo sviluppo del softwaresviluppo del software

- capitolo 1 -

Page 6: Java Uni Pavia.pdf

6Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Sviluppo del software

Prima degli anni 90:- Lavoro individuale- Algoritmi veloci- Piccola dimensione dei programmi- Limitata uso di memoria RAM

Oggi:- Lavoro in team- Riusabilità del codice- Rendere semplice il mantenimento- Portabilità

Page 7: Java Uni Pavia.pdf

7Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Fasi di sviluppo

modello a cascata

Page 8: Java Uni Pavia.pdf

8Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Linguaggi di programmazione

1 9 4 0             1 9 5 0             1 9 6 0               1 9 7 0             1 9 8 0             1 9 9 0             2 0 0 0

M a c h i n ec o d e

A s s e m b l y  l a n g u a g e s

F o r t r a nB a s i c

P a s c a l

S c h e m eC C + +

J a v aL I S P

S m a l l t a l k       S m a l l t a l k ­ 8 0

C #

L o g o

P y t h o n

Page 9: Java Uni Pavia.pdf

9Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Strumenti di lavoro

EditorIl programmatore scrive il codice sorgente

CompilatoreTraduce il codice sorgente in un codice oggetto (specifico per la CPU)

IntepreteTradue il codice sorgente „on the fly“

LinkerConverte uno o più moduli in un programma eseguibile

DebuggerEsegue il programma in „slow motion“ e aiuta a trovare eventuali bug

Page 10: Java Uni Pavia.pdf

10Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Strumenti di lavoro

Sul sito della Sun è disponibile un'ottima documentazione “navigabile”.In essa troverete tutte le informazioni che cercate. Purtroppo è solamente in inglese e contiene troppi dettagli che non vedremo.

Impareremo a leggere la documentazione e a riconoscere solo ciò che ci serve.

Page 11: Java Uni Pavia.pdf

11Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Strumenti di lavoro

Per sviluppare gli applicativi in Java è sufficiente avere qualsiasi editor di testi di tipo ASCII. Per rendere più semplice lo sviluppo, è consigliato l'utilizzo di un ambiente di sviluppo integrato. Questo ci consente di scrivere codice, compilarlo, eseguire il debug ed eseguirlo. Ci agevola anche la scrittura del codice attraverso suggerimenti.Esistono vari ambienti di sviluppo, alcuni dei quali OpenSource (o comunque free):- Eclispe- Netbeans- Jbuilder- ...

Page 12: Java Uni Pavia.pdf

12Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Java: un approccio ibrido

Un compilatore Java converte codice sorgente Java in istruzioni per JVM.

Queste istruzioni, chiamate bytecodes, sono le stesse per ogni architettura e per ogni sistema operativo.

Un interprete, specifico per la CPU, interpreta il bytecode in una specifica architettura.

Page 13: Java Uni Pavia.pdf

13Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Java: un approccio ibrido

Page 14: Java Uni Pavia.pdf

14Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

E d i t o r

H e l lo . ja v a

C o m p i l e r

H e l lo . c l a s s

I n t e r p r e t e rH e l l o ,W o r l d !

I n t e r p r e t e r

Java: un approccio ibrido

Page 15: Java Uni Pavia.pdf

15Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

JDK: Java Development Kit

Cosa serve per programmare in Java?

Il Kit di sviluppo (JDK) contiene:- javac: il compilatore;- java: l'interprete;- javadoc: genera documentazione partendo dal codice Java (non la vedremo);- jar: le librerie di sviluppo;- appletviewer: consente di visualizzare le applet senza utilizzare un browser (non lo vedremo)

Tutti questi sono tools a riga di comando.

Page 16: Java Uni Pavia.pdf

16Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Tipi di programmi

Web application (J2EE), Mobile Application (j2ME)

Applet GUI applicationConsole application

Page 17: Java Uni Pavia.pdf

17Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Paradigmi di programmazione

Programmazione imperativa:Il codice viene inteso come una sequenza di istruzioni, dette anche direttive o comandi. Rientrano in questa categoria il linguaggio C, Basic, Fortan, Pascal, ...

Programmazione funzionale:Il flusso di esecuzione di un programma assume la forma di una serie di funzioni. Rientrano in questa categoria il linguaggio LISP, Logo, Haskell, ...

Page 18: Java Uni Pavia.pdf

18Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Paradigmi di programmazione

Programmazione orientata agli oggetti:La programmazione orientata agli oggetti gestisce oggetti. Ogni oggetto ha una propria vita (viene creato, viene utilizzato e quindi viene distrutto). L'uso di un oggetto avviene attraverso i propri metodi. Ogni metodo può cambiare lo stato dell'oggetto, spedire un messaggio all'oggetto, o creare un nuovo oggetto (figlio).Un oggetto, inoltre, è di uno specifico tipo (classe). Più oggetti possono far parte della medesima classe ed ereditare le medesime caratteristiche. Java è un linguaggio OOP

Page 19: Java Uni Pavia.pdf

19Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Nozioni fondamentaliNozioni fondamentali

- capitolo 2 -

Page 20: Java Uni Pavia.pdf

20Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Il linguaggio

Il linguaggio Java è composto da uno o più file di testo, uno dei quali deve necessariamente contenere una classe public con un metodo main:

public MiaClasse{

public static void main (String args[]){

...}

}

Ogni file deve avere lo stesso nome della classe ed estensione .java

Page 21: Java Uni Pavia.pdf

21Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Il linguaggio

Considerazioni:- Java è case sensitive: distingue le maiuscole dalle minuscole;- Un programma Java vive all'interno di una classe il cui nome deve essere uguale al nome del file e deve inizare con una lettera;- non c'è limite alla lunghezza del nome della classe;- Per convenzione il nome della classe inizia con la lettera maiuscola;- Se non sono stati commessi errori sintattici, compilando la classe si ottiene un file .class che è il bytecode

Page 22: Java Uni Pavia.pdf

22Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

I commenti

Un commento è una porzione di codice che verrà ignorata durante la fase di compilazione del codice sorgente. Utilissimo per indicare al programmatore la semantica dell'algoritmo che sta realizzando.Un commento può essere inserito con:

// commento in singola linea

/*commento supiù linee

*/

Page 23: Java Uni Pavia.pdf

23Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

I commenti

Prendete l'abitudine di commentare i programmi. Partendo dai commenti presenti in un file, è possibile, attraverso l'utility javadoc, creare automaticamente la documentazione (in formato html) per le classi create.A tale scopo, i commenti vanno inseriti prima della definizione di ogni classe, di ogni metodo e di ogni attributo.

Page 24: Java Uni Pavia.pdf

24Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Le variabili

Una variabile identifica una porzione di memoria RAM in grado di contenere una informazione semplice (tipi primitivi) o composta (oggetti). Il tipo di una varibile specifica la quantità di memoria deve essere riservata per mantenere quella informazione.

Tipi primitivi:

boolean short long floatbyte int char double

Page 25: Java Uni Pavia.pdf

25Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Assegnamento

Inizializzare una variabile significa assegnare alla variabile un valore iniziale (che può essere modificato). La modifica di una variabile avviene attraverso l'operatore di assegnamento (=)

int a = 6;

In questa istruzione abbiamo dichiarazione e inizializzazione;

a = 8;

In questa istruzione assegnamo 8 alla variabile a

Page 26: Java Uni Pavia.pdf

26Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Tipi primitivi

boolean true o falsechar carattere UNICODE a 16 bitbyte intero di 8 bit [-/+127]short intero di 16 bit [-/+32768]int intero di 32 bit [+/-2.147.483.648]long intero di 64 bit [-/+ 10^19]float decimale di 32 bit [+/-3,4*10^38]

con 7 cifre significativedouble decimale di 64 bit [+/-3,4*10^308]

con 15 cifre significative

float richiede il suffisso F per distinguerlo da double

Page 27: Java Uni Pavia.pdf

27Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Tipi primitivi: osservazioni

Notate che una stringa NON è un tipo primitivo, ma un oggetto. Ne parleremo più avanti.

Due variabili possono essere combinate tra loro SOLO se hanno lo stesso tipo. Ad esempio, due variabili possono essere sommate tra loro solo se hanno lo stesso tipo (ad esempio entrambe int). Se due variabili sono di tipo differente ma devono essere tra loro combinate DEVONO essere convertite nel medesimo tipo (cast). Questa operazione può essere automatica (fatta dal compilatore) o manuale (fatta dal programmatore)

Page 28: Java Uni Pavia.pdf

28Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Casting

Il cast è un processo di conversione (automatico o manuale) di una variabile da un tipo a un altro tipo. Ad esempio, un intero può essere convertito in un float o in un double, o un intero in una stringa. Alcuni cast avvengono automaticamente, mentre in altre circostanze è necessario indicarlo esplicitamente:int a = 5;double b = a; // b vale 5.0String s = a + “”; // s vale “5”char c = 'a';int d = c; // d = 97 ascii di 'a'

Page 29: Java Uni Pavia.pdf

29Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Casting

Alcuni cast sono “lossless” (senza perdita di dati). Ad esempio se convertiamo un intero in un double non c'è perdita di dati, ma se convertiamo un double in intero, la parte decimale viene persa:double d = 3.14;int i = (int) d; // i vale 3Di seguito vengono indicati i cast lossless

byte short int long

doublechar

Page 30: Java Uni Pavia.pdf

30Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Cast

int a = 17;int b = 5;System.out.print(a / b);// essendo a e b due interi, la divisione ritorna un intero (ovvero 3);

double c = (double) a / (double) b;// c è un numero reale

Page 31: Java Uni Pavia.pdf

31Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Nome variabile

Una variabile si può chiamare come si vuole purche:- non abbia come nome una parola riservata;- sia composta solo da lettere, cifre, _ e $- non inizi con una cifra;

Attenzione: Java è case sensitiveint Totale = 100;int totale = 100;

Page 32: Java Uni Pavia.pdf

32Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Parole riservate

abstract boolean break bytebyvalue case cast catch

char class const continuedefault do double elseextends false final finally

float for future genericgoto if implementsimport inner instanceof

interface long native newnull operator outer packageprivate protected public restreturn short static superswitch synchronized thisthrow throws transient

try var void volatilewhile int true

Page 33: Java Uni Pavia.pdf

33Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esempio 01

public class ex01{

public static void main (String args[]){

boolean flag = true;char ch = 'B';int n = 22;float x = 3.14159F;

}}

Le variabili di tipo primitivo di definiscono, gli oggetti si istanziano (operatore new, lo vedremo più avanti).

Page 34: Java Uni Pavia.pdf

34Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esempio 01

public class ex01{

public static void main (String args[]){

boolean flag = true;char ch = 'B';int n = 22;float x = 3.14159F;

System.out.print(flag);}

}

Page 35: Java Uni Pavia.pdf

35Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Caratteri speciali

\b backspace\t tabulazione\n avanzamento riga\r ritorno carrello\” virgolette doppie\' virgoletta singola\\ barra rovesciata

Page 36: Java Uni Pavia.pdf

36Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Operatori

Gli operatori in java di distinguono in operatori di:

assegnamento: =relazionali: < <= == >= > !=aritmetici: + - * / %logici: && || !incremento ++decremento --

Page 37: Java Uni Pavia.pdf

37Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Operatori logici

(condiz1 && condiz2) è vera se e solo se entrambe le condizioni sono vere. Se la prima è falsa, la seconda non viene verificata (corto-circuitata)

(condiz1 || condiz2) è vera se almeno una delle due condizioni è vera. Se la prima è vera, la seconda non viene verificata. (corto-circuito)

(!condiz1) è vera solo se condiz1 è falsa.

Page 38: Java Uni Pavia.pdf

38Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esempio 02

public class ex02{

public static void main (String args[]){

int a = 10;int b = 5;int diff = a – b;int mod;mod = a % b;System.out.print(diff);System.out.print(mod);

}}

Page 39: Java Uni Pavia.pdf

39Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Controllo del flusso

Come tutti i linguaggi di programmazione, Java supporta i costrutti if, if ... else

if (condizione){

codice se condizione è vera}else{

codice se condizione è falsa}

Page 40: Java Uni Pavia.pdf

40Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esempio 03

public class ex03{

public static void main (String args[]){

int a = 10;int resto = a % 2;if (resto == 0){

System.out.print(“Numero pari\n”);}else{

System.out.print(“Numero dispari\n”);}

}}

Page 41: Java Uni Pavia.pdf

41Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Errori comuni

if (...) if (...)

statement1;else statement2;...

It is safer to always use braces in if-else

if (...)statement1;statement2;

...

if (...) ;{

statements; ...}

Extra semicolon:

Missing braces:

Page 42: Java Uni Pavia.pdf

42Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Controllo del flusso

L'utilizzo di molti if potrebbe compromettere la leggibilità del codice. Per questo potrebbe essere utile utilizzare il costrutto switch (equivalente all'if)switch (variabile da controllare){

case valore1: istruzioni; break;

case valore2: istruzioni; break;

...default:

istruzioni; break;

}

Page 43: Java Uni Pavia.pdf

43Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esempio 04

public class ex04{

public static void main (String args[]){

char carattere = 'a';

switch (carattere){

case 'a': System.out.print(“Carattere A”);break;case 'z': System.out.print(“Carattere Z”);break;default: System.out.print(“Non definito”);

}}

}

Page 44: Java Uni Pavia.pdf

44Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Cicli iterativi

In Java esistono 3 modi per poter eseguire i cicli iterativi: for, while e do ... while

I metodo più semplice è il ciclo for con il quale viene indicata la sequenza di istruzioni che devono essere iterate e il numero di volte in cui l'iterazione dovrà avvenire. Questo avviene indicando il limite inferiore, il limite superiore di iterazioni e la lunghezza del “passo”.

Page 45: Java Uni Pavia.pdf

45Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esempio 05

public class ex05{

public static void main (String args[]){

for (int i = 0; i < 10; i = i+1){

System.out.print(“Iterazione n. “ + i);System.out.print(“\n”);

}}

}

Page 46: Java Uni Pavia.pdf

46Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Cicli iterativi

Talvolta, però, non è possibile determinare il numero di iterazioni da fare. Ad esempio, si potrebbe pensare di eseguire un ciclo fintanto che una variabile non assuma il valore 100. In questo caso non sappiamo quando la variabile assuma tale valore. In questo caso è preferibile utilizzare i costrutti while e do ... while.La differenza fondamentale sta nel fatto che il ciclo while può essere eseguito zero volte (se la variabile assume già il valore 100), mentre il do ... while, viene comunque eseguito una volta. Cioè il controllo della condizione avviene DOPO aver eseguito il ciclo.

Page 47: Java Uni Pavia.pdf

47Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esempio 06

public class ex06{

public static void main (String args[]){

int a = 100;

while ((a % 2) == 0)a = a / 2;

System.out.print(“Valore di a: “);System.out.print(a + “\n”);

}}

Page 48: Java Uni Pavia.pdf

48Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esempio 07

public class ex07{

public static void main (String args[]){

float a = 75F;do

a = a / 2;while ((a % 2) == 0);System.out.print("Valore di a: ");System.out.print(a + "\n");

// a vale 37.5}

}

Page 49: Java Uni Pavia.pdf

49Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Metodi

Come abbiamo già detto, un programma java è composto da almeno una classe che contiene un metodo chiamato main. In realtà, questa classe potrebbe contenere diversi metodi (o funzioni) che possono essere richiamati da qualsiasi altro metodo. Un metodo prende in input zero, uno o più parametri (INPUT) e ritorna zero o un parametro (OUTPUT). Bisogna però distinguere la definizione del metodo dalla chiamata al metodo. Un metodo che non ritorna nulla, ritorna void. Il valore di ritorno viene ritornato tramite return. Un metodo può avere diversi return.

Page 50: Java Uni Pavia.pdf

50Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esempio 08

public class ex08{

public static void main (String args[]){

if (pari(5)) System.out.print(“numero pari”);else System.out.print(“numero dispari”);

}

private static boolean pari(int a){

if ((a % 2) == 0) return true; return false;

}}

Page 51: Java Uni Pavia.pdf

51Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Visibilità (scope)

Ogni variabile che viene definita in un programma Java ha una sua visibilità (scope). Se si cerca di utilizzare una variabile fuore dal suo scope, il compilatore segnala un errore. Le parentesi graffe possono essere utilizzate per capire qual è lo scope:

public void funzione(){

int miavar = 10;....

}// qui finisce la visibilità della variabile

Page 52: Java Uni Pavia.pdf

52Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Visibilità (scope)

Le variabili possono definite dentro un metodo vengono distrutte quando il metodo è stato eseguito (quindi lo spazio di memoria viene liberato).

// le due variabili sono distinte

private double radius;...public void function (...){ double radius = 5; ...

Page 53: Java Uni Pavia.pdf

53Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esercizi

1. public static int daysInMonth(int month, int year)// precondizione: 0 < n < 13// esempio: daysInMonth(2, 2000) ritorna 29

2. public static int numberOfDigits(int n)// esempio: numberOfDigits(1478) ritorna 4

3. public static int sumOfDigits(int n)// esempio: sumOfDigits(1478) ritorna 20

4*. public static int reverseInteger(int n)// esempio: reverseInteger(1234) ritorna 4321

Page 54: Java Uni Pavia.pdf

54Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Ricorsione (solo definizione)

Alcuni problemi si prestano bene ad essere risolti attraverso una tecnica di programmazione definita ricorsione.La ricorsione consiste nel definire una funzione che richiama se stessa ripetutamente (attenzione, se non è ben definita può creare loop infiniti). Alcuni problemi infatti sono di tipo ricorsivo:

Fattoriale di un numeroDimensione in byte del contenuto di una directoryMassimo comune divisore (Algoritmo di Euclide)Tutte le operazioni di ricerca (tempo logaritmico)

Page 55: Java Uni Pavia.pdf

55Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Pseudocodice e Flowcharts

Pseudocodice: sequenze di asserzioni in una specifica notazione (non legato ad alcun linguaggio di programmazione)

FlowCharts (diagrammi di flusso): rappresentazione grafica del flusso

Page 56: Java Uni Pavia.pdf

56Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esempio: 12 + 22 + ... + n2

Pseudocodice:

Input: n

sum = 0i = 1

Ripeti fintanto che i <= n sq = i * i

sum = sum + sq i = i + 1

Output: sum

Page 57: Java Uni Pavia.pdf

57Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esempio: 12 + 22 + ... + n2

n

sum ← 0i ← 1

i ≤ n ?

sq ← i * isum ← sum + sqi ← i + 1

sum

No

Yes

Input / output

Processing step

Decision

Page 58: Java Uni Pavia.pdf

58Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esempio: 12 + 22 + ... + n2

public static void main(String args[]){

int n, sum, i;n = 10;sum = 0;for (i = 1; i <= n; ++i){

int sq = i * i;sum = sum + sq;

}System.out.print(sum);

}

Page 59: Java Uni Pavia.pdf

59Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Gli oggettiGli oggetti

- capitolo 3 -

Page 60: Java Uni Pavia.pdf

60Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Gli oggetti

Java è un linguaggio di programmazione orientato agli oggetti. Offre infatti una suite di librerie di oggetti dei quali è possibile utilizzare i relativi metodi.Un oggetto rappresenta una istanza di una classe, una entità fisicamente presente in memoria RAM.Preso un oggetto, è possibile modificare le proprietà attraverso i metodiLe proprietà di un oggetto possono essere altri oggetti o variabili di un certo tipo.Attraverso i metodi (funzioni) si possono modificare le proprietà degli oggetti.

Page 61: Java Uni Pavia.pdf

61Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Gli oggetti

Affinchè un oggetto possa esistere, è necessario istanziare tale oggetto partendo dalla sua classe.Per cui per avere l'oggetto bisogna avere la classe. Per istanziare un oggetto si utilizza l'operatore new che alloca lo spazio di memoria sufficiente a memorizzare l'oggetto.

Object myObj = new Object();

I metodi di un oggetto possono essere invocati nel seguente modo:

res = myObj.myMethod(parameter);

Page 62: Java Uni Pavia.pdf

62Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Oggetti

Java mette a disposizione una miriade di oggetti che possono essere istanziati e successivamente utilizzati. Fornisce anche i costrutti affinchè possano essere costruiti oggetti “nuovi” attraverso la definizione della classe a cui gli oggetti appartengono.Tra tutti gli oggetti presenti nelle librerie, ne vedremo solo alcuni. Innanzitutto l'oggetto String.Finora abbiamo lavorato solo con tipi primitivi (int, char, float, ecc) ma non abbiamo parlato di stringhe, in quanto queste in Java sono oggetti.

Page 63: Java Uni Pavia.pdf

63Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

L'oggetto String

Una stringa è una sequenza di caratteri. La classe String contiene più di 50 metodi. Nel seguito vedremo i più significativi. Per prima cosa è necessario creare l'oggetto di istanza String, quindi successivamene utilizzare i metodi che la classe ci mette a disposizione. Gli esempi che verranno indicati nel seguito ometteranno (per questione di leggibilità) la definizione della classe principale e del metodo main.

Page 64: Java Uni Pavia.pdf

64Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esempio 09

// creazione dell'oggettoString saluto = new String(“Ciao”);

// ritorna 4, la lunghezza della stringaint len = saluto.lenght();

// visualizza la sottostringa “ia”System.out.print(saluto.substring(1,3));

// visualizza la stringa in maiuscoloSystem.out.print(saluto.toUpperCase());

// concatenazioneSystem.out.print(“Mario” + “ “ + “Rossi”);

Page 65: Java Uni Pavia.pdf

65Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esempio 09

// visualizza la stringa in minuscoloSystem.out.print(saluto.toLowerCase());

// ritorna il carattere 'C'char c = saluto.charAt(0);

// verifica se le due stringhe sono ugualiString a = new String(“Ciao”);String b = new String(“Hello”);boolean uguali = a.equals(b);

// concatenazione tra stringheString c = new String(a+b);

Page 66: Java Uni Pavia.pdf

66Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

L'oggetto String

L'oggetto String è un oggetto un po' “particolare”. Per tutti gli oggetti, infatti, la creazione si effettua attraverso l'operatore new (come visto finora). Un oggetto String può essere creato anche nel seguente modo:String s = “Pippo”;che equivale a String s = new String(“Pippo”);

Consiglio: abituatevi a scriverlo nel secondo modo.

Page 67: Java Uni Pavia.pdf

67Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

L'oggetto String

Una stringa può contenere anche caratteri speciali:

\\ per visualizzare \\n per visualizzare una new line\t per i tab

Page 68: Java Uni Pavia.pdf

68Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

L'oggetto String

Un qualsiasi oggetto, e quindi anche un oggetto di classe String, può, come abbiamo visto nella funzione equals, può essere passato come parametro all'interno di una funzione (come avviene con i tipi primitivi) ma può anche essere ritornato da un metodo. Ad esempio il metodo substring ritorna una stringa, sottostringa di quella passata come parametro:

String s = new String(“Pippo”);String ss = s.substring(0,2);// o equiventementeString ss = new String(s.substring(0,2));

Page 69: Java Uni Pavia.pdf

69Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

L'oggetto String

Altre funzioni sull'oggetto String:

String s = new String(“mia stringa”);

s.length(); // lunghezza di s

s.charAt(2); // terzo carattere

s.substring(2, 5); // ritorna 5 caratteri a partire dal secondo

s.compareTo(altra_stringa); // confronta le due stringhe

Page 70: Java Uni Pavia.pdf

70Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

L'oggetto String

Altre funzioni sull'oggetto String:

String s = new String(“mia stringa”);

s.trim(); // elimina gli spazi

s.replace(vecchia, nuova); // sostituisce ogni occorenza di vecchia con nuova

s.toUpperCase();s.toLowerCase();

Page 71: Java Uni Pavia.pdf

71Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

L'oggetto String

Conversione intero – stringa e stinga – intero

int i = 5;String s = Integer.toString(i);System.out.print(s + 5); // visualizza 55;

String s = new String(“5”);int i = Integer.parseInt(s);System.out.print(i + 5); // visualizza 10

Page 72: Java Uni Pavia.pdf

72Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esercizi

1. Scrivere la procedura:public int[] contaLettereAlfabeto(String fraseMoltoLunga);

in cui la variabile fraseMoltoLunga contiene una stringa abbastanza lunga (ad esempio i primi 10 versi della Divina Commedia) e ritorna un array di 26 elementi. L'i­esimo elemento dell'array contiene il numero di volte in cui la i­esima lettera dell'alfabeto figura nella stringa. Es:“nel mezzo del cammin di nostra vita....”array[0] = 3; // perchè 3 sono le occorrenze del carattere Aarray[1] = 0; // perchè non ci sono occorrenze del carattere barray[2] = 1; //perchè c'è una sola lettera c...array[25] = 2; // perchè 2 sono le occorrenze della letterea z

Page 73: Java Uni Pavia.pdf

73Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esercizi

5. public static String intToBinary(int n)// esempio: intToBinary(123) ritorna “1111011”

6. public static int numeroVocali(String s)// esempio: numeroVocali(“pippo”) ritorna 2

7. public static String inverti(String s)// esempio: inverti(“pippo”) ritorna “oppip”

8*. public static String cifrCesare(String s, int k)// esempio: cifrCesare(“abc”, 3) ritorna “def”;// per semplificare si considerino solo i testi minuscoli

Page 74: Java Uni Pavia.pdf

74Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Gli array e l'inputGli array e l'input

- capitolo 4 -

Page 75: Java Uni Pavia.pdf

75Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Array

Un array è un blocco di memoria che contiene valori dello stesso tipo (es tutti intero, tutte stringhe, ecc)Ogni locazione contiene un “elemento”

1.39

1.69

1.74

0.0

Un array di doubles

Page 76: Java Uni Pavia.pdf

76Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Array

Un array fisicamente è una sola variabile anche se contiene diversi elementi. Ogni elemento dell'array viene acceduto attraverso un indice. In informatica gli indici iniziano sempre da zero.

c[0] c[1] c[2] c[3]

1.39

1.69

1.74

0.0 c è il nome

dell'array

Page 77: Java Uni Pavia.pdf

77Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Array

Notate che se un array aventi N elementi, gli indici vanno da 0 a n-1

c[0] c[1] c[2] c[3]

1.39

1.69

1.74

0.0 c è il nome

dell'array

Page 78: Java Uni Pavia.pdf

78Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Array

In Java, quando si crea un array è necessario specificare a priori la dimensione di questo array. Questa dimensione NON può essere modificata successivamente.

Se si tenta di accedere a una locazione dell'array inesistente viene generato un'eccezione.

Page 79: Java Uni Pavia.pdf

79Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Array

Definizione di un array in Java:

Type[] nomeArray = new Type[dimensione];

es.

int[] nomeArray = new int[25];

Page 80: Java Uni Pavia.pdf

80Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Array

Perchè sono necessari gli array?

Supponiamo di avere 1000 variabili di tipo intere e vogliamo calcolare la somma. Scriviamo il codice sia con gli array che senza

int sum = 0; int n = 1000;int p = new int[n];

sum = sum + var0001; int sum = 0;... for (int k=0; k<n; k=k+1) sum = sum + var1000; somma = somma+p[i];

totale 1001 righe totale 5 righe

Page 81: Java Uni Pavia.pdf

81Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Gli array

Un array può essere visto come un oggetto e come tale possiede alcune proprietà. Quella più utilizzata è la proprietà lenght (non è un metodo), che restituisce il numero di elementi di cui si compone l'array:

int a[] = new int[100];System.out.print(a.lenght);

Si fa notare come l'elemento passato al metodo main è un array di Stringhe:

public static void main(String args[])

Page 82: Java Uni Pavia.pdf

82Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Array

Un array, come un qualsiasi altro tipo primitivo, può essere ritornato da un metodo. Es:

public static int[] mioMetodo(int a[]){

int nuovoarray[] = new int[a.length];....return nuovoarray;

}

Page 83: Java Uni Pavia.pdf

83Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esempio 10

// Dichiarazione di array:int arr1[] = new int[100];String arr2[] = new String[25];

//accesso all'arrayarr1[0] = 101;arr1[1] = 202;arr2[0] = new String(“Pippo”);arr2[1] = new String(“Pluto”);arr3[2] = new String(“Paperino”);

Page 84: Java Uni Pavia.pdf

84Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esempio 11

// Riempire un array di 100 elementi con i primi // 100 numeri interi

final int MAX = 100;int array[] = new int[MAX];for (int i = 0; i < MAX ; ++i)

array[i] = i;

Page 85: Java Uni Pavia.pdf

85Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Input di dati

Si è visto come con una semplice procedura è possibile visualizzare a video il valore delle variabili:System.out.print(“Messaggio”);Purtroppo però l'input in Java è una operazione abbastanza complessa in quanto bisogna utilizzare parecchie classi che sarebbe troppo prematuro vedere. Risulta pertanto più semplice utilizzare una finestra di input:

JOptionPane.showInputDialog(“messaggio”);

Page 86: Java Uni Pavia.pdf

86Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esempio 12

Import javax.swing.*;

String nome = JOptionPane.showInputDialog(“Il tuo nome”);

System.out.println(“Il tuo nome: “ + nome);

String anni = jOptionPane.showInputDialog(“età”);

int age = Integer.parseInt(anni);

System.exit(0);

Page 87: Java Uni Pavia.pdf

87Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esercizi per casa

1. Utilizzando il ciclo for creare un programma che calcola il fattoriale di n

2. Creare un array di 10 elementi, inizializzarlo (dando valori a casuali). Scrivere il metodo

public static void print(int array[]);che prende l'array e ne visualizza gli elementi

3. Creare un array di 10 elementi, inizializzarlo (dando valori a casuali). Scrivere il metodo

public static int[] swap(int a[]);che prende l'array a e crea un nuovo array b contente gli stessi elementi di a scritti in ordine inverso

Page 88: Java Uni Pavia.pdf

88Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esercizi

9*. public static boolean isSorted(int n[])// ritorna true se n[] è ordinato

10. public static int minimo(int n[])// ritorna l'elemento minimo dell'array

11. public static int media(int n[])// ritorna la media

12. public static int[] reverse(int a[])inverte l'ordine degli elementi dell'array

Page 89: Java Uni Pavia.pdf

89Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esercizi

13. public static int[] concatena(int a[], int b[])// ritorna un array contenente gli elementi di a e di b

14. public static int[] tally(String s)// ritorna un array contenente il numero di occorrenze// dei 26 caratteri dell'alfabeto presenti in s// per semplicità si trasformi s in minuscolo// NB: ricordarsi di gestire gli spazi e i caratteri

speciali

Page 90: Java Uni Pavia.pdf

90Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Le classiLe classi

- capitolo 5 -

Page 91: Java Uni Pavia.pdf

91Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Terminologia

Classe: schema dettagliato in base al quale l'oggetto verrà creato, definisce le caratteristiche dell'oggetto che appartiene alla classe

Oggetto: istanza della classe, l'oggetto possiede la stessa struttura della classe. Rapprenta l'entità attiva

Campi: proprietà dell'istanza. L'insieme di tutti i campi rappresenta lo stato dell'oggetto

Metodi: azioni che l'oggetto può compiere. I metodi variano lo stato dell'oggetto.

Page 92: Java Uni Pavia.pdf

92Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Terminologia

Classe: macchina Oggetto: ferrari

Attributes: String model Color color int numPassengers double amountOfGas

Attributes: model = "Mustang" color = Color.YELLOW numPassengers = 0 amountOfGas = 16.5

Page 93: Java Uni Pavia.pdf

93Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Terminologia

Incapsulamento: i campi di un oggetto sono accessibili SOLO all'oggetto stesso e non da altri oggetti (sia istanza della stessa classe che istanze di classi diverse). Attraverso l'incapsulamento, l'oggetto diventa una “scatola nera” e per interagire con l'oggetto si devono usare solo i metodi che l'oggetto mette a disposizione

Ereditarietà: una classe può ereditare e successivamente estendere le proprietà e i metodi di una classe “padre”

Page 94: Java Uni Pavia.pdf

94Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Terminologia

Event-driven: Il programma simula la gestione asincrona degli eventi. Alcuni metodi possono essere invocati automaticamente in risposta ad alcuni eventi.

Costruttori: metodi interni alla classe che consentono la creazione dell'oggetto. Devono essere sempre presenti e quando mancano viene utilizzato il costruttore di default. Il costruttore ha lo stesso nome della classe e viene invocato con new

Page 95: Java Uni Pavia.pdf

95Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esempio 13

GragorianCalendar compleanno;compleanno = new GregorianCalendar();// l'operatore new consente di invocare il // costruttore della classe Date. In questo modo// si possono utilizzare i metodi della classe// Date

GregorianCalendar oggi;// Non è stato creato alcun oggetto (nella RAM// non è stato allocato alcuno spazio, per cui// non si possono utilizzare i metodi di Date)

compleanno

oggi

GregorianCalendar

Page 96: Java Uni Pavia.pdf

96Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Costruzione di classi

Fino a questo momento abbiamo utilizzato delle classi già esistenti. Java fornisce un set di costrutti che consentono allo sviluppatore di realizzare nuove classi. La forma più semplice per la definizione di una classe è:class nomeClasse{

attributo1attributoN

costruttore1costruttoreN

metodo1metodoN

}

Page 97: Java Uni Pavia.pdf

97Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esempio 14

import java.util.GregorianCalendar;Class Impiegato{

private String nome;private String cognome;private String matricola;private GregorianCalendar dataAssunzione;

// CostruttoreImpiegato(String n, String c, String m){

nome = n;cognome = c;matricola = m;

}[...]

Page 98: Java Uni Pavia.pdf

98Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esempio 14

[...]public String getNominativo(){

return nome + “ “ + cognome;}

public void setAssunzione(int g, int m, int a){

dataAssunzione = new GregoriaCalendar(a,m,g);}

public GregorianCalendar(){

return dataAssunzione;}

}

Page 99: Java Uni Pavia.pdf

99Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esempio 14

class esempio14{

public static void main(String args[]){

Impiegato i = new Impiegato(“Mario”, “Rossi”, “A”);Impiegato i2 = new Impiegato(“Luca”,“Bianchi”,“B”);Impiegato i3 = new Impiegato(“Alice”,“Verdi”,“C”);

i.setAssunzione(25, 8, 2009);

System.out.print(i2.getNominativo());}

}

Page 100: Java Uni Pavia.pdf

100Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Osservazioni

- Sono state create DUE classi: la prima (Impiegati) contiene solo la definizione della classe, ovvero gli attributi della classe, i costruttori e i metodi per accedere agli attributi; nella seconda invece si creano gli oggetti di classe Impiegati;- I metodi della classe Impiegati sono pubblici, gli attributi invece privati- Nella classe impiegati è stato definito un costruttore (potrebbe essere omesso)- Nella classe impiegati non possono esserci due metodi aventi la stessa “firma”- Il nome del file della classe Impiegati DEVE essere Impiegati.java- Import della classe GregorianCalendar;

Page 101: Java Uni Pavia.pdf

101Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esercizi

15. Creare una classe Impiegato in grado di memorizzare il nome, il cognome, la data di nascita (giorno, mese e anno) e lo stipendio annuo (double) di un generico dipendente. Creare almeno un metodo costruttore e i relativi metodi di set e di get degli attributi (i quali dovranno essere privati). Creare anche un metodo public void bonus(double aumento) che aggiunge allo stipendio annuo del dipendente, il bonus passato come parametro. Scrivere quindi un metodo main con il quale viene creato un array di 5 impiegati. Iterare quindi un ciclo in modo da aumentare, a ognuno dei dipendenti, il proprio stipendio del 5%. Infine stampare il nome, il cognome e lo stipendio annuo di ciascuno dipendente, ciascuno su una riga.

Page 102: Java Uni Pavia.pdf

102Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Metodi privati

Come abbiamo visto, in una classe gli attributi sono definiti privati, mentre i metodi pubblici. In alcuni casi, però potrebbe essere necessario definire dei metodi accessibili solo all'interno della classe stessa (e quindi non dall'esterno). In questo caso il metodo può essere definito privato:

private String mioMetodo(int d){

...}

Page 103: Java Uni Pavia.pdf

103Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Attributi e metodi static

Un campo (attributo) si dice statico se tutte le istanze di una specifica classe (in cui si definisce il campo statico) condividono lo stesso campo. Di conseguenza, un valore settato in un campo statico, è visibile a tutte le istanze di una classe.Lo scope degli attributi è su tutta la classe.Un campo statico si definisce con static:

private static int contatore;

Page 104: Java Uni Pavia.pdf

104Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Attributi e metodi static

Un campo si dice statico se tutte le istanze di una specifica classe (in cui si definisce il campo statico) condividono lo stesso campo. Di conseguenza, un valore settato in un campo statico, è visibile a tutte le istanze di una classe. Un campo statico si definisce con static:

private static int contatore;

Un attributo statico che non varia nel tempo (final) è una costante private final static double PI = 3.1415;

Page 105: Java Uni Pavia.pdf

105Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Attributi e metodi static

Anche un metodo può essere definito static. Un metodo statico può essere invocato anche senza dover istanziare l'oggetto.

public static int numeroDipendenti(){

...}

Si ricorda che il metodo main è un metodo statico. Un metodo statico può solo accedere ai campi statici di una classe

Page 106: Java Uni Pavia.pdf

106Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Attributi e metodi static

La classe Math fornisce moltissimi metodi statici, che possono, di conseguenza, essere utilizzati senza dover istanziare l'oggetto Math per invocarne i suoi metodi:

double d = Math.random();double p = Math.sqrt(256);

Page 107: Java Uni Pavia.pdf

107Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esempio 15

class Impiegato{

[...]// campo visibile a tutte le istanze// di Impiegatoprivate static int contatore = 0;

// costruttoreImpiegato([...]){ ++contatore; }

public static int getContatore(){

return contatore;}

}

Page 108: Java Uni Pavia.pdf

108Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esempio 15

class Esempio15{

public static void main(String args[]){

Impiegato a = new Impiegato([...]);Impiegato b = new Impiegato([...]);Impiegato c = new Impiegato([...]);

System.out.print(Impiegato.getContatore);// Non sto utilizzando l'istanza, ma la// classe. Viene visualizzato 3

}

Page 109: Java Uni Pavia.pdf

109Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esercizi

16. Creare una classe CdMusicali in grado di memorizzare informazioni sui CD: artista e titolo del CD. Ogni CD deve essere identificato univocamente, cioè ogni CD deve avere un proprio id (numerico) e tutti i CD devono condividere il successivo numero libero (se ho già creato 4 CD il numero successivo deve essere 5). Costruire i relativi metodi di get e di set. NON costruire il metodo set dell'attributo ID. NON costruire né il metodo SET né il GET del successivo numero libero ma creare un metodo statico che ritorna il numero successivo libero. Infine creare un metodo main che crea 7 CD. Ogni qualvolta viene creato un CD, come id viene assegnato il successivo numero libero, e quest'ultimo deve essere incrementato di 1. Assegnare nome dell'artista e titolo a piacere. Quindi visualizzare i 7 CD.

Page 110: Java Uni Pavia.pdf

110Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Overload di metodi

In Java è possibile definire una classe contenente più volte un metodo con lo stesso nome ma parametri differenti. Questo viene definito overload (sovraccarico) del metodo.

public class foo{

public void metodo(){ ... }

public void metodo(int par){ ... }

}

Page 111: Java Uni Pavia.pdf

111Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Costruttori

Talvolta si ha necessità di inizializzare gli attributi di una classe ad alcuni valori di default. Il costruttore di una classe serve proprio a definire i valori che dovranno essere assegnati agli attributi della classe. Un costruttore può anche non essere definito, ma non è una buona tecnica di programmazione. Tuttavia, anche per i costruttori è possibile eseguire l'overload, in questo modo una classe può avere diversi metodi costruttori (ognuno di loro avrà una firma differente).

Page 112: Java Uni Pavia.pdf

112Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Costruttori

1. Una classe può avere più di un costruttore2. I costruttori devono avere il nome della classe3. Sono sempre di tipo public4. Non ritornano alcun tipo5. Possono prendere parametri6. Se ci sono più costruttori, i parametri devono essere differenti;7. Se non si definisce alcun costruttore, Java ne fornisce uno di default.8. Un costruttore viene invocato con l'operatore new

Page 113: Java Uni Pavia.pdf

113Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esempio 16

class Esempio16{

int param;String val;

public Esempio16(int a, String s){

param = a; s = val;}

public Esempio(int a){

this(a, “”);}

}

Page 114: Java Uni Pavia.pdf

114Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esempio 16/bis

class Esempio16Bis{

public static void main(String args[]){

String s;// s vale nulls = new String(“pippo”);// s viene inizializzato e in questo momento// viene allocata la memoria

}}

Page 115: Java Uni Pavia.pdf

115Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esercizi

17. Creare una classe Employe composta da tre attributi: un id (di tipo intero), nome (di tipo Stringa) e salario (di tipo intero). Definire quindi un primo metodo costruttore che inizializza solo il nome e un secondo metodo costruttore che inizializza sia il nome che il salario. Nel primo metodo costruttore (quello che inizializza solo il nome), il salario dell'impiegato dovrà essere inizializzato a “-1”. L'attributo id dovrà essere un attributo statico e dovrà essere incrementato ogni qualvolta viene creato un nuovo oggetto istanza della classe Employe. Per cui i metodi costruttori dovranno prevedere opportunamente l'incremento. Creare un metodo toString() che non prende nessun parametro e ritorna una stringa contenente il nome seguito da “:” seguito dal salario. Successivamente creare una seconda classe, chiamata e17, che contiene il metodo main dentro al quale viene definito un array di 5 elementi contenente 5 oggetti Employe (inserire nome e salario casuali), quindi visualizzare l'array.

Page 116: Java Uni Pavia.pdf

116Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Package

Un package rappresenta un pacchetto di classi. Queste possono essere utilizzare all'interno di una qualsiasi altra classe, purchè si specifica il nome del package. Ad esempio, la classe Date, fa parte del package java.util, per cui questo pacchetto dovrà essere importato nella nostra classe attraverso la direttiva import:

import java.util.*;class miaClasse{

...}

Page 117: Java Uni Pavia.pdf

117Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Package

Esistono centinaia di package, quelli che seguono sono alcuni, quelli che verosimilmente vi troverete ad utilizzare nel prosieguo della vostra attività di programmatori java:

java.applet (applet per il web)java.awt (Abstract Window Toolkit)javax.swing (GUI)java.net (comunicazione in rete)java.text (formattazione di testi)java.math (funzioni matematiche)java.lang (package importato di default)

Page 118: Java Uni Pavia.pdf

118Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Incapsulamento

Gli attributi di una classe possono essere tipi primitivi, oppure oggetti istanza di una classe. Gli attributi dovrebbero essere sempre privati. Da una classe B deve essere possibile accedere agli attributi della classe A solo attraverso i metodi pubblici. Questo viene definito incapsulamento. Ad esempio, la classe Impiegati, tra i suoi attributi, può avere un oggetto di classe GregorianCalendar.In questo caso questo oggetto è incapsulato dentro la classe Impiegati.

Page 119: Java Uni Pavia.pdf

119Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Incapsulamento

Affinchè l'incapsulamento possa essere realizzato, è necessario che gli attributi siano privati. L'accesso agli attributi avviene attraverso i metodi pubblici di tipo get e set.

Page 120: Java Uni Pavia.pdf

120Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Incapsulamento

public class MyClass {

// Private fields: private <sometype> myField; ...

// Constructors: public MyClass (...) { ... } ... // Public methods: public <sometype> myMethod (...) { ... } ... // Private methods: private <sometype> myMethod (...) { ... } ... }

Public interface: public constructors and methods

Page 121: Java Uni Pavia.pdf

121Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Ereditarietà e Ereditarietà e PolimorfismoPolimorfismo

- capitolo 6 -

Page 122: Java Uni Pavia.pdf

122Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Ereditarietà

Supponiamo di aver già creato una classe chiamata Impiegato, composta dai campi nominativo e stipendio. Se consideriamo i dirigenti, anch'essi sono sotto alcuni aspetti molto simili agli impiegati (hanno un nome e prendono uno stipendio). Ma possiedono qualcosa di più, ad esempio un bonus in caso di raggiungimento degli obiettivi. Attraverso l'ereditarietà è possibile creare una classe Manager che eredità tutte le funzionalità della classe Impiegati e definisce quelle nuove.Class Manager extends Impiegati{

...}

Page 123: Java Uni Pavia.pdf

123Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Ereditarietà

La classe Impiegati viene definita superclasse (o classe base, o classe genitore). La classe Manager viene definita sottoclasse (o classe derivata, o classe figlia).Le sottoclassi possiedono pertanto maggiori funzionalità delle superclassi.Tutti i metodi e gli attributi definiti nella superclasse vengono ereditati nella sottoclasse. NON vale il viceversa. È possibile nella sottoclasse ridefinire (override) un metodo della superclasse. All'interno della sottoclasse è possibile invocare un metodo della superclasse attraverso la parola chiave super.

Page 124: Java Uni Pavia.pdf

124Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esempio 17class Impiegato{

int stipendio;String nominativo;

public Impigato(int s, String n){

stipendio = s;nominativo = n;

}

public int getStipendio(){ return stipendio; }

public String getNominativo(){ return nominativo; }

}

Page 125: Java Uni Pavia.pdf

125Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esempio 17

class Manager extends Impiegato{

int bonus;

public Manager(int s, String n, int b){

super(s, n);bonus = b;

}

public int getStipendio(){

// return stipendio + bonus; // ERROREreturn super.getStipendio() + bonus;

}}

Page 126: Java Uni Pavia.pdf

126Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esempio 17

class Esempio17{

public static void main(String arg[]){

Impiegato i = new Impiegato(25000, “pippo”);Manager m = new Manager(35000, “pluto”, 15000);

System.out.print(i.getNominativo() + “ “);System.out.println(i.getStipendio());// ritorna 25000System.out.print(m.getNominativo() + “ “);System.out.println(m.getStipendio());// ritorna 50000

}

Page 127: Java Uni Pavia.pdf

127Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Polimorfismo

Continuiamo con l'esempio di prima: Impiegati e Manager. Abbiamo detto che la classe Manager estende la classe Impiegato. Questo significa che un oggetto istanza della classe Manager è anche istanza della classe Impiegato (anche nella vita pratica un manager è pur sempre un impiegato). Il fatto che un oggetto può essere istanza di due classi differenti viene definito polimorfismo. L'esempio seguente chiarirà i dubbi:

Page 128: Java Uni Pavia.pdf

128Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esempio 18class Esempio18{

public static void main(String arg[]){

Impiegato dip[] = new Impiegato[4];

dip[0] = new Impiegato(“Carl”, 15000);dip[1] = new Manager(“Tom”, 35000, 12000);dip[2] = new Impiegato(“Bob”, 22000);dip[3] = new Manager(“Harry”, 29000, 15000);

for (int i = 0; i < 4; ++i){

System.out.print(dip[i].getNominativo()+ “ “);System.out.println(dip[i].getSalario());

}}

Page 129: Java Uni Pavia.pdf

129Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Polimorfismo

Nell'istruzione seguenteSystem.out.println(dip[i].getSalario());

la VM invoca dinamicamente il metodo getSalario a seconda di chi sia dip[i], cioè a seconda che dip[i] sia istanza di Impiegato o sia istanza di Manager. La selezione automatica del metodo appropriato durante l'esecuzione viene chiamata binding dinamico

Page 130: Java Uni Pavia.pdf

130Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Classi e metodi final

Talvolta si può aver necessità di impedire che una classe venga ereditata. Cioè se A è una classe di tipo final, non è possibile creare B che estende A. In questo caso, in fase di compilazione verrà generato l'errore. La stessa cosa, accade con i metodi final. Es:class A{

public final int test(){ ... }

}

Class B extend A{ // B non può definire il metodo test. }

Page 131: Java Uni Pavia.pdf

131Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Classi Astratte

Una classe si dice astratta quando contiene uno o più metodi astratti. Un metodo è astratto quando tale medoto viene solo definito e non implementato. Spetta alla classe che estende la classe astratta implementare i metodi astratti. Una classe astratta non può mai essere istanziata, cioè NON è possibile creare un oggetto istanza di una classe astratta.

ClasseAstratta a = new ClasseAstratta(); // impossibile

Page 132: Java Uni Pavia.pdf

132Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esempio 19

Nell'esempio che segue creeremo una classe Person astratta, nella quale viene definito ma non implementato il metodo getDescrizione, quindi creeremo altre due classi (Impiegato e Studente) che ereditano la classe Person e quindi implementano il metodo astratto.

Page 133: Java Uni Pavia.pdf

133Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esempio 19

abstract class Person{

private String name;

public Person(String n){ name = n; }

public abstract String getDescription();

public String getName(){ return name; }

}

Metodo astratto non definito

Page 134: Java Uni Pavia.pdf

134Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esempio 19

class Impiegato extends Person{

private double stipendio;

public Impiegato(String n, double s){ super(n); stipendio = s; }

public double getStipendio(){ return stipendio; }

public String getDescrizione(){ return “L'impiegato “ + super.getNome() +

“ guadagna “ + stipendio + “ euro”;}

}

Page 135: Java Uni Pavia.pdf

135Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esempio 19

class Studente extends Person{

private String facolta;

public Studente(String n, String f){ super(n); facolta = f; }

public double getFacolta(){ return facolta; }

public String getDescrizione(){ return “Lo studente “ + super.getNome() +

“ è iscritto alla facoltà di “ + facolta;}

}

Page 136: Java Uni Pavia.pdf

136Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esempio 19

class Esempio19{

public static void main(String args[]){

Person people[] = new Person[2];people[0] = new People(“Pippo”); //ERRORE// non si può istanziare una classe astrattapeople[0] = new Impiegato(“Pluto”, 15000);people[1] = new Studente(“Paperino”, “lettere”);

for (int i = 0; i < people.length; i++){

Person p = people[i];System.out.println(p.getDescrizione());

}}

Notare: è stato creato un array di due elementi

Page 137: Java Uni Pavia.pdf

137Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Attributi protected e public

Nel metodo getDescrizione della classe Impiegato, per visualizzare il nome del dipendente utilizza il metodo “getNome()”. Perchè non può utilizzare l'attributo “nome”? L'attributo nome è un attributo della classe Person (superclasse), essendo privato, diventa inaccessibile alle sottoclassi. Come fare per renderlo accessibile? Si può definire l'attributo come protected. Un attributo protected è un attributo che può essere acceduto SOLO dalla sottoclassi. Un attributo può anche essere public e in questo caso è accessibile a tutti. Se non viene definito nulla è visibile a livello di package.

Page 138: Java Uni Pavia.pdf

138Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Attributi protected e public

IMPORTANTE: per privilegiare l'incapsulamento dei dati è necessario che gli attributi siano sembre privati e i metodi pubblici.

Page 139: Java Uni Pavia.pdf

139Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Suggerimenti

Quando si scrivono i programmi e si vuole utilizzare l'ereditarietà, tenete presente questi suggerimenti:1. Inserire le operazioni e i metodi comuni nella superclasse;2. Non utilizzare campi protected;3. Utilizzare l'ereditarietà solo se tutti i metodi ereditati hanno senso;

Page 140: Java Uni Pavia.pdf

140Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

L'operatore instanceof

Alcune volte può essere necessario individuare la natura (intesa come classe) di un oggetto. L'operatore instanzeof può essere utilizzato a tale scopo:

Person p[] = new Person[2];p[0] = new Impiegato(...);p[1] = new Dirigente(...);

for (int i = 0; i < p.length; ++i){

if (p[1] instanceof Impiegato)...

else ....}

Page 141: Java Uni Pavia.pdf

141Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Object: la superclasse cosmica

Ogni qualvolta creiamo una classe, anche se questa NON estende alcuna classe, in realtà, estende implicitamente una superclasse: Object.La classe Object definisce alcune metodi “amministrativi”, ovvero di gestione della classe. È per questo che quando, attraverso l'operatore “.” in Eclipse, vedete l'elenco dei metodi di un oggetto, vi appaiono metodi che voi non avete mai definito nella classe.

Page 142: Java Uni Pavia.pdf

142Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Object: la superclasse cosmica

Quali sono i metodi che vengono forniti dalla classe Object?equals() : verifica se due oggetti ugualigetClass(): ritorna il nome della classe di cui l'oggetto è istanza

Potrebbe essere necessario eseguire una sovrascrittura di questi metodi

Page 143: Java Uni Pavia.pdf

143Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Metodo equals()

Impiegato a = new Impiegato(“pippo”, 15000);Impiegato b = new Impiegato(“pippo”, 15000);

if (a == b) system.out.print(“identici”);else system.out.print(“differenti”);

Cosa verrà stampato a video?

Sebbene i due oggetti contengano le stesse informazioni, l'operatore di uguaglianza verifica solo se l'indirizzo di memoria è uguale. Per cui, essendo due oggetti separati, avranno differente indirizzo di memoria e quindi differenti [...]

Page 144: Java Uni Pavia.pdf

144Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Metodo equals()

Quando si devono confrontare due oggetti, è necessario ricorrere al metodo equals(). Poiché ogni classe estende di default la classe Object, possiede già un metodo equals il quale però verifica SOLO se il contenuto nella cella di memoria è identico per cui, riferendoci all'esempio di prima, l'istruzione

if (a.equals(b)) system.out.print(“identici”);else system.out.print(“differenti”);

visualizzerà sempre la parola differenti. Bisogna quindi sovrascrivere il metodo equals() nel modo seguente:

Page 145: Java Uni Pavia.pdf

145Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Metodo equals()

public boolean equals(Impiegato i){

if (this.getNome().equals(i.getNome)) && this.getStipendio() == i.getStipendio()) return true;return false;}

Page 146: Java Uni Pavia.pdf

146Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Metodo getClass()

Il metodo getClass della classe Object ritorna un oggetto Class che rappresenta la classe di cui l'oggetto è istanza:

Impiegato i = new Impiegato(...);Class c = i.getClass();System.out.print(c.getName());

viene visualizzato il nome della classe dell'oggetto i.

Page 147: Java Uni Pavia.pdf

147Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

InterfacceInterfacce

- capitolo 7 -

Page 148: Java Uni Pavia.pdf

148Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Ereditarietà multipla

Alcuni linguaggi di programmazione (ad esempio il C++) consentono ad una classe di ereditare metodi e attributi da più superclassi (ereditarietà multipla). In Java non esiste un concetto analogo: una classe può ereditare metodi e attributi da una sola superclasse. Una classe in Java però può implementare una o più interfaccia. Una interfaccia è una classe in cui i metodi non sono definiti. Una classe che implementa una interfaccia (o più interfacce) deve necessariamente implementare TUTTI i metodi delle interfacce. Di conseguenza una interfaccia non può essere istanziata.

Page 149: Java Uni Pavia.pdf

149Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Interfacce

DanceFloor

DanceGroup

ControlPanel

Band

Dancer

Aerobics

Waltz

Rumba

Cha-Cha-Cha

Salsa

Dance

Interface

Page 150: Java Uni Pavia.pdf

150Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esempio 20

public interface Dance{

public int getTempo();public getBeat(int i);

}

public class Waltzer implements Dance{

public int getTempo(){return 750; }

...}

Page 151: Java Uni Pavia.pdf

151Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Interfacce fornite dal jdk

Le librerie di Java forniscono, tra le altre cose, un set di interfacce che possono essere utilizzare per creare delle classi che implementano i metodi definiti nelle interfacce. Tra queste prendiamo in esame l'interfaccia Cloneable. Per prima cosa definiamo il concetto di clonazione:

Page 152: Java Uni Pavia.pdf

152Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Metodo clone()

Supponiamo di avere il seguente codice:

Impiegato a = new Impiegato(“pippo”, 15000);Impiegato b = a;

a.setNome(“pluto”);

System.out.print(b.getNome());

Cosa verrà visualizzato a video?

Page 153: Java Uni Pavia.pdf

153Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Metodo clone()

IMPIEGATO

Nome = “pippo

salario = 15000

a

b

Page 154: Java Uni Pavia.pdf

154Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Metodo clone()

Quando si devono creare cloni di un oggetto è opportuno creare un metodo clone che esegue la clonazione. Supponiamo di aver definito tale metodo per la classe Impiegato, si avrà che:

Impiegato a = new Impiegato(“pippo”, 15000);Impiegato b = (Impiegato) a.clone();

a.setStipendio(25000);

System.out.print(b.getStipendio());

Page 155: Java Uni Pavia.pdf

155Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Metodo clone()

IMPIEGATO

Nome = “pippo

salario = 15000

a

b

IMPIEGATO

Nome = “pippo

salario = 15000

IMPIEGATO

Nome = “pippo

salario = 15000

IMPIEGATO

Nome = “pippo

salario = 15000

Page 156: Java Uni Pavia.pdf

156Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Metodo clone()

Per creare il metodo clone, è opportuno che la classe Impiegati implementa l'interfaccia Cloneable. Questa interfaccia definisce (ma non implementa) il metodo clone che verrà definito nella classe Impiegati:

class Impiegati implements Cloneable{

...

public Object clone(){

[ vedi pagina seguente ]}

}

Page 157: Java Uni Pavia.pdf

157Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Metodo clone()

...

public Object clone(){

Impiegato i = new Impiegato(this.getNome(), stipendio);return i;

}

...

Page 158: Java Uni Pavia.pdf

158Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Metodo clone()

Problema: cosa succede quando si clona un oggetto che possiede, tra i suoi attributi, degli altri oggetti (incapsulamento)?

Supponiamo che la classe Impiegati abbia, tra i suoi attributi, un attributo istanza della classe GregorianCalendar (data assunzione):

Impiegati a = new Impiegati(“pippo”, “21/06/2004”);Impiegati b = (Impiegato) a.clone();a.setDataAssunzione(“22/06/2004”);

quale sarà la data di assunzione di b?

Page 159: Java Uni Pavia.pdf

159Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Metodo clone()

IMPIEGATO

Nome = “pippo

salario = 15000

a

b

IMPIEGATONome = “pippo

salario = 15000

assun =

IMPIEGATO

Nome = “pippo

salario = 15000

IMPIEGATONome = “pippo

salario = 15000

assun =

GregorianCalendar

Page 160: Java Uni Pavia.pdf

160Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Metodo clone()

In questi casi è necessario dover clonare anche gli oggetti incapsulati:

public Object clone(){

Impiegato i = new Impiegato(this.getNome(), stipendio);i.setDataAssuzione(dataAssunzione.clone());return i;

}

Page 161: Java Uni Pavia.pdf

161Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

EccezioniEccezioni

- capitolo 8 -

Page 162: Java Uni Pavia.pdf

162Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Classificazione

Una eccezione è un errore che si manifesta durante l'esecuzione di un programma. Esistono due macroaree di eccezioni:

- RuntimeException (cast difettoso, accesso ad array fuori dai limiti, puntatore nullo);- IOException (lettura di un file vuoto, apertura URL errato);

Bisogna cercare di intercettare qeuste eccezioni e agire di conseguenza.

Page 163: Java Uni Pavia.pdf

163Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Lancio di eccezioni

I metodi possono lanciare eccezioni, ma è necessario definire il tipo di eccezione lanciata:

public String readLine() throws IOException

In questo esempio, la funzione readLine ritorna una stringa ma può anche generare una eccezione di tipo IOException

All'interno della procedura, l'eccezione viene lanciata con la parola chiave throw

Vedi esempio seguente:

Page 164: Java Uni Pavia.pdf

164Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia

Esempio 21

public interface interfaccia1{

public void metodo1();}

public interface interfaccia2{

public void metodo2();}

public class miaClasse implements interfaccia1, interfaccia2{

// la classe DEVE implementare i metodi delle due interf.}

Page 165: Java Uni Pavia.pdf

165Luigi Santangelo – Biennio formativo 2009-2010 – Università degli Studi di Pavia