Fondamenti di Informatica
Prof. Alfredo Cuzzocrea
University of Trieste
Introduzione a Java/2
Credits to: Dr. L. Rigutini - UniSI
Regole di base di JAVA
Regole di base – 1
¾
Java, come quasi tutti i linguaggi di programmazione di alto livello è
case-sensitive, distingue cioè le lettere minuscole da quelle
maiuscole:
¾
¾
È consigliato inserire delle linee di commento per rendere il codice
più leggibile e comprensibile (commentare il codice):
¾
¾
¾
La variabile nome è quindi diversa da Nome
La sequenza // permette di commentare la parte di riga rimanente
I delimitatori /* e */ permettono di commentare tutto ciò compreso tra
queste due sequenze di caratteri
Es:
int a=3; // questa parte finale della riga è commentata
/* commento su
più
righe */
Regole di base – 2
¾
Istruzione
¾
¾
Blocchi di codice
¾
¾
Ogni istruzione deve essere terminata da un ‘;’
Ogni blocco di codice (sequenza di una o più istruzioni da eseguire in
blocco) è racchiuso tra parentesi graffe: ‘{ }’
Formattazione
¾
¾
Una singola istruzione per riga
L’apertura di un blocco viene indentata per rendere più chiara la struttura
del blocco
class HelloWorld {
public static main(String[] args) {
// visualizza un messaggio di saluto
System.out.println(“Hello World !!”);
}
}
Facciamo un esempio
¾
Scrivere un applicazione di benvenuto:
¾
¾
¾
il cosiddetto HelloWorld
Iniziamo col creare un file HelloWorld.java con il notepad (o
qualsiasi altro editor di testo)
Scriviamo il codice per la nostra applicazione:
class HelloWorld {
public static void main(String[] args) {
System.out.println(“Hello World!”);
}
}
¾
Settiamo le variabili di ambiente JAVAHOME e PATH
in modo cha sia possibile utilizzare javac.exe e java.exe
Facciamo un esempio
¾
Copiamo lo script nella directory dove abbiamo salvato il file
HelloWorld.java ed avviamo la shell
¾
Digitiamo:
javac HelloWorld.java
E vediamo che viene creato il file HelloWorld.class
¾
Se proviamo ad aprire il file HelloWorld.class con un editor di testo
(notepad), vediamo una sequenza di caratteri incomprensibile:
¾
¾
bytecode della nostra prima applicazione Java
Adesso chiamiamo la JVM per eseguire la nostra classe:
java HelloWorld
Facciamo un esempio
¾
Otteniamo però un errore:
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld
Cosa vuol dire? La JVM non trova la classe HelloWorld di cui deve lanciare
la funzione main()
¾
Forse vuole il nome del file:
java HelloWorld.class
¾
Otteniamo ancora un errore simile:
Exception in thread "main" java.lang.NoClassDefFoundError:
HelloWorld/class
La JVM ancora non trova la classe HelloWorld/class (spiegheremo in
seguito la differenza tra questi due errori)
¾
Dove è il problema?
Facciamo un esempio
¾
Il problema sta nel fatto che la JVM cerca la classe HelloWorld
(ossia il file HelloWorld.class) nei percorsi specificati dalla variabile
di sistema CLASSPATH:
¾
¾
Questa variabile non contiene però il percorso dove realmente si trova
HelloWorld.class
E’ necessario quindi specificare alla JVM che cerchi il file (o meglio
la classe) anche nella directory corrente:
java –cp . HelloWorld
¾
Adesso funziona tutto !!
Facciamo un esempio
¾
Proviamo adesso a rinominare la funzione main(String[] args) con
run(String[] args) e compiliamo di nuovo:
¾
¾
Per adesso nessun problema, javac genera il file HelloWorld.class
Proviamo a lanciare HelloWorld.class :
java –cp . HelloWorld
¾
Ovviamente otteniamo un errore:
¾
¾
Exception in thread "main" java.lang.NoSuchMethodError: main
Perché OVVIAMENTE ? Che errore si verifica ?
Facciamo un esempio
¾
Leggendo attentamente il messaggio di errore si vede che la JVM ci
sta dicendo che non trova il metodo main
¾
¾
Il metodo main di un oggetto, come detto, contiene il corpo principale
dell’applicazione rappresentata dall’oggetto stesso
Quando si invia un oggetto alla JVM, quest’ultima prova a lanciare il
metodo main, ad eseguire quindi l’oggetto come se fosse un
applicazione:
¾
Se tale metodo non esiste, la JVM ritorna un errore del tipo visto prima
Esempio
¾
Esempio:
01.HelloWorld\01.HelloWorld
IDE e JBuilder
Integrated Development Environment (IDE)
¾
Un IDE è una applicazione grafica che fornisce al programmatore un
ambiente di sviluppo completo ma al tempo stesso semplice e
chiaro
¾
Tramite una interfaccia grafica (GUI) è possibile costruire il progetto,
tenere sotto controllo le varie parti, effettuare il debugging e molto
altro ancora
¾
I più comuni ambienti di sviluppo Java sono:
¾
¾
¾
JBuilder – della Borland, a pagamento, ma è disponibile una versione
free (chiamata Foundation)
NetBeans – della SunMicrosystem, free scaricabile dal sito www.java.
Eclipse – della Eclipse Foundation
Integrated Development Environment (IDE)
¾
L’uso dei programmi da linea di comando javac e java viene
nascosto dalla IDE:
¾
¾
¾
Compilando il progetto, il software passa al compilatore tutti i files
necessari e genera i file .class
Anche l’esecuzione del programma è gestita dall’interfaccia e richiede
solamente di specificare quale funzione main() mandare in esecuzione
Anche la gestione del path e del classpath è automatizzata e resa
“friendly” dall’interfaccia grafica:
¾
¾
¾
Il path corrente è automaticamente inserito nel classpath
Aggiungendo librerie automaticamente viene aggiunto il percorso al
classpath
Ecc…
JBuilder
¾
L’ambiente che utilizzeremo in questo laboratorio è il JBuilder, ma
tutto ciò che viene fatto è facilmente trasportabile su NetBeans o su
Eclipse
¾
Oltre alla libreria standard del Java, ogni IDE può mettere a
disposizione librerie proprietarie da utilizzare nel progetto:
¾
¾
Non sempre consigliato dato che una caratteristica molto importante del
Java è quella della trasferibilità del codice e molte volte l’uso di librerie
proprietarie può limitare questa possibilità
Il JBuilder mette a disposizione una gran quantità di tipologie di
progetto:
¾
tramite un wizard è possibile scegliere il tipo di progetto, specificarne i
parametri ed iniziare a programmare
Esempio
¾
Proviamo adesso a creare una applicazione HelloWorld
utilizzando il JBuilder
¾
Prima di tutto avviamo il JBuilder
¾
Andiamo su File e selezioniamo new
¾
¾
¾
Possiamo creare direttamente una classe o un progetto. Nel primo
caso, viene richiesto comunque di creare un progetto per la classe.
Una volta scelto il nome del progetto e dove salvarlo passiamo alla
creazione guidata della classe
Ci viene chiesto il nome della classe (HelloWorld) ed il package:
¾
¾
Per adesso ignoriamo il package (lasciamo bianco il campo del
package)
Notiamo l’opzione “generate main method” che permette di
generare uno “scheletro” per la funzione main all’interno della classe
Esempio
¾
Inseriamo il codice Java nel file HelloWorld.java
class HelloWorld {
public static void main(String[] args) {
System.out.println(“Hello World!”);
}
}
¾
Adesso possiamo compilare ed eseguire l’applicazione:
¾
¾
Tramite il menù run lanciamo l’applicazione
Notiamo la possibilità di lanciare l’applicazione anche sotto debug
Esempio
¾
Nella finestra in basso vedremo visualizzato l’output
dell’applicazione
¾
E’ possibile verificare che anche in questo caso, rinominando la
funzione main() in qualsiasi altro modo (anche Main()) il JBuilder
ritorna errore
Esempio
¾
Esempio:
01.HelloWorld\02.HelloWorld-JBuilder
Debug
Debug in JBuilder
¾
Un IDE permette di effettuare un’operazione molto utile al
programmatore:
¾
¾
Trovare i punti in cui il programma si comporta in maniera differente
da quello che il creatore si aspettava è un lavoro molto difficile e
costoso:
¾
¾
Il debugging
Il debug a run-time permette di fissare dei break-point
Break-point: punto del programma in cui si desidera fermare il
flusso delle istruzioni per verificare ed ispezionare lo stato
dell’applicazione
Breakpoint
¾
Viene selezionata la riga di codice in cui si desidera interrompere il
programma
¾
Quando l’esecuzione del programma raggiunge tale riga di codice,
l’IDE interrompe l’esecuzione e permette all’utente di interagire con
il programma:
¾
per esempio la lettura di alcuni valori attuali dell’applicazione
¾
Una volta terminata la verifica è possibile “continuare” fino al
break-point successivo o fino alla terminazione dell’applicazione
¾
Inoltre esiste la modalità passo-passo in cui l’ambiente si ferma ad
ogni istruzione
Esempio
¾
Riprendiamo l’applicazione HelloWorld
¾
¾
¾
¾
Inseriamo una istruzione per aumentare il numero di istruzioni:
ES : una istruzione di assegnamento ad una variabile
int a = 4;
Mettiamo un break-point nella istruzione successiva a questa
Lanciamo l’applicazione in modalità debug
Esempio
¾
Vediamo che l’esecuzione si
interrompe alla linea di codice
con il break-point
¾
A questo punto è possibile:
¾
ispezionare i contenuti dell’oggetto
Esempio
¾
mettere dei watch sulle variabili
Esempio
¾
Infine è possibile “continuare” l’applicazione (F9) fino ad un successivo
break-point o alla fine, andare avanti passo-passo (F8), entrare
all’interno della funzione corrente(F7), ecc…
Modo 1
Modo 2
Esempio
¾
Esempio:
01.HelloWorld\02.HelloWorld-JBuilder
Il JavaDoc
Il JavaDoc
¾
L’ambiente di sviluppo grafico permette di creare la documentazione
in automatico:
¾
la Sun aveva previsto la possibilità di descrivere, mediante apposita
sintassi, le varie funzioni disponibili in ogni oggetto
¾
Per creare una descrizione di una funzione è sufficiente inserire
prima del metodo e fuori da ogni altra funzione la descrizione della
funzione delimitata dalle sequenze /** e */
¾
Aggiungendo il tool JavaDoc al progetto, è possibile creare la
documentazione della classi e delle funzioni del progetto:
JavaDoc
¾
Descrizione di una classe:
¾
¾
Quando inseriamo la sequenza /** il JBuilder automaticamente inserisce
i campi descrittivi della classe in cui l’autore può inserire la descrizione:
¾
titolo, descrizione, autore, versione, ecc…
Descrizione di una funzione
¾
¾
Quando inseriamo la sequenza /** il JBuilder crea automaticamente le
righe per la descrizione dei parametri di ingresso e di ritorno della
funzione:
¾
Es:
@param args String[] Î indica che la funzione ha un parametro di
ingresso args di tipo String[]
L’autore della funzione può inserire la descrizione della funzione nella
prima riga del blocco generato automaticamente da JBuilder
JavaDoc – Esempio
¾
Creare una classe HelloWorld de-selezionando tutti i check-box
durante il wizard di JBuilder:
¾
Verrà creata una classe semplice prova senza alcuna funzione o
variabile
class HelloWorld {
}
¾
Creiamo il JavaDoc per la classe:
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2005</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/
class HelloWorld {
}
JavaDoc – Esempio
¾
Creare una funzione nella classe HelloWorld (creiamo la funzione
main() che per ora è l’unica cha abbiamo visto come si scrive):
class HelloWorld {
public static void main(String[] args) {
}
}
¾
Creiamo il JavaDoc per questa funzione:
class HelloWorld {
/**
*
* @param args String[]
*/
public static void main(String[] args) {
}
}
JavaDoc – Esempio
¾
Inseriamo il titolo e la descrizione della classe e la descrizione della
funzione
/**
* <p>Title: Hello World</p>
* <p>Description: Classe di prova per il JavaDoc</p>
* <p>Copyright: Copyright (c) 2005</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/
class HelloWorld {
/**
* Funzione principale per il test
* @param args String[]
*/
public static void main(String[] args) {
}
}
JavaDoc – Esempio
¾
Compiliamo, solo il JavaDoc o tutto quanto ed apriamo il file
index.html del JavaDoc:
JavaDoc – Esempio
¾
La funzione è visualizzata in due punti:
¾
nel sommario delle funzioni in cui viene mostrata una lista di tutte le
funzioni con un breve descrizione (la prima riga del commento inserito)
¾
nella sezione dettagli, in cui viene visualizzata tutta la descrizione
Esempio
¾
Esempio:
01.HelloWorld\02.HelloWorld-JBuilder