Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio...

54
Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola [email protected] Gianpaolo Cugola 2 Sgomberiamo il campo dai dubbi Cosa non è Java: – Non è un linguaggio per “animare” il WWW – Non è una versione ridotta del C++ – Non è lo strumento che segnerà la fine di Microsoft Cosa è Java – Un moderno linguaggio di programmazione OO… – Orientato alla programmazione di applicazioni “network-centric”

Transcript of Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio...

Page 1: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 1

Il linguaggio Java

Gianpaolo Cugola

[email protected]

Gianpaolo Cugola 2

Sgomberiamo il campo dai dubbi

• Cosa non è Java:– Non è un linguaggio per “animare” il WWW

– Non è una versione ridotta del C++

– Non è lo strumento che segnerà la fine di Microsoft

• Cosa è Java– Un moderno linguaggio di programmazione OO…

– Orientato alla programmazione di applicazioni “network-centric”

Page 2: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 3

Perché Java

• Il problema:– L’inadeguatezza dello schema di sviluppo tradizionale

(binary distribution) in ambienti distribuiti e multi-piattaforma

• La soluzione:– Java, un linguaggio O.O. per lo sviluppo di

applicazioni “architecture independent” , robuste, adattabili , scalabili ed eff icienti

Gianpaolo Cugola 4

Java: caratteristiche generali - 1

• Familiare:– La sintassi di Java ricalca la sintassi del C++

– Un programmatore C++ non incontra grosse diff icoltà ad imparare il li nguaggio Java

• Semplice:– Programmare usando Java è molto più semplice di

programmare usando altri linguaggi OO (C++) • Un buon programmatore Java è più produttivo di un buon

programmatore C++

Page 3: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 5

Java: caratteristiche generali - 2

• Object-oriented:– Java è un linguaggio OO “puro” con ereditarietà, binding

dinamico ed oggetti gestiti tramite riferimenti

– Il costrutto delle “ interfaces” fornisce le potenzialità dell’ereditarietà multipla senza alcun problema di duplicazione di codice

• Portabile:– La specifica del linguaggio non contiene componenti

“ implementation dependent”

Gianpaolo Cugola 6

Java: caratteristiche generali - 3

• Architecture neutral:– L’applicazione viene compilata in un linguaggio intermedio

(Java ByteCode) che viene interpretato

– L’interprete nasconde le caratteristiche peculiari dell’hardwaree del sistema operativo

– Lo stesso codice “oggetto” può essere eseguito su tutte le piattaforme per le quali venga fornito un interprete Java (attualmenteSolaris, WindowsNT/ 95, MacOS, OS/ 2, AIX, eLinux)

Page 4: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 7

Java: caratteristiche generali - 4

• Dinamico:– Le fasi di loading e linking avvengono arun-time

• Robusto:– Java è un linguaggio fortemente tipizzato con numerose

caratteristiche che diminuiscono la possibili tà di introdurre errori nelle applicazioni, tra le quali:

• assenza di puntatori

• abbondanza di controlli run-time (rispetto dei limiti degli array, controlli di tipo, controlli sul codice caricato dinamicamente,ecc.)

• gestione automatica della memoria (garbage collecting)

Gianpaolo Cugola 8

Java: caratteristiche generali - 5

• Multi-threaded:– Java supporta la gestione dei “ thread” a livello di linguaggio,

oltre che di macchina virtuale, fornendo la possibili tà di creare facilmente applicazioni concorrenti

Page 5: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 9

L’ambiente Java

Java Source

Java Compiler

Java ByteCode

Byte Code movesthrough network

or file system

Byte codeLoader

Byte codeVerifier

Interpreter

Run time

Machine CodeGenerator (JIT)

Hardware/OS

Gianpaolo Cugola 10

Java - il primo programma

fil e: HelloWorld.java

public class HelloWorld {

public static void main ( String args []){

System .out. println (“ Hello world !”);

}

}

Page 6: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 11

Compilazione ed esecuzione

c: \ classes >ja vac HelloW or ld . java

c: \ classes >ja va HelloWo rl d

HelloWorld !

c: \ classes >

Gianpaolo Cugola 12

La struttura di un programma Java -nozioni preliminari

• Un programma Java è organizzato come un insieme di classi

• Classi diverse possono essere raggruppate all’interno della stessa “Compilation unit”

• I l programma principale è rappresentato da un metodo speciale della classe il cui nome coincide con il nome del programma

Page 7: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 13

Java - il primo programma grafico

File: HelloWorldWindow.java

i mpor t j ava. awt . * ;

package ex ample s,

c l ass H ell oWorl dWi ndow {

publ i c st at ic v oid ma i n( St r i ng ar gs[ ] ) {

Fr ame f =new Fr ame(" Hel lo Wor ld Wi ndow" );

f . add( new Label ( " Hel l oWor l d!" , Label . CENTER) , " Cent er " ) ;

f . pack ( ) ;

f . setV i si bl e( t ru e) ;

}

}

Gianpaolo Cugola 14

Compiliazione ed esecuzione

c: \ classes >cd examples

c: \ classes \ examples >javac HelloWorldWindow . java

c: \ classes \ examples >cd ..

c: \ classes >java examples . Hel loWor l dWindow

c: \ classes >

Page 8: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 15

La struttura di un programma Java

• Package– Ogni packagecontiene una o più compilation unit

– Il package introduce un nuovo ambito di visibilità dei nomi

• Compilation unit– Ogni compilation unit contiene una o più classi o interfaccie

delle quali una sola pubblica

• Classi e interfaccie

• Relazioni con il filesystem– package⇔ directory

– compilation unit ⇔ file

Gianpaolo Cugola 16

Il linguaggio Java in dettaglio

• Costrutti per la programmazione “ in the small”– Il type system di Java

• Tipi predefiniti e relative costanti ed operatori

• Tipi definiti dall’utente

– Dichiarazione di variabili

– Istruzioni per il controllo di flusso

• Costrutti per la programmazione “ in the large”– Classi

– Interfaccie

– Packages

Page 9: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 17

I commenti in Java

/ / qu est o è u n commento c he t er mina co n l a f i ne de l l a l i nea

/ * qu est o è u n commento c he può

spazi ar e s u pi ù l i nee * /

Gianpaolo Cugola 18

Identificatori

• Gli identificatori (nomi di classi, variabili, attributi, metodi ecc.) sono sequenze alfanumeriche che: – Devono iniziare con una lettera o con il carattere '_'

– Il resto dell’identificatorepuò contenere sia lettere che numeri, o il carattere '_'

– Non devono coincidere con una delle parole riservate

• EsempiOk: HelloWorld helloWorld h ello _world __prova _ _PROVA prova1

prova1a prova2

Errati: 2prova +prova prova + hello - world hello ? pr ova - 1

• Java è “case sensitive”

Page 10: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 19

Le costanti

• Costanti intere:123 256789L 0xff34d 0xcafebabeL 03477 07352367L

• Costanti reali:123.75 0.12375e+3 1.0E - 5 123.75f 123.75F 123.75D

12375.0e - 2f

• Costanti boolean:true false

• Costanti carattere:’a’ ’%’ ’ \ t’ ’ \ n’ ’ \ \ ’ ’ \ ’’ ’ \ 123’

• Costanti di tipo stringa:”prova” ”prova \ n” ”prova( \ ” aaa \ ” )”

Gianpaolo Cugola 20

Il tipe system di Java

• Java è un linguaggio fortemente tipizzato

• Distinguiamo tra:– tipi primitivi

– tipi “ riferimento”

Page 11: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 21

I tipi primitivi

• Tipi numerici:– byte : 8 bit– short : 16 bit– int : 32 bit– long : 64 bit– float : 32 bit, secondo specifica IEEE754– double : 64 bit, secondo specifica IEEE754

• Altri tipi:– boolean : trueo false– char : 16 bit, carattereUnicode

Gianpaolo Cugola 22

Operatori per i tipi numerici - 1

• Operatori unari– operatori “di segno”

+x - x

– incremento e decremento (prefissi e/ o postfissi)++x -- x x++ x --

– operatore di complemento binario (valido per soli tipi “ interi” ): ~x

Page 12: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 23

Operatori per i tipi numerici - 2

• Operatori binari– validi per tutti i tipi numerici

x+y x - y x*y x/y x%y

– validi per i soli tipi “ interi”x<<y x>>y x>>>y x&y x|y x^y

• Operatori di confrontox==y x!=y x<y x>y x <=y x>=y

Gianpaolo Cugola 24

Operatori per il tipo boolean

• Operatoreunario– negazione logica: !x

• Operatori binari– operatori standard

x&y x|y x^y

– operatori con semantica condizionalex&&y x||y

– operatori di confrontox==y x!=y

Page 13: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 25

Operatori per il tipo char

• Operatori di confrontox==y x!=y x<y x> y x<=y x>=y

Gianpaolo Cugola 26

Gli operatori di auto assegnamento

• E` possibile usare l’operatore:x ?= y

al posto di un qualsiasi operatore ? che sia lecito utili zzare nell’espressione:x=x?y

• Tale espressione equivale alla precedente x?=y

• Esempi:x+=5 equivale a x=x+5

x*= 2 equivale a x=x*2

Page 14: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 27

Altri operatori

• Operatore condizionale– si applica a tutti i tipi

<condizione> ? <valore1> : <valor e2>

• L’assegnamento come operatorex=y=3 (y=3) ==3

• L’operatore di concatenazione tra stringhe– si applica a tutti i tipi

” pippo ”+2 ” pippo ”+2.54

Gianpaolo Cugola 28

I tipi riferimento

• Tipi array

• Tipi definiti dall’utente

Page 15: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 29

Tipo array

• Dato un tipo T (predefinito o definito dall’utente) un array di T è definito come:T[]

• Similmente sono dichiarati gli array multidimensionali:T[][] T[][] [ ] …

• Esempi:int [] float [ ] [] Pers ona[]

Gianpaolo Cugola 30

Tipi definiti dall’utente

• Classi

• Interfaccie

... i dettagli nel seguito

Page 16: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 31

Dichiarazione e inizializzazione di variabili

• Dichiarazioneint i;

int i,j;

Persona p;

float f1,f2;

double d;

• Inizializzazioneint i=0;

int i=0, j=4;

Persona p= new Persona();

float f1=1.23f, f2=127.2f;

double d=1.23;

Gianpaolo Cugola 32

Dichiarazione e inizializzazione di variabili: gli array

• Dichiarazione:int [] ai1, ai2;

float [] af1;

double ad[];

Persona[][] ap;

• Inizializzazione:int [] ai={1,2,3};

double [][] ad={{1.2, 2.5}, { 1.0, 1.5}}

Page 17: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 33

Dichiarazione di array ed allocazione di memoria

• La dichiarazione di un array non alloca spazio per gli elementi dell’array

• L’allocazione si realizza dinamicamente tramite l’operatorenewi nt [] i =new i nt [ 10], j ;

f l oat [ ] [ ] f =new f l oat [1 0] [ 10];

Per sona[ ] p=new Pers ona[ 30] ;

j =new i nt [ 30] ;

che alloca però solo lo spazio per l’array, non per i suoi elementi (tranne nel caso di tipi predefiniti).

Gianpaolo Cugola 34

Istruzioni per il controllo del flusso

• Sequenza di istruzioni

• Blocco di istruzioni

• Istruzione condizionale

• Cicli– Ciclo con uscita all’inizio

– Ciclo con uscita alla fine

– Ciclo con uscita in mezzo

– Ciclo con contatore

• Istruzione switch

Page 18: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 35

Sequenza e blocco

• Una sequenza di istruzioni è composta da una serie di istruzioni separate dal carattere ‘;’

a=3; b=4; c=a*b+3;

• Un blocco di istruzioni è composto da una sequenza di istruzioni racchiuse da parentesi graffe

{a=1; b=3; c=a+128;}

– Un blocco di istruzioni èequivalente ad una singola istruzione

Gianpaolo Cugola 36

Istruzione condizionale

• Permette la scelta tra due diversi percorsi del flusso di controllo

• Sintassiif (<condizione>) < istruz .1>

[else < istruz .2>]

• Il ramo else si lega all’istruzione if più vicina

Page 19: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 37

Istruzione condizionale: esempi

• Esempio 1:i f ( x==5) Syst em. out. pri nt l n( “ x va l e 5” );

Syste m. out . pr in t l n(“ f at t o! ”) ;

• Esempio 2:i f ( x>0 & & y>0) Syste m.o ut . pr i nt ln ( “ x ed y posi t i vi ” ) ;

el se i f ( x>0) Syst em. out . pr in t l n(“ x p os i t i vo ” ) ;

el se i f ( y>0) Syst em. out . pr in t l n(“ y p os i t i vo ” ) ;

el se Syste m. out . pr in t ln ( “ nessuno dei due po si t i v i” );

Syste m. out . pr in t l n(“ f at t o! ”) ;

Gianpaolo Cugola 38

Istruzione condizionale: esercizio

• Si scriva un programma che legge un intero su riga di comando corrispondente ad un mese e restituisce il numero di giorni in quel mese– Si faccia uso dell’istruzione:

Integer . parseInt (< string >)

che restituisce un intero a partire da una stringa

Page 20: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 39

Ciclo con condizione all’inizio

• Sintassi:while (<condiz i one>) <i struzi one> ;

• Esempioint r=5;

while (r>0) {

System .out. println (“ HelloWo r ld !”) ;

r -- ;

}

Gianpaolo Cugola 40

Ciclo con condizione all’inizio: esercizio

• Si scriva un programma per il calcolo del fattoriale

• Si scriva un programma che legge un intero da riga di comando e stampa a video un “ triangolo” formato da ‘*’ con base di lunghezza pari all’intero letto– Si osservi che l’istruzione:

System .out. print (< string >)

stampa la stringa passata come parametro senza andare a capo

Page 21: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 41

Ciclo con condizione alla fine

• Sintassi:do <istruzion e> while ( <condi zione>)

• Esempio:int r=5;

do {

System .out. println (" Hello World ! " );

r -- ;

} while (r>0);

Gianpaolo Cugola 42

Ciclo con condizione alla fine: esercizio

• Si scriva un programma che esegue il prodotto tra due numeri secondo l’algoritmo delle somme ripetute. Si faccia uso del ciclo con condizione alla fine

Page 22: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 43

Ciclo con condizione in mezzo

• E` possibile uscire da un ciclo tramite l’istruzione break

– Sfruttando questo fatto è possibile creare cicli con condizione di terminazione in mezzo

• Esempio:java .io. FileInputStream s=new FileInputStream (“a”);

while ( true ) {

b=s. read ();

if (b==0) break;

System .out. println (b);

}

Gianpaolo Cugola 44

Ciclo con condizione in mezzo: esercizio

• Si scriva un programma che legge un file byte a byte salvando il contenuto in un array di 500 byte. I l programma deve terminare quando la fine del file è stata raggiunta o quando si sono letti 500 byte– Si osservi che l’istruzione:

s. read ()

applicata ad un File I nputStrea m s restituisce -1 quando si è raggiunta la fine del file.

Page 23: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 45

Ciclo con contatore

• Sintassi:for (<istr1>; < condiz >; <ist r 2>) < i str3>

• Equivalente a:<istr1>;

while (< condiz >) {

<istr3>

<istr2>

}

Gianpaolo Cugola 46

Ciclo con contatore: esempi

• Esempio 1:i nt r ;

f or (r =0; r <5; r ++)

Sys t em.o ut . pr i nt ln ( “ Hel l oWor l d! ” ) ;

• Esempio 1 bis:f or ( i nt r= 0; r< 5; r+ +)

Sys t em.o ut . pr i nt ln ( “ Hel l oWor l d! ” ) ;

• Esempio 2:f or ( i nt r= 0; r< 10; r +=2)

Sys t em.o ut . pr i nt ln ( “r =” +r) ;

Page 24: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 47

Ciclo con contatore: esercizio

• Si scriva un programma che stampa a video le tabelline (da 1 a 10). Si faccia uso del ciclo con contatore

Gianpaolo Cugola 48

Ancora sull’istruzione break

• Sintassi completa di un istruzione break :– break [< label >]

• Significato:– restituisce il controllo all’istruzione che include quella con il break e che è

marcata con l’identificatore specificato

• Esempio:ciclo1 : while ( true ) {

ciclo2 : while ( true ) {

leggi(x);

if (x==1) break ciclo1;

else break ciclo2;

}

}

Page 25: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 49

Istruzione switch

• Sintassi:switch (<espressione>) {

case < espr _cost _1> : [< is t r _1>; ] *

case < espr _cost _2> : [< is t r _2>; ] *

...

case < espr _cost _n> : [< is t r _n>; ] *

[ default : [< istr >;]* ]

}

• L’espressione all’interno dello swit ch deve essere di tipo char , byte , short , o int

Gianpaolo Cugola 50

Istruzione switch : esempio

publi c c la ss Pr ova {

sta t i c publ ic void ma i n( St r i ng[ ] arg s) {

i nt x=I nt eger . par se I nt ( ar gs[0 ] ) ;

swi t ch( x) {

case 1 :

case 2 :

case 3 : Syst em. out . pri nt l n( “ x pa r i a 1, 2 o 3” ) ;

br eak;

case 4 : Syst em. out . pri nt l n( “ x pa r i a 4” );

br eak;

defa ul t : Syste m.o ut . pr i nt ln ( “ x di vers o d a 1, 2, 3 o 4 ” ) ;

}

}

}

Page 26: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 51

Istruzione switch : esercizio

• Si scriva un programma che legge un intero su riga di comando corrispondente ad un mese e restituisce il numero di giorni in quel mese. Si usi l’istruzione switch

Gianpaolo Cugola 52

Conversioni automatiche di tipo

• Promozionibyte - > short, int , long, float , double

short - > int , long, float , double

int - > long, float , double

long - > float or double

float - > double

char - > int , long, float , double

Page 27: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 53

Conversioni forzate: casting

• È possibile forzare una conversione di tipo attraverso l’operatore di casting:(<tipo>)<espressione>

• Tra tipi semplici sono consentite le seguenti conversioni (con perdita di informazione)short - > byt e, char

char - > byt e, s hor t

i nt - > byt e, s hor t , char

l ong - > byt e, s hor t , char , i nt

f l oat - > byt e, s hor t , char , i nt , l ong

doubl e - > byt e, s hor t , char , i nt , l ong, f lo at

byt e - > char

Gianpaolo Cugola 54

I costrutti OO per la programmazione “in the large”

• Classi

• Interfaccie

• Ereditarietà

• Polimorfismo e binding dinamico

• Packages

Page 28: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 55

Definizione di una nuova classe

• Una nuova classe viene definita nel seguente modo:class <nome classe> {

<lista di definizioni di attributi e metodi>

}

• Esempio:class Automobile {

...

}

Gianpaolo Cugola 56

Definizione di attributi

• Gli attributi di una classe definiscono la struttura dello stato degli oggetti che vi appartengono

• Ogni attributo è definito usando la stessa sintassi usata per la definizione delle variabili l ocali

• Esempioclass Automobile {

String colore, marca, modello;

int cilindrata, numPorte ;

boolean accesa;

}

Page 29: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 57

Definizione di metodi

• I metodi di una classe definiscono il comportamento degli oggetti che vi appartengono

• Ogni metodo è definito come segue:<tipo val . rit .> <nome.>([<dic. par. formali>])

<corpo>

• I l tipo void viene utili zzato per metodi che non ritornano alcun valore

Gianpaolo Cugola 58

Definizione di metodi: esempio

class Automobile {

String colore, marca, modello;

int cilindrata, numPorte ;

boolean accesa;

void accendi() {accesa= true ;}

boolean puoPartire () { return accesa;}

void dipingi( String col) {colore=col;}

void trasforma( String ma, String mo ) {

marca=ma;

modello= mo;

}

}

Page 30: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 59

Visibilità dei nomi

• I nomi degli attributi e dei metodi sono visibili all’interno di tutta la classe

• Le variabili dichiarate in un blocco sono visibili solo all’interno del blocco

• Le variabili l ocali ad un metodo (o i parametri formali) possono mascherare gli attributi

• Le variabili dichiarate all’interno di un blocco possono mascherare le variabili dichiarate all’interno di blocchi più esterni

Gianpaolo Cugola 60

Oggetti

• Ogni variabile il cui tipo sia una classe (o un interfaccia) contiene un riferimento ad un oggetto

• Nuovi oggetti sono costruiti usando l’operatore new

• Esempio:Automobile a= new Automobile ( );

• Ad una variabile di tipo riferimento può essere assegnato il riferimento null

Page 31: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 61

Accesso ad attributi e metodi di un oggetto

• L’accesso ad attributi e metodi di un oggetto per il quale si abbia un riferimento si effettua tramite la “notazione punto”

• Esempio:Automobile a= new Automobile();

a.accendi();

a.dipingi(“Blu”);

System .out. println (“ Num. porte: “+a. numPorte );

Gianpaolo Cugola 62

Accesso ad attributi e metodi di un oggetto da metodi dello stesso oggetto

• Nella definizione di un metodo ci si riferisce ad attributi e metodi dell’oggetto sul quale il metodo sia stato invocato direttamente(senza notazione punto)

• Esempiocl ass Auto mobil e {

. . .

bool ean puoPar t i re ( ) { r etu r n accesa; }

voi d dip i ngi( St r in g col ) { col or e=col ;}

. . .

}

• La pseudo-variabile this contiene un riferimento all’oggetto corrente e può essere utilizzata per aggirare eventuali mascheramenti

Page 32: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 63

La pseudo-variabile this : esempio

class Automobile {

String colore, marca, modello;

int cilindrata, numPorte ;

boolean accesa;

void accendi() {accesa= true ;}

boolean puoPartire () { return accesa;}

void dipingi( String col) { this .colore=col;}

void trasforma( String marca, String modello) {

this .marca=marca;

this .modello=modello;

}

}

Gianpaolo Cugola 64

Classi: esercizio

• Si definisca l’insieme di classi necessarie per descrivere un computer (Monitor, Tastiera, Mouse, Case, Scheda)

Page 33: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 65

Passaggio parametri

• I parametri il cui tipo sia uno dei tipi semplici sono passati per copia

• I parametri il cui tipo sia un tipo riferimento (classi, interfacce e array) sono passati per copia del riferimento– ovvero, gli oggetti sono passati per riferimento

Gianpaolo Cugola 66

Overloading

• All’interno di una stessa classe possono esservi più metodi con lo stesso nome purché si distinguano per numero e/ o tipo dei parametri– Il tipo del valore di ritorno non basta a distinguere due metodi

• Esempio:class C {

int f() {...}

int f( int x) {...} // corretto

void f( int x) {...} // errato

}

Page 34: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 67

Creazione e distruzione di oggetti

• La creazione di un oggetto comporta due operazioni:– l’allocazione della memoria necessaria a contenere l’oggetto e

– l’inizializzazione dello spazio allocato

Quest’ultima operazione è svolta dal costruttore

• A differenza del C++ in Java non è necessario deallocare esplicitamente gli oggetti creati con una operazione new. Di ciò si occupa il garbage collector

Gianpaolo Cugola 68

Costruttori

• Nella definizione di una classe è possibile specificare uno o più costruttori

• I l costruttore è un metodo particolare che ha lo stesso nome della classe– Nel caso ci siano più costruttori, essi si distinguono perché

differiscono per numero e/ o tipo dei parametri

– Per i costruttori non viene indicato il tipo del risultato (è implicito nel nome del costruttore)

• I l costruttore di default (senza parametri) viene fornito dal compilatore a meno che non si definiscano altri costruttori

Page 35: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 69

Costruttori: esempio

class Automobile {

String colore, marca, mod ello;

int cilindrata, numPorte ;

boolean accesa;

Automobile() {

colore=marca=modello= nul l ;

cilindrata= numPorte =0;

}

Automobile( String colore, String marca, Strin g modello) {

this .colore=colore; thi s .marca=marca;

this .modello=modello;

}

void accendi() {accesa= tr ue;}

boolean puoPartire () { ret urn accesa;}

void dipingi( String col) { this .colore=col;}

}

Gianpaolo Cugola 70

Ancora sui costruttori

• È possibile invocare un costruttore dall’interno di un altro tramite la notazione:this (<elenco di parametri a t tuali >);

• Esempio:cl ass Pers ona {

Str i ng nome;

i nt e t a;

Per sona( St r in g nome) { t his . nome=nome; eta =0;}

Per sona( St r in g nome, i nt et a) {

t hi s(n ome); t his . et a=eta ;

}

}

Page 36: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 71

Classi e costruttori: esercizio

• Esercizio 1:– Si costruisca una classe che implementa uno stack di interi di

dimensione fissa (stabili ta in fase di costruzione)

• Esercizio 2:– Si modifichi la classe precedente (introducendone altre se

necessario) per implementare uno stack di dimensione variabile (allocazione dinamica di memoria)

• Esercizio 3:– Si usi la classe precedente per realizzare un programma che

legge un file byte a byte e lo inverte

Gianpaolo Cugola 72

Metodi e attributi di classe

• Sintassi:static <definizione dell’attributo o metodo>

• Un attributo di classe è condiviso da tutti gli oggetti della classe

• Si può accedere ad un attributo di classe senza bisogno di creare un oggetto tramite la notazione:

<nome classe>.<nome attributo>

• Un metodo di classe può essere invocato senza bisogno di creare un oggetto tramite la notazione:<nome classe>.<nome metodo>(<par. attuali>)

Page 37: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 73

Metodi e attributi di classe: vincoli

• Un metodo static può accedere ai soli attributi e metodi static

• Un metodo convenzionale può accedere liberamente a metodi ed attributi sta t ic

Gianpaolo Cugola 74

Metodi e attributi di classe: esempio

cl ass S hape {

sta t i c Scr een s cre en=new Scr een( ) ; / / s i not i l’ i ni z.

s ta t i c voi d set Scr een( Scre en s) { scr een=s; }

voi d show( Scr een s) { set Scr een( s) ; . . . }

}

. . .

Shape. setS cr een( new Scr een() ) ; // c orr et to

Shape. show( ) ; / / e rr ato , s how è un met odo nor mal e

Shape s1=newShape( ), s2 =new Shape( ) ;

Scr een s =new Scr een( );

s1. se t Scre en( s) ; // co r r ett o, si p oss ono chi amare

/ / met odi st at ic su oggett i

/ / in q ues t o pu nt o s2.s cr een==s1. scr een==s

Page 38: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 75

Attributi costanti

• È possibile definire attributi costanti tramite la notazione:final <definizione di attributo>=<valore>

• Esempiocl ass Auto mobil e {

i nt colo r e;

f in al in t BLU=0, GI ALLO=1, . . .;

voi d dip i ngi( i nt colo r e) { t hi s. col or e=col or e; }

}

. . .

Aut omobi le a =new Aut omobi l e( );

a. BLU=128; / / er r at o

Syste m. out . pr in t l n(“ BLU=“ +a. BLU); / / cor r et t o

Gianpaolo Cugola 76

Esercizio

• È corretto affermare che tramite attributi e metodi di classe e attributi costanti è possibile definire funzioni, variabili e costanti globali?

Page 39: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 77

La gerarchia di ereditarietà

• Le classi di un sistema OO sono legate in una gerarchia di ereditarietà

• Data una classe C, una sottoclasse di C si definisce tramite la notazione:class K extends C {

<definiz . di attr . e metodi>

}

• La sottoclasse eredita tutti gli attributi ed i metodi della sopraclasse

• Java supporta solo ereditarietà semplice

Gianpaolo Cugola 78

La classe Object

• In mancanza di una differente indicazione, una classe Java estende la classe Object

• La classe Object fornisce alcuni metodi tra i quali vale la pena citare i seguenti:public boolea n equals ( Object ) ;

protected voi d finaliz e();

public String toString ( );

Page 40: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 79

Overriding

• Una sottoclasse può aggiungere nuovi attributi e metodi ma anche ...

• ridefinire i metodi delle sue sopraclassi

• Esempio:cl ass A uto mobil eEl et t ri ca ex t ends Auto mobil e {

bool ean bat te r i eCar ic he;

voi d r ic ar i ca ( ) { batt er i eCar i che=t ru e; }

voi d acc endi( ) {

i f ( bat t er ie Car ic he) a ccesa=tr ue;

el se accesa=f als e;

}

}

Gianpaolo Cugola 80

La pseudo variabile super

• All’interno di un metodo che ridefinisce un metodo della sopraclasse diretta ci si può riferire al metodo che si sta ridefinendo tramite la notazione:super.<nome metodo>(<lista par. a t tuali>)

• Esempio:cl ass A uto mobil eEl et t ri ca ex t ends Auto mobil e {

. . .

voi d acc endi( ) {

i f ( bat t er ie Car ic he) s uper . acc endi( );

el se Syst em. out. pri nt l n( “ Batt er i e scari che” ) ;

}

}

Page 41: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 81

Ereditarietà e costruttori

• I costruttori non vengono ereditati

• All’interno di un costruttore è possibile richiamare il costruttore della sopraclasse tramite la notazione:super(<lista di par. attuali>)

posta come prima istruzione del costruttore

• Se il programmatore non chiama esplicitamente un costruttore della sopraclasse, il compilatore inserisce automaticamente il codice che invoca il costruttore di default della sopraclasse

Gianpaolo Cugola 82

Ereditarietà: esercizio

• Si definisca una classe Persona e due sottoclassi Uomoe Donna. La classe Personadeve avere un metodo chiSei () che stampa il nome della persona. Nelle sottoclassi tale metodo deve essere ridefinito perché stampi anche il sesso

Page 42: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 83

Information hiding in Java

• Attributi e metodi di una classe possono essere:– pubblic

• sono visibili a tutti

• vengono ereditati

– protected

• sono visibili solo alle sottoclassi

• vengono ereditati

– private

• sono visibili solo all’interno della stessa classe

• non sono visibili nelle sottoclassi

Gianpaolo Cugola 84

Information hiding: esempio

cl ass Auto mobil e {pri vat e St r in g col ore , m ar ca, modell o;pri vat e i nt ci l i ndr at a, numPort e;pri vat e boole an accesa;publ i c Aut omobi l e( ) {

col ore =marc a=modell o=nul l ;ci l i ndr at a=numPor te =0;

}publ i c Aut omobi l e( Str i ng col , St r i ng ma, St r i ng mo)

{ col or e=col ; m ar ca=ma; modell o=mo; }publ i c voi d accendi () { acc esa=t r ue; }publ i c bool ean p uoPar t i r e( ) { re t ur n accesa; }publ i c voi d di pi ngi ( St r i ng col) { col or e=col ;}

}

Page 43: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 85

Information hiding: esercizio

• Si modifichi l’esercizio precedente introducendo le dichiarazioni di visibilità per i membri delle classi

Gianpaolo Cugola 86

Classi e metodi astratti

• Un metodo astratto è un metodo per il quale non viene specificata alcuna implementazione

• Una classe è astratta se contiene almeno un metodo astratto

• Non è possibile creare istanze di una classe astratta

• Le classi astratte sono molto utili per introdurre della astrazioni di alto livello

Page 44: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 87

Classi e metodi astratti: esempio

abstract class Shape {

static Screen screen;

Shape(Screen s) {screen=s;}

abstract void show();

}

class Circle extends Shape {

void show() {

...

}

}

...

Shape s=new Shape (); // errato

Circle c=new Circle (); // corretto

Gianpaolo Cugola 88

Classi astratte: esercizio

• Nell’esercizio precedente si introduca una classe astratta OggettoConNome , sopraclasse di Persona

Page 45: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 89

Classi e metodi final

• Se vogliamo impedire che sia possibile creare sottoclassi di una certa classe la definiremo final

• Esempio:f i nal c l ass C { . . . }

c l ass C1 ext ends C / / er r at o

• Similmente, se vogliamo impedire l’overriding di un metodo dobbiamo definirlo final

• Esempio:cl ass C { f i nal v oid f( ) { .. . } }

c l ass C1 ext ends C {

voi d f () { . .. } / / err at o

}

Gianpaolo Cugola 90

Ereditarietà ed array

• Se X è una sopraclassedi Y alloral’array X[] è “sopra-array” dell’array Y[]– Lo stesso vale per gli array multidimensionali

• Tale scelta non è type safe

• Esempio:void f(X[] ax ) {

ax [0]= new X();

}

...

f( new Y[10]);

Page 46: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 91

I limiti dell’ereditarietà semplice

• L’ereditarietà semplice non permette la descrizione di numerose situazioni reali

• Esempio:– Supponiamo di avere una classe Giocattolo ed

una classe Automobile . In assenza di ereditarietà multipla non posso definire la classe AutomobileGio cattolo

Gianpaolo Cugola 92

I problemi dell’ereditarietà multipla

• In presenza di ereditarietà multipla è possibile ereditare due o più metodi con la stessa “signature” da più sopraclassi. Ciò determina un conflitto tra implementazioni diverse

C1

f (int i) : int

C2

f (int i) : int

C

C1 C2

C

K

f (int i) : int

Page 47: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 93

Ereditarietà semplice vs. ereditarietà multipla: la soluzione di Java

• Distinguere tra una gerarchia di ereditarietà (semplice) ed una gerarchia di implementazione (multipla) ...

• introducendo il costrutto delle interfacce

• In tal modo è possibile distinguere tra l’uso dell’ereditarietà al fine di riutili zzare il codice e l’uso al fine di descrivere una gerarchia di tipi

Gianpaolo Cugola 94

Interfacce

• Una interfaccia è una classe priva di attributi non costanti ed i cui metodi sono tutti pubblici ed astratti

• Sintassi:interface <nome> {

<lista di d efinizion e di m etodi privi di corp o>

}

Page 48: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 95

Interfacce ed ereditarietà

• Una interfaccia può ereditare da una o piùinterfacce

• Sintassi:interface <nome> extends <nome1>,..,< nomen> {...}

• La gerarchia di ereditarietà tra interfacce definisce una gerarchia di tipi

Gianpaolo Cugola 96

Interfacce: esercizio

• In che senso una interfaccia descrive un tipo meglio di una classe?

Page 49: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 97

La gerarchia di implementazione

• Una classe può implementare una o più interfacce– se la classe non è astratta deve fornire una

implementazione per tutti i metodi presenti nelle interfacce che implementa

– altrimenti la classe è astratta

• Sintassi:class <nome> implements <nome1>,..,< nomen> {...}

Gianpaolo Cugola 98

Polimorfismo

• Polimorfismo è la capacità per un elemento sintattico di riferirsi a elementi di diverso tipo

• In Java una variabile di un tipo riferimento T può riferirsi ad un qualsiasi oggetto il cui tipo sia T o un sottotipo di T

• Similmente un parametro formale di un tipo riferimento T può riferirsi a parametri attuali il cui tipo sia T o un sottotipo di T

Page 50: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 99

Polimorfismo: esempio

cl ass Auto mobil e { .. .}c l ass A uto mobil eEl et t ri ca ext ends Auto mobil e { . . . }c l ass Parc heggi o {

pri vat e Aut omobi le buf [ ];pri vat e i nt nAut o;publ i c Par cheggi o( i nt di m) { buf =new Aut omobi l e[d i m] ; }publ i c voi d aggi ungi( Aut omobi le a ) { buf [ nAut o++] =a; }

}. . .Aut omobi le a =new Aut omobi l eEl et tr i ca() ;Par cheggio p =new Par cheggi o( 100) ;p. aggi ungi ( new Aut omobi l eEle t t r ic a( ) ) ;

Gianpaolo Cugola 100

Polimorfismo ed interfacce

• Una interfaccia può essere utilizzata come tipo di una variabile

• Una siffatta variabile potrà riferirsi ad un qualsiasi oggetto che implementi l’interfaccia (polimorfismo)

• Esempio:i nt er f ace Ogget t oCheSpar a {

spar a( ) ;

}

c l ass Pi st ol a i mpl ement s O gget t oCheSpar a {. . . }

Ogget t oCheSpara o=new Pi st ol a( );

o. spar a( ) ;

Page 51: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 101

Polimorfismo: tipo statico e tipo dinamico

• In presenza di polimorfismo distinguiamo tra il tipo statico ed il tipo dinamico di una variabile (o di un parametro formale)– La regola del polimorfismo prima enunciata obbliga il

tipo dinamico ad essere un sottotipo (proprio o meno) del tipo dinamico

Gianpaolo Cugola 102

Polimorfismo e binding dinamico

• In Java, a fronte della invocazione x.f(x1,..., xn ) , l’implementazione scelta per il metodo f dipende dal tipo dinamico di x e non dal suo tipo statico

Page 52: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 103

Binding dinamico: esempio

class Persona {

private String nome;

public Persona( String nome) { this .nome=nome;}

public void chiSei () {

System .out. println (“Cia o, io sono “+nome);

}

}

class Uomo extends Persona {

public Uomo( String nome) { super(nome);}

public void chiSei ()

{super. chiSei (); System . out. println (“sono u n maschio”);}

}

...

Persona p= new Uomo(“Giovann i ”); p. chiSei ();

OUTPUT: Ciao, io sono Giov anni

sono un maschio

Gianpaolo Cugola 104

Polimorfismo e binding dinamico: esercizio

• Si costruisca uno stack di persone e lo si usi per conservarvi tanto uomini quanto donne. Al termine si verifichi l’effetto del binding dinamico richiamando il metodo chiSei () su tutti gli oggetti conservati

Page 53: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 105

Conversioni forzate tra tipi riferimento: casting

• È possibile forzare esplicitamente la conversione da un tipo riferimento T ad un sottotipo T1 purché:– Il tipo dinamico dell’espressione che convertiamo sia

un sottotipo di T1

• Esempio:Object o=new AutomobileElettrica ();

Automobile a=o; // errato, Object non è un

// sottotipo di Automobile

Automobile a=(Automobile) o; // corretto ( casting )

Gianpaolo Cugola 106

Casting: esercizio

• Si spieghi perché il casting è fondamentale per implementare contenitori generici (stack di Object ecc.)

Page 54: Il linguaggio Java - Politecnico di Milanohome.deib.polimi.it/cugola/pub/Java-1.pdfIl linguaggio Java Gianpaolo Cugola Gianpaolo Cugola 1 Il linguaggio Java Gianpaolo Cugola cugola@elet.polimi.it

I l linguaggio Java

Gianpaolo Cugola

Gianpaolo Cugola 107

Package ed information hiding

• Packagee visibilità degli attributi e dei metodi– Attributi e metodi di una classe C per i quali non sia dichiarato alcun tipo di

visibilità sono visibili solo all’interno di classi che appartengano allo stesso package di C

– Tale costrutto gioca un ruolo analogo alla dichiarazione di friendship in C++

• Packageed importazione di classi– Un packagecontiene un insieme di classi pubbliche ed un insieme di classi

private

– Solo le classi pubbliche si possono importare in altri package

• Packagee compilation unit– Ogni compilation unit contiene classi appartenenti allo stesso package

– Una compilation unit contiene una sola classe pubblica (per default la prima) ed eventualmente altre classi private

Gianpaolo Cugola 108

Il package java . lang

• Il package java . lang contiene classi di uso molto frequente (String , Object , ecc.)

• Non è necessario importare le classi appartenenti al package java . lang prima di utili zzarle