Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf ·...

54
Programmazione II Lezione 6 Daniele Sgandurra [email protected] 5/11/2010 1/54 Programmazione II Lezione 6 5/11/2010

Transcript of Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf ·...

Page 1: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Programmazione IILezione 6

Daniele Sgandurra

[email protected]

5/11/2010

1/54 Programmazione II Lezione 6 5/11/2010

Page 2: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Sommario

1 Nomi e AmbienteAmbiente

2 Esercizi

3 Esercitazione: EclipseEclipse

4 Java

2/54 Programmazione II Lezione 6 5/11/2010

Page 3: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Nomi e Ambiente

Parte I

Nomi e Ambiente

3/54 Programmazione II Lezione 6 5/11/2010

Page 4: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Nomi e Ambiente Ambiente

Blocco: Annidamento e Sovrapposizione

Spesso i blocchi sono annidabili:

la definizione di un blocco inclusa in quella di un altro:

in C: i blocchi associati a sottoprogrammi non possono essereannidati;in Pascal e Ada e possibile avere blocchi di sottoprogrammiall’interno di altri sottoprogrammi.

Mai sovrapponibili:

l’ultimo blocco aperto deve essere il primo a essere chiuso;vale pressoche per tutti i linguaggi che prevedono i blocchi.

4/54 Programmazione II Lezione 6 5/11/2010

Page 5: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Nomi e Ambiente Ambiente

Blocchi: Visibilita

Una dichiarazione locale a un blocco e visibile in un altro blocco se ilbinding creato dalla dichiarazione vale anche per l’ambiente del secondoblocco.

Dichiarazione locale a un blocco visibile nel blocco e in tutti i blocchi

annidati tranne ove compaia una nuova dichiarazione per quel nome:

in tal caso la nuova dichiarazione oscura la prima (buco di visibilita);osservazione: non c’e visibilita dall’esterno verso l’interno (bindinginterni non attivi).

Due blocchi allo stesso livello hanno visibilita separate.

5/54 Programmazione II Lezione 6 5/11/2010

Page 6: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Nomi e Ambiente Ambiente

Tipi d’Ambiente

Tipi d’Ambiente

L’ambiente associato a un blocco e composto da:

ambiente locale: costituito dal binding per nomi locali; per i blocchi diprocedure, l’ambiente locale contiene anche i binding per iparametri formali (come se fossero variabili dichiaratelocalmente);

ambiente non-locale: costituito dai binding per nomi visibili nel blocco ma nondichiarati localmente;

ambiente globale: costituito dai binding creati all’inizio dell’esecuzione delprogramma; nomi usabili in tutti i blocchi.

6/54 Programmazione II Lezione 6 5/11/2010

Page 7: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Nomi e Ambiente Ambiente

Tipi d’Ambiente: Esempio

1 A :{ i n t a = 1 ;23 B :{ i n t b = 2 ;4 i n t c = 2 ;56 C :{ i n t c = 3 ;7 i n t d ;8 d = a+b+c ;9 write ( d ) ;

10 }1112 D :{ i n t e ;13 e = a+b+c ;14 write ( e ) ;15 }16 }17 }

7/54 Programmazione II Lezione 6 5/11/2010

Page 8: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Nomi e Ambiente Ambiente

Tipi d’Ambiente: Esempio

A: blocco che introduce l’ambiente globale:

contiene il binding per a;

B: ambiente locale:

contiene due variabili locali b e c;eredita il binding per a dall’ambiente globale;C: ambiente locale annidato in quello di B:

contiene due variabili locali c (che nasconde l’altra) e d;eredita il binding per b dall’ambiente non-locale e a

dall’ambiente globale di A.

D: ambiente locale annidato in quello di B:

contiene la variabile locale e;eredita il binding per b, c dall’ambiente non-locale di B e a

dall’ambiente globale di A.

8/54 Programmazione II Lezione 6 5/11/2010

Page 9: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Nomi e Ambiente Ambiente

Operazioni sull’Ambiente

Entrata in un blocco:

create associazioni per i nomi locali;disattivate le associazioni per nomi con binding non localipreesistenti.

Uscita da un blocco:

distruzione delle associazioni per nomi locali;riattivate le associazioni per nomi oscurati.

9/54 Programmazione II Lezione 6 5/11/2010

Page 10: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Nomi e Ambiente Ambiente

Operazioni su Nomi e Ambiente

Creazione binding nome-oggetto (naming).

Distruzione binding nome-oggetto (unnaming)

Riferimento a oggetto mediante il nome (referencing).

Disattivazione binding nome-oggetto.

Riattivazione binding nome-oggetto

10/54 Programmazione II Lezione 6 5/11/2010

Page 11: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Nomi e Ambiente Ambiente

Operazioni su Oggetti Denotabili

Creazione: allocazione di memoria necessaria.

Accesso: nome → binding → locazione → valore:

le regole rendono l’associazione univoca.

Modifica: nome → binding → locazione:

e modifica del valore nella locazione.

Distruzione: deallocazione delle risorse.

11/54 Programmazione II Lezione 6 5/11/2010

Page 12: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Nomi e Ambiente Ambiente

Operazioni su Oggetti Denotabili

Creazione e binding spesso contemporanee:

es.: dichiarazioni di variabili (int x;).

Non vale sempre: lifetime(oggetto) <> lifetime(binding):

>: variabile passata per riferimento (parametro formale);<: riferimento “dangling”.

12/54 Programmazione II Lezione 6 5/11/2010

Page 13: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Nomi e Ambiente Ambiente

Scope (Visibilita)

La visibilita di un’associazione e il segmento di istruzioni per il quale essae visibile.

Gli ambienti possono cambiare in base alle operazioni definite sugli

ambienti:

ambienti non locali piu difficili da trattare.

13/54 Programmazione II Lezione 6 5/11/2010

Page 14: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Nomi e Ambiente Ambiente

Scope: Esempio

Quale valore viene stampato?

1 A :{ i n t x = 0 ;23 v o i d foo ( )4 {5 x = 1 ;6 }78 B :{ i n t x ;9 foo ( ) ;

10 }1112 write ( x ) ;13 }

14/54 Programmazione II Lezione 6 5/11/2010

Page 15: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Nomi e Ambiente Ambiente

Regole di visibilita

Determinano la validita dei binding nel passaggio da un ambiente

all’altro.

es.: “una dichiarazione locale a un blocco e visibile in esso e in tuttii blocchi annidati”.

Si possono intendere:

staticamente: sorgente;dinamicamente: esecuzione.

15/54 Programmazione II Lezione 6 5/11/2010

Page 16: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Nomi e Ambiente Ambiente

Scope Statico

Basato sulla struttura sintattica del sorgente: l’associazione e stabilita dalcompilatore. Regola dello scope statico (dello scope annidato piu vicino):

1 le dichiarazioni locali di un blocco definiscono l’ambiente locale (esclusequelle in blocchi annidati);

2 l’uso di un nome in un blocco comporta l’utilizzo del bindingdell’ambiente locale, se esiste; altrimenti risalire all’ambiente dei blocchicontenitori (un livello alla volta) fino a trovare un binding valido (ambitopiu esterno: parole predefinite del linguaggio); altrimenti, errore;

3 il nome di un blocco fa parte dell’ambiente locale del blocco contenitoreimmediatamente esterno al blocco (es., blocchi associati a procedure).

16/54 Programmazione II Lezione 6 5/11/2010

Page 17: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Nomi e Ambiente Ambiente

Scope Statico: Esempio

Quale valore viene stampato?

1 { i n t x = 0 ;23 v o i d incr ( i n t n )4 {5 x = n+1;6 }78 incr ( 3 ) ;9 write ( x ) ;

10 { i n t x = 0 ;11 incr ( 3 ) ;12 write ( x ) ;13 }14 write ( x ) ;15 }

17/54 Programmazione II Lezione 6 5/11/2010

Page 18: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Nomi e Ambiente Ambiente

Scope Statico

Vantaggi:

leggibilita e comprensibilita:

basta scorrere le dichiarazioni nel sorgente.

ottimizzazione:

il compilatore puo decidere (quasi) tutto.

usata dalla maggior parte dei linguaggi:

Algol, Pascal, C, C++, Ada, Java, Scheme, ...

Svantaggi:

relativamente complicata gestione a run-time;gerarchia degli ambienti non locali evolve diversamente dallagerarchia di attivazione dei blocchi.

18/54 Programmazione II Lezione 6 5/11/2010

Page 19: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Nomi e Ambiente Ambiente

Scope Dinamico

Basato sulle sequenze di chiamata delle unita di programma e non sucome appaiono nel sorgente.

Criterio temporale anziche spaziale.

Usata in alcuni dialetti di Lisp, APL, Snobol, Perl.

19/54 Programmazione II Lezione 6 5/11/2010

Page 20: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Nomi e Ambiente Ambiente

Scope Dinamico: Esempio

Quale valore viene stampato?

1 { c o n s t x = 0 ;23 v o i d stampa1 ( )4 {5 write ( x ) ;6 }78 v o i d stampa2 ( )9 {

10 c o n s t x = 1 ;11 stampa1 ( ) ;12 }1314 stampa2 ( ) ;15 }

20/54 Programmazione II Lezione 6 5/11/2010

Page 21: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Nomi e Ambiente Ambiente

Scope Dinamico: Regole di Visibilita

L’associazione per un nome non locale X in un punto P del programma e

la piu recente tra quelle create per X a essere attiva quando il flusso di

controllo raggiunge P:

implementata con ricerca nella pila dei blocchi di attivazione deiblocchi/sottoprogrammi che hanno fatto raggiungere P;per l’ambiente locale la regola e identica al caso dello scope statico.

21/54 Programmazione II Lezione 6 5/11/2010

Page 22: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Nomi e Ambiente Ambiente

Scope Dinamico: Esempio

Quale valore viene stampato?

1 { c o n s t x = 0 ;23 v o i d stampa1 ( )4 {5 write ( x ) ;6 }78 v o i d stampa2 ( )9 {

10 c o n s t x = 1 ;11 { c o n s t x = 2 ; }12 stampa1 ( ) ;13 }1415 stampa2 ( ) ;1617 }

22/54 Programmazione II Lezione 6 5/11/2010

Page 23: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Nomi e Ambiente Ambiente

Scope Dinamico

Vantaggi:

flessibilita:

stesso sottoprogramma si comporta diversamente a secondadel momento in cui viene invocato.

Svantaggi:

minor leggibilita e comprensibilita;

difficile ricostruire le dichiarazioni dal sorgente.

gestione a run-time inefficiente;poco usata nei linguaggi general-purpose.

23/54 Programmazione II Lezione 6 5/11/2010

Page 24: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Nomi e Ambiente Ambiente

Problemi di Scope

Dove possono essere introdotte le dichiarazioni?

Qual e l’esatta visibilita delle variabili locali:

regole restrittive in Pascal:

(i) dichiarazioni a inizio blocco e prima dell’uso;(ii) binding valevoli da inizio a fine blocco (possibili “buchi”);(iii) dichiarazioni prima dell’uso.

piu rilassate in C e Ada:

valevoli dalla dichiarazione a fine blocco;eccezioni (alla iii) per i tipi ricorsivi (es. liste);sottoprogrammi forward Pascal e nomi funzioni C.

Java: disciplina mista:

dichiarazioni ovunque e valide fino a fine blocco;dichiarazione membro valide per tutta la classe.

24/54 Programmazione II Lezione 6 5/11/2010

Page 25: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Esercizi

Parte II

Esercizi

25/54 Programmazione II Lezione 6 5/11/2010

Page 26: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Esercizi

Esercizio 1

Si calcoli la computazione del comando c:

X := 1; while (X == 1) do X := 2;

nello stato σ = [(X , 3)].

26/54 Programmazione II Lezione 6 5/11/2010

Page 27: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Esercizi

Esercizio 2Si consideri il seguente frammento di programma, scritto con un linguaggio a scopestatico. Si dica quali valori sono stampati dalla primitiva write().

1 i n t x = 0 , y = 0 ;23 v o i d foo ( ) {4 x++;5 }6 v o i d bar ( ) {7 foo ( ) ;8 x=x ∗2 ;9 }

1011 read ( y ) ;1213 i f ( y > 0) {14 i n t x = 3 ;15 bar ( ) ;16 write ( x ) ;17 }18 e l s e bar ( ) ;1920 write ( x ) ;

27/54 Programmazione II Lezione 6 5/11/2010

Page 28: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Esercizi

Esercizio 3Si consideri il seguente frammento di programma, scritto con un linguaggio a scopedinamico. Si dica quali valori sono stampati dalla primitiva write().

1 i n t x = 2 , y = 0 ;23 v o i d foo ( ) {4 i n t x = 1 ;5 }6 v o i d bar ( ) {7 foo ( ) ;8 x=x ∗2 ;9 }

1011 read ( y ) ;1213 i f ( y > 0) {14 i n t x = 3 ;15 bar ( ) ;16 write ( x ) ;17 }18 e l s e bar ( ) ;1920 write ( x ) ;

28/54 Programmazione II Lezione 6 5/11/2010

Page 29: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Esercizi

Esercizio 4

Si consideri il seguente frammento di programma: inserire del codice al posto di/*...*/, tale che usando un linguaggio a scope statico la variabile x nei due cicliassuma lo stesso valore, mentre usando un linguaggio a scope dinamico la variabile xassuma valori diversi. (Il codice deve compilare sempre.)

1 i n t i ;23 i n t foo ( ) { /∗ . . . ∗/ }45 f o r ( i = 0 ; i <= 1 ; i++){6 i n t x ;7 /∗ . . . ∗/8 x = foo ( ) ;9 }

**E possibile usare un solo comando nel ciclo for?

29/54 Programmazione II Lezione 6 5/11/2010

Page 30: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Esercitazione: Eclipse

Parte III

Esercitazione: Eclipse

30/54 Programmazione II Lezione 6 5/11/2010

Page 31: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Esercitazione: Eclipse Eclipse

Installare Eclipse

In http://www.eclipse.org/downloads/ selezionare “Eclipse Classic”.

31/54 Programmazione II Lezione 6 5/11/2010

Page 32: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Esercitazione: Eclipse Eclipse

Installare Eclipse

Scompattare l’archivio:

$ tar zxvf eclipse-SDK-3.6.1-linux-gtk.tar.gz

Spostarsi nella directory di installazione:

$ cd eclipse/

Eseguire Eclipse:

$ ./eclipse

(In alternativa, muovere la directory in una directory di sistema eaggiornare il path per puntare ad essa).

32/54 Programmazione II Lezione 6 5/11/2010

Page 33: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Esercitazione: Eclipse Eclipse

Installare Eclipse

Scegliere il workspace:

33/54 Programmazione II Lezione 6 5/11/2010

Page 34: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Esercitazione: Eclipse Eclipse

Creare un Progetto Java con Eclipse

Creare un progetto Java:

34/54 Programmazione II Lezione 6 5/11/2010

Page 35: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Esercitazione: Eclipse Eclipse

Creare un Progetto Java con Eclipse

35/54 Programmazione II Lezione 6 5/11/2010

Page 36: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Esercitazione: Eclipse Eclipse

Aggiungere una classe

Aggiungere una classe:

36/54 Programmazione II Lezione 6 5/11/2010

Page 37: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Esercitazione: Eclipse Eclipse

Aggiungere una classe

37/54 Programmazione II Lezione 6 5/11/2010

Page 38: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Esercitazione: Eclipse Eclipse

Aggiungere una classe

38/54 Programmazione II Lezione 6 5/11/2010

Page 39: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Esercitazione: Eclipse Eclipse

Scrivere il Programma

Scrivere il programma:

39/54 Programmazione II Lezione 6 5/11/2010

Page 40: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Esercitazione: Eclipse Eclipse

Eseguire il Programma

Eseguire il programma (eseguire la build se non e automatica):

40/54 Programmazione II Lezione 6 5/11/2010

Page 41: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Esercitazione: Eclipse Eclipse

Eseguire il Programma

41/54 Programmazione II Lezione 6 5/11/2010

Page 42: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Esercitazione: Eclipse Eclipse

Eseguire il Programma

42/54 Programmazione II Lezione 6 5/11/2010

Page 43: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Esercitazione: Eclipse Eclipse

Eseguire il Programma

43/54 Programmazione II Lezione 6 5/11/2010

Page 44: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Esercitazione: Eclipse Eclipse

Eseguire il Programma

44/54 Programmazione II Lezione 6 5/11/2010

Page 45: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Esercitazione: Eclipse Eclipse

Eseguire il Programma

In alternativa, per compilare ed eseguire il programma da shell:

~$ cd workspace/Hello/src/

~/workspace/Hello/src$ javac Hello.java

~/workspace/Hello/src$ java Hello

Hello World!

In alternativa, dopo aver fatto la build da Eclipse, se si e scelto di averedirectory separate per gli eseguibili (bin) e sorgenti (src), si puo eseguire ilprogramma dalla directory bin:

~$ cd workspace/Hello/

~/workspace/Hello$ ls

~/workspace/Hello$ bin src

~/workspace/Hello$ cd bin/

~/workspace/Hello/bin$ java Hello

Hello World!

45/54 Programmazione II Lezione 6 5/11/2010

Page 46: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Java

Parte IV

Java

46/54 Programmazione II Lezione 6 5/11/2010

Page 47: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Java

Java

Java e un linguaggio object-oriented, con le seguenti caratteristiche:

fortemente tipato (strongly typed): ogni espressione ha un tipo, che ilcompilatore usa per controllare la correttezza delle operazioni eseguite;

tutti gli errori sono rilevati al momento in cui avvengono, non sono

possibili errori non catturati (unchecked error):

es., non e consentito l’accesso diretto alla memoria (puntatorivoid*);

gestione automatica della memoria a heap, con garbage collection:

la deallocazione non e gestita dal programmatore: la JVM si occupadi liberare la memoria non piu usata.

47/54 Programmazione II Lezione 6 5/11/2010

Page 48: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Java

Sintassi di Base

La sintassi del frammento imperativo di Java e simile a quella del C/C++:

comandi (if, while, ...);

le dichiarazioni di metodi (analoghi alle funzioni) e variabili;

si usano le graffe ({...}) per indicare l’apertura e la chiusura dei blocchi;

i caratteri di spazio/tabulazione/a capo non sono importanti;

come in C, un metodo main e utilizzato come punto di partenza del

programma:

invocato dalla JVM all’inizio dell’esecuzione.

48/54 Programmazione II Lezione 6 5/11/2010

Page 49: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Java

Hello World!

1 p u b l i c c l a s s Hello {2 // e n t r y p o i n t d e l programma3 p u b l i c s t a t i c v o i d main ( String [ ] args ) {4 System . out . println ( ” H e l l o World ! ” ) ;5 }6 }

Dichiarazione della classe Hello:

e necessario che il file relativo al codice sorgente abbia lo stessonome della classe pubblica corrispondente, seguito dall’estensionejava.

Un solo metodo, main:

il punto di ingresso nel programma, invocato all’iniziodell’esecuzione;stampa sulla console la stringa Hello World!

49/54 Programmazione II Lezione 6 5/11/2010

Page 50: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Java

Analisi di Hello World

Riga 1: dichiarazione della classe Hello;

Riga 2: commento, ignorato dal compilatore. Un’altra sintassi per icommenti e:

/∗ commento ∗/

Riga 3: dichiarazione del metodo main:

un parametro, args, di tipo String[] (array di stringhe);args contiene gli argomenti (es., passati dalla riga di comando).

Riga 4: stampa la stringa Hello World! sulla console:

System: classe standard di Java;out: variabile associata alla classe System (contiene un riferimentoad un oggetto che rappresenta lo standard output);println: metodo di out per stampare una stringa (sullo standardoutput).

50/54 Programmazione II Lezione 6 5/11/2010

Page 51: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Java

Dichiarazione di Variabili e Assegnamento

Ogni variabile locale utilizzata in un programma deve essere dichiarata primadel suo uso:

deve esserne indicato il tipo, cioe l’insieme dei valori che potramemorizzare e le operazioni possibili;

<tipo> <ide>; // d i c h i a r a z i o n e<ide> = <espressione >; // assegnamento<tipo> <ide> = <espr>; // d i c h i a r a z i o n e e assegnamento

Ad esempio:

1 i n t x ;2 f l o a t phi = 1 . 6 1 8 0 3 3 9 8 8 7 ;3 String msg = ” c i a o ”

La dichiarazione crea una associazione nell’ambiente locale tra il nome

della variabile e il valore:

se non e inizializzata, viene associata ad un valore di default.

51/54 Programmazione II Lezione 6 5/11/2010

Page 52: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Java

Tipi di Dato: Esempio

Esempio: il tipo int:

contiene i valori {. . . ,−2,−1, 0, 1, 2, 3, . . . }

fornisce le operazioni:

+ somma,* moltiplicazione,- sottrazione,/ divisione intera,

e ognuna di queste operazioni puo essere applicata ad una coppia di valoriint e ritorna un singolo valore int.

52/54 Programmazione II Lezione 6 5/11/2010

Page 53: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Java

Dichiarazione di Variabili e Assegnamento: Esempio

1 i n t x = 1 0 ;2 i n t y = 2 0 ;3 x = y ;4 x = x ∗ 3 ;

Riga 1: dichiarazione della variable x di tipo int:

a cui e assegnato il valore 10.

Riga 2: dichiarazione della variable y di tipo int:

a cui e assegnato il valore 20.

Riga 3: assegnamento alla variabile x del valore associato alla variabile y:

x assume il valore 20.

Riga 4: assegnamento alla variabile x del valore di x * 3:

x assume il valore 60.

53/54 Programmazione II Lezione 6 5/11/2010

Page 54: Programmazione II - Lezione 6groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-06.pdf · Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione

Java

Riferimenti

[1] Linguaggi di programmazione: principi e paradigmi (Cap. 4).

Maurizio Gabbrielli, Simone Martini.

[2] Core Java 2. Vol. 1: Fondamenti (Cap. 3).

Horstmann Cay S., Cornell Gary.

54/54 Programmazione II Lezione 6 5/11/2010