2 – Esecuzione di un
programma Java
Marco Tessarotto
Programmazione dei Calcolatori
Anno Accademico 2004-2005
Eseguire un programma Java
Scriviamo un programma… vedi esempio
precedente
Lo salviamo in un file sul disco del
calcolatore
Editor: potete usare JEditor, notepad…
Il nome del file sarà Hello.java; regola di
Java: se X è il nome della classe, allora il
file si chiama X.java
Eseguire un programma Java/2
Ok, abbiamo il file contente il codice
sorgente
Il calcolatore non può eseguire
direttamente il codice Java… i processori
eseguono linguaggi macchina
È necessario un collegamento tra Java e
linguaggio macchina
Compilatori ed interpreti
Compilatore: sw che traduce un sorgente
scritto in linguaggio di alto livello (es. Java,
C, C++…) in linguaggio macchina
Interprete: programma che utilizza il
sorgente scritto in linguaggio di alto livello
e ne esegue direttamente le istruzioni
Eseguire un programma Java/3
Per un eseguire un programma Java,
occorre utilizzare un compilatore ed un
interprete…
In Java, il codice sorgente viene tradotto
(compilato) in un linguaggio macchina
“idealizzato”: Byte Code Java
Byte Code Java non è eseguibile
direttamente dai processori tradizionali
Eseguire un programma Java/4
Partiamo dal file sorgente X.java
Invochiamo il compilatore Java (javac)…
Viene creato un file X.class, contenente la
traduzione in Byte Code Java del nostro
programma [è un file “binario”]
Eseguire un programma Java/5
Adesso possiamo far eseguire il codice Byte
Code Java dall’interprete Java (java)
L’interprete Java interpreta (esegue) le istruzioni
contenute in X.class
N.B.: una volta compilato il programma (è stato
generato il file X.class), questo può essere
interpretato (eseguito) tutte le volte che si vuole
Scrittura del
sorgente
Compilazione in
Byte Code Java
(X. java)
(X. class)
Esecuzione del
programma
tramite interprete
Byte Code Java
Vantaggi?
Il Byte Code Java non è vincolato ad un
microprocessore e/o alla sua architettura
e/o sistema operativo
È necessario che sia implementato
l’interprete Java per la piattaforma che si
vuole utilizzare
Byte Code Java/2
Sono stati scritti interpreti Java per una
varietà di calcolatori…ma non solo
Cellulari, palmari, set-top box, sistemi
“embedded”…
L’interprete Java può essere incapsulato
all’interno di altri programmi (es. web
browser) consentendo l’esecuzione di
applicazioni Java all’interno di pag. html
Piattaforme Java
Java Enterprise Edition (J2EE)
Java Standard Edition (J2SE)
Java Micro Edition (J2ME)
Java Smart Card
Java TV
N.B.: l’interprete Java viene detto
“macchina virtuale Java” (JVM)
Java su Windows
Per scrivere, compilare ed eseguire
programmi Java su Windows:
Installare “Java Software Development Kit
(SDK)”
Da prompt ms-dos, invocare javac e java
Ovviamente esistono programmi più
evoluti per scrivere applicazioni Java…
Riferimenti a oggetti
Realizziamo un programma (composto da
un solo oggetto)
Scriviamo un file sorgente, contentente la
classe (che descrive l’oggetto)
Per utilizzare un oggetto, istanziamo la
classe corrispodente
Riferimenti a oggetti/2
AlgoritmoXYZ.java
class AlgoritmoXYZ {
... // descrizione dell’algoritmo
}
File sorgente
codice sorgente
Per utilizzare AlgoritmoXYZ, è necessario
istanziare la classe, ovvero creare un oggetto di
tipo AlgoritmoXYZ
Ottengo un riferimento ad un oggetto di tipo
AlgoritmoXYZ
Riferimenti a oggetti/3
Un programma opera sugli oggetti
attraverso identificatori (riferimenti)
Un oggetto è una istanza di un classe;
opero sull’oggetto attraverso il suo
riferimento (identificatore)
In Java, per prima cosa si dichiarano i
riferimenti ad oggetti; ma prima di usarli,
occorre crearli (“attivando” i riferimenti)
Riferimenti a oggetti/4
dichiariamo il riferimento ad un oggetto di
tipo AlgoritmoXYZ
AlgoritmoXYZ alg;
alg è il riferimento all’oggetto (da creare)
Creiamo l’oggetto…
alg = new AlgoritmoXYZ( );
Adesso l’oggetto esiste e possiamo usarlo
Riferimenti a oggetti/5
alg è un riferimento ad un oggetto di tipo
AlgoritmoXYZ
alg viene detto variabile di riferimento
Una volta creato, posso mandare
messaggi all’oggetto (invocare metodi)
attraverso il suo riferimento
RIFERIMENTO
OGGETTO
alg
AlgoritmoXYZ
Riferimenti a oggetti/6
Posso avere più riferimenti ad uno stesso
oggetto:
AlgoritmoXYZ alg = new AlgoritmoXYZ();
AlgoritmoXYZ alg2;
alg2 = alg;
alg
alg2
OGGETTO
AlgoritmoXYZ
String
Fare riferimento ad un oggetto non creato dà
origine ad un errore di run time
String è una classe predefinita di Java: modella
una sequenza di caratteri (lettere, cifre, segni di
interpunzione, spazi e simboli speciali)
In java, ogni gruppo di caratteri tra virgolette è
un riferimento ad un oggetto String che modella
quella sequenza di caratteri
Es.: “Hello world!”
String/2
“Hello”
riferimento
si riferisce a
Istanza di classe
String
oggetto
La classe String prevede vari metodi
“Hello”.toUpperCase() : mandiamo un
“messaggio” all’oggetto cui “Hello” si riferisce
La classe String non consente di modificare la
stringa di caratteri che l’oggetto modella…
String/3
“Hello”
riferimento
Istanza di
String
oggetto
riferimento
toUpperCase()
messaggio
Oggetto String che
modella “Hello”
“Hello”.toUpperCase()
riferimento
Oggetto String che
modella “HELLO”
String/4
La classe String è progettata in modo che
operazioni su un oggetto String
restituiscono un nuovo oggetto String
L’oggetto originario rimane immutato
Il metodo toUpperCase() restituisce un
riferimento ad un nuovo oggetto
String/5
La classe String prevede svariati metodi
Consultare la documentazione Java (API
Specification)
String/6
Altri metodi importanti di String:
int length()
String substring(int beginIndex)
String concat(String s)
int indexOf(String str)
Indice 0 delle stringhe (come in C)
Variabili di riferimento
Una variabile è un identificatore cui si può
attribuire un valore
si dice variabile perché può contenere
diversi valori in momenti diversi (il suo
valore può variare)
Variabile di riferimento: variabile il cui
valore è un riferimento
Variabili di riferimento/2
Per introdurre una variabile di riferimento
in un programma Java si scrive una
dichiarazione di variabile di riferimento:
AlgoritmoXYZ alg;
String str;
Si scrive la classe dell’oggetto seguita
dall’identificatore della variabile
Assegnazione
Per attribuire un valore ad una variabile, si
usa l’istruzione di assegnazione:
str = “Hello”;
Questa istruzione assegna a str il
riferimento “Hello”; sia str che “Hello” si
riferiscono allo stesso oggetto
“Hello”
riferimento
str
Istanza di
String
oggetto
Metodi
Applicare un metodo (inviare un
messaggio) ad un oggetto
String str = “Hello”;
str = str.toUpperCase();
Str
riferimento
Istanza di
String
oggetto
toUpperCase()
messaggio
Metodi/2
Il metodo toUpperCase( ), come fa a
sapere su quale oggetto lavorare?
Nell’invocazione del metodo, viene
passato str come parametro aggiuntivo
nascosto
String str = “Hello”;
str = str.toUpperCase();
Confronto tra stringhe
String a = “1234”;
String b = “1234”;
“le due stringhe sono uguali?”
a
riferimento
b
riferimento
Istanza di String
“1234”
oggetto
Istanza di String
“1234”
oggetto
Confronto tra stringhe/2
Vi sono due oggetti di tipo String che
modellano la stessa stringa: “1234”
La domanda giusta è: le stringhe
modellate dai due oggetti sono uguali?
If ( a.equals(b) ) { …
Oppure: if ( b.equals(a) ) …
In C si usa strcmp(char * a, char * b)
Confronto tra stringhe/3
public boolean equals(Object arg)
a
riferimento
Istanza di String
“1234”
oggetto
equals( b )
messaggio
Istanza di String
b
riferimento
“1234”
Convenzioni di scrittura
Nomi di classe:
Molte parole, tutte con iniziale maiuscola
ThisIsAClassWithLongName
Nomi di ogni altra cosa (metodi, variabili …)
Molte parole, tutte capitalized eccetto la prima
thisIsAnObject
thisIsAMethod