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.”
Introduzione a Java, Paolo Bison, A.A. 2004-05, 2004-10-21 – p.2/34
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
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
Introduzione a Java, Paolo Bison, A.A. 2004-05, 2004-10-21 – p.6/34
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
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 ( )
Introduzione a Java, Paolo Bison, A.A. 2004-05, 2004-10-21 – p.10/34
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
Espressioni come istruzioni
una espressione
adiventa 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;
Introduzione a Java, Paolo Bison, A.A. 2004-05, 2004-10-21 – p.14/34
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);
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;}
Introduzione a Java, Paolo Bison, A.A. 2004-05, 2004-10-21 – p.18/34
Comandi BeanShell
show();
abilita/disabilita la stampa del valore ottenuto valutando un’espressione
print( espr );
stampa il valore dell’espressione espr
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;
}
print(mcd);
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;}
Introduzione a Java, Paolo Bison, A.A. 2004-05, 2004-10-21 – p.22/34
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
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);
Introduzione a Java, Paolo Bison, A.A. 2004-05, 2004-10-21 – p.26/34
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, · · ·
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
Introduzione a Java, Paolo Bison, A.A. 2004-05, 2004-10-21 – p.30/34
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
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
Potenza di un binomio
calcolare la potenza del binomio (m ± n) k con m, n interi e k intero 0 ≤ k ≤ 3 con le regole del calcolo letterale:
(m ± n) 0 = 1 (m ± n) 1 = m ± n
(m ± n) 2 = m 2 ± 2mn + n 2
(m ± n) 3 = m 3 ± 3m 2 n + 3mn 2 ± n 3
metodo bin(m,n,segno)
Introduzione a Java, Paolo Bison, A.A. 2004-05, 2004-10-21 – p.34/34