Introduzione a Java
Paolo Bison
Fondamenti di Informatica 1 A.A. 2004/05
Universit`a di Padova
Introduzione a Java, Paolo Bison, A.A. 2004-05, 2004-10-21 – p.1/34
JAVA
“Java:
the elegant simplicity of C++
and
the blazing speed of Smalltalk.”
Perchè Java
basato sul C
robusto e sicuro
relativamente performante
portabile “write once, run everywhere”
librerie base
networking
free
diffusione/utilizzo
Google directory Computers > Programming > Languages
java 3362 lisp 402
C++ 906 smalltalk 357
fortran 827 C 298
Introduzione a Java, Paolo Bison, A.A. 2004-05, 2004-10-21 – p.3/34
Perchè no
basato sul C
prestazioni
complesso
macchinoso
due modelli computazionali
procedurale
orientato agli oggetti
Linguaggi a confronto
visualizzare a terminale 5+3
Pascal
program p(output); begin write(5+3) end .
Lisp (+ 5 3)
Smalltalk 5 + 3
Java
class Somma {
public static void main(String[] args){
System.out.print(5+3);
} }
Introduzione a Java, Paolo Bison, A.A. 2004-05, 2004-10-21 – p.5/34
Qualità di un linguaggio
semplicità
pochi concetti base
“keep it as simple as possible, but not the simplest”
Einstein
eleganza
concetti applicati in maniera uniforme
poche varianti o eccezioni
Struttura programma Java
sequenza di simboli appartenenti al linguaggio
caratteristiche
formato libero strutturato a linee
commento
parte di un programma che può essere tolta senza che si modifichi il comportamento del programma stesso
• /* · · · */
• // fino a fine linea
espressioni ed istruzioni
Introduzione a Java, Paolo Bison, A.A. 2004-05, 2004-10-21 – p.7/34
BeanShell
estensione di java
esecuzione istruzioni java in modalità interattiva
attivazione
interfaccia a linee
java bsh.Interpreter
interfaccia grafica
java bsh.Console
Istruzione nulla
sintassi
;
no operation (NOP)
esempio
;
Introduzione a Java, Paolo Bison, A.A. 2004-05, 2004-10-21 – p.9/34
Espressioni
costanti intere
sequenza di cifre
operatori
moltiplicativi
* / %
additivi + -
relazionali
< > < = >=
uguaglianza
== !=
parentesi
Variabile
identificatore
sequenza di caratteri alfanumerici iniziante con un simbolo alfabetico
_ e $ sono considerati simboli alfabetici
diversi dalle keywords
ogni carattere è significativo
nessum limite di lunghezza
esempi
x0 $Y_1 hal_2001
somma Somma SoMma
Introduzione a Java, Paolo Bison, A.A. 2004-05, 2004-10-21 – p.11/34
Espressioni come istruzioni
una espressione a diventa un’istruzione se è seguita da punto e virgola ( ; )
esempi BeanShell:
2*a+(b-8); 5+7;
a
qualunque in BeanShell, alcune in Java
Assegnazione
sintassi
id = espr ;
esempio
ris=x0*x1-100;
cnt=cnt+1;
= è un operatore (minima priorità) ⇒ espressione di assegnazione
(a=7)+8 a=b=c=0
Introduzione a Java, Paolo Bison, A.A. 2004-05, 2004-10-21 – p.13/34
Selezione
sintassi
if ( espr ) istr [ else istr ]
clausola else opzionale
esempi
if (x+y<0) tot=x-y;
else tot=x+y;
if (x<0)
x=-x;
Associazione if-else
if annidati if (x>0)
if (y>0) q=x*y;
else q=-(x*y);
ogni else viene associato ad una clausola if partendo dalla più interna
uso NOP if (x>0)
if (y>0) q=x*y;
else ;
else q=-(x*y);
Introduzione a Java, Paolo Bison, A.A. 2004-05, 2004-10-21 – p.15/34
Cicli
while
while ( espr ) istr
do
do istr while ( espr ) semantica
istr
while ( espr ) istr
Blocco
sequenza di istruzioni tra { }
permette di raggruppare più istruzioni in un’unica istruzione
if (a != b) {
k=a+b;
s=a*b;
}
6≡
if (a != b) k=a+b;
s=a*b;
if (x>0){
if (y>0) q=x*y;
}
else q=-(x*y);
Introduzione a Java, Paolo Bison, A.A. 2004-05, 2004-10-21 – p.17/34
Esempio BeanShell - I
moltiplicazione
ris=0;i=0;while(i<=n){ris=ris+m;i=i+1;}
5 × 3 m=5;
n=3;
ris=0;i=0;while(i<=n){ris=ris+m;i=i+1;}
Comandi BeanShell
show();
abilita/disabilita la stampa del valore ottenuto valutando un’espressione
print( espr );
stampa il valore dell’espressione espr
Introduzione a Java, Paolo Bison, A.A. 2004-05, 2004-10-21 – p.19/34
Esempio BeanShell - II
algoritmo MCD 1 if (m<n){
t=m; m=n; n=t;
} i=2;
mcd=1;
while (i<=n){
if (m-m/i*i==0) if(n-n/i*i==0)
if (i>mcd) mcd=i;
i=i+1;
Metodo
associazione tra un identificatore ed un insieme di istruzioni
identificatore utilizzato per attivare le istruzioni associate
modi di utilizzo
riuso del medesimo codice in parti differenti del programma
strutturazione di un programma in sottoprogrammi
due fasi:
1. definizione del metodo 2. attivazione del metodo
Introduzione a Java, Paolo Bison, A.A. 2004-05, 2004-10-21 – p.21/34
Definizione
sintassi
id ( [ lista par formali ] ) blocco
associazione di id con blocco
esempio:
azzera(){x=y=z=0;}
Attivazione
sintassi
id ( [ lista par attuali ] )
si esegue il blocco di istruzioni associato a id
due modalità:
come istruzione (procedura) azzera();
come operando (funzione) x0*X_Y()+z
Introduzione a Java, Paolo Bison, A.A. 2004-05, 2004-10-21 – p.23/34
Valore di ritorno
istruzione return
return espr ;
il valore di espr è il valore di ritorno del metodo
esempio
definizione
resto(){ return m-m/n*n;}
attivazione r=resto();
variante
return ;
Applicazione a dati differenti
per cambiare dati, modificare variabili esterne al metodo
m=7;n=5; r=resto();
m=25;n=7; r=resto();
istruzioni assegnazione + attivazione
Introduzione a Java, Paolo Bison, A.A. 2004-05, 2004-10-21 – p.25/34
Parametri
modalità per passare dati ad un metodo ad ogni attivazione
due liste
parametri formali
lista di identificatori nella definizione resto(m,n){ return m-m/n*n;}
parametri attuali
lista di espressioni nell’attivazione r=resto(17,5);
m=resto(x+b,3*k);
Modalità di passaggio
resto(m,n){ return m-m/n*n;} // definizione m=resto(x+b,3*k); // attivazione
fasi
1. valutazione dei parametri attuali x+b → 27
3*k → 13
2. assegnazione dei valori così ottenuti ai parametri formali
m ← 27 n ← 13
associazione posizionale
primo con il primo, secondo con il secondo, · · ·
# parametri attuali = # parametri formali
Introduzione a Java, Paolo Bison, A.A. 2004-05, 2004-10-21 – p.27/34
Validità degli identificatori
associazione tra un identificatore ed un elemento del linguaggio(variabile, metodo, parametro)
uso degli stessi identificatori per indicare elementi di tipo diverso
k(k){if (k<0) return -k; else return k;}
k+k(k);
Ambito di validità
zona del programma in cui è valida un’associazione tra un identificatore ed un elemento del linguaggio
se uno stesso identificatore è associato a piú elementi dello stesso tipo (es. variabili), in ogni punto del
programma esiste una sola associazione valida
regole di campo “scope rules”
dato un identificatore in un determinato punto del programma definiscono quale associazione utilizzare
dinamiche
l’associazione dipende dall’evoluzione temporale del programma
statiche
l’associazione dipende da come è scritto il programma
Introduzione a Java, Paolo Bison, A.A. 2004-05, 2004-10-21 – p.29/34
Globale vs. locale
globale
associazione valida per tutta la durata del programma
locale
associazione valida solamente per una parte limitata del programma
effetti collaterali (side-effects)
modifica di elementi non-locali
Esecuzione
metodi
1 - k(){ print(n); n=20; } 2 - k(n) { print(n); n=20; }
esecuzione 1 - n=10;
k(); print(n);
2 - n=10;
k(n);
print(n);
stampa
1 - 10 20 2 - 10 10
Introduzione a Java, Paolo Bison, A.A. 2004-05, 2004-10-21 – p.31/34
Funzione scalino
realizzare la funzione scalino sca (n) =
( 1 n ≥ 0 0 n < 0
scalino traslato
scaT (n, t) =
( 1 n ≥ t
0 n < t
Elevamento a potenza
calcolare m n con m intero e n intero ≥ 0 m n = m × m × · · · × m
| {z }
n
metodo pot(m,n)
estensione degli operatori
valutare
k (6−b
6) + k ∗ n k
Introduzione a Java, Paolo Bison, A.A. 2004-05, 2004-10-21 – p.33/34