In questa pagina vengono riassunte tutte le esrcitazioni fatte in laboratorio. Viene messo a disposizione degli studenti del corso il materiale didattico usato durante le esercitazioni (lucidi, codici sorgenti, testi degli esercizi).
In caso di problemi contattare Luca Ferrari: ferrari.luca@unimo.it
Come ottenere le parentesi graffe su una tastiera italiana
Errori comuni che possono capitare nell'esecuzione di programmi Java
Individuare gli errori interpretando le eccezioni
Come produrre la documentazione Javadoc
Confronto fra le prestazioni di versioni successive delle JVM SUN
| ESERCITAZIONE 1 | |||||||
| Data dell'esercitazione | Riassunto degli argomenti trattati | ||||||
| 23/04/2004, aula magna |
Programmazione ad oggetti: motivazioni e vantaggi. Astrazione di dati e implementazione
mediante linguaggi non orientati agli oggetti; discussione su vantaggi e svantaggi. Implementazione di un dato astratto e di un tipo di dato astratto per la gestione di un conto corrente in C. Storia di Java e cenni alle motivazioni che hanno portato alla nascita di tale linguaggio. Introduzione all'installazione degli strumenti di sviluppo Java (compilatore, virtual machine) e dell'ambiente JCreator su piattaforma Windows. |
||||||
| Download | |||||||
|
|||||||
| ESERCITAZIONE 2 | |||||||||
| Data dell'esercitazione | Riassunto degli argomenti trattati | ||||||||
| 30/04/2004, laboratorio base |
Introduzione all'ambiente di sviluppo JCreator: progetti, file sorgenti, compilazione ed esecuzione.
Implementazione di un semplice conto corrente in Java: variabili private di istanza e metodi di accesso. Implementazione di una classe contenitore per il metodo main, creazione di vettori (array) di dati primitivi e di oggetti. Utilizzo di this per risolvere l'ambiguita'. |
||||||||
| Download | |||||||||
|
|||||||||
| ESERCITAZIONE 3 | |||
| Data dell'esercitazione | Riassunto degli argomenti trattati | ||
| 7/05/2004, laboratorio base |
Ereditarieta', classi astratte, specificatori di accesso. Classi astratte contro classi adapter: vantaggi e svantaggi. Specificatori di accesso protected contro private: vantaggi e svantaggi. Implementazione di una catena di ereditarieta' di veicoli. Utilizzo dell'operatore super come riferimento esplicito alla classe base o ai costruttori della classe base. |
||
| Download | |||
|
|||
| ESERCITAZIONE 4 | |||||
| Data dell'esercitazione | Riassunto degli argomenti trattati | ||||
| 14/05/2004, laboratorio base |
Input ourtput di testo su file mediante le classi FileWriter/FileReader e gli stream bufferizzati.
Implementazione di un semplice meccanismo per il salvataggio/caricamento di parametri per applicazioni
simulando il comportamento delle Properties di Java. Serializzazione di oggetti: scrittura e lettura dello stato degli oggetti su stream, con particolare riferimento ai file. Scrittura di codice pulito mediante clausole try-catch ordinate. |
||||
| Download | |||||
|
|||||
| ESERCITAZIONE 5 | |||||
| Data dell'esercitazione | Riassunto degli argomenti trattati | ||||
| 21/05/2004, laboratorio base |
Controllo dei parametri delle funzioni:IllegalArgumentException. Concetti generali di programmazione di interfacce grafiche. Come utilizzare i pannelli per disegnare. JFrame e menu, concetti di base. Classi adapter e gestione della chiusura delle finestre di applicazione. Gestione degli eventi AWT. |
||||
| Download | |||||
|
|||||
Le tastiere con un layout differente da quello americano non hanno dei tasti con le parentesi graffe. E' possibile ottenere tali parentesi in uno dei seguenti modi (alcuni potrebbero non funzionare a seconda del programma usato):
ALT e digitare 123 per la parentesi aperta, 125 per quella chiusa
ALT GR, il tasto posto a destra) e i tasti con le parentesi
quadre per ottenere quelle graffe
ALT GR, il tasto posto a destra) e il numero 7 per la
parentesi aperta, 8 per quella chiusa.
ALT+SHIFT e' possibile cambiare il layout fra americano e italiano, e quindi
utilizzare la tastiera come se fosse americana.
Exception in thread "main" java.lang.NoSuchMethodError: mainmain o che non
lo dichiara con il prototipo corretto. Si ricordi che il prototipo del main e' il seguente:
public static void main(String argv[])
Exception in thread "main" java.lang.NoClassDefFoundError:classpath.
Exception in thread "main" java.lang.NullPointerException
null, e quindi occorre fare una escplicita
istanziazione. Ad esempio:
ContoCorrente cc; // dichiara solo il riferimento => cc vale null
...
cc = new ContoCorrente(..); // ora posso usare cc senza problemi di NullPointerException
new:
int vettore[];
...
vettore = new int[10];
Exception in thread "main" java.lang.ArrayIndexOutOfBoundscannot resolve symbol
int laMiaVariabile;
...
laTuaVariabile=10; // variabile non dichiarata prima => errore di battitura,ecc.
duplicated class.class) e ricompilare il progetto. Se ancora si verificano dei problemi,
si controlli di non avere alcun sorgente nelle directory in cui vengono inserite le classi compilati.
Utilizzando il JCreator, questo errore potrebbe verificarsi quando una classe viene spostata da un package
all'altro, ossia quando si è compilata una classe come appartenente al package X, cambiandone
poi la clausola package e ricompilando da capo. In questo caso si suggerisce di eliminare il
vecchio codice sorgente e, se necessario, creare un nuovo progetto importando i sorgenti con le definizioni
di package corrette.
Le eccezioni rappresentano errori di esecuzione. Il sistema di eccezioni di Java è
molto completo e complesso, per una sua trattazione si rimanda alle lezioni del prof.Cabri.
Tuttavia, anche senza conoscere i dettagli di funzionamento del meccanismo ad eccezioni,
è possibile utilizzarle per scovare gli errori nei programmi e quindi correggerli.
Ecco come si presenta l'output di un programma che genera un'eccezione.
Exception in Thread "main": java.lang.ArrayIndexOutOfBoundsException: 10
at jaas.Untitled1.main(Untitled1.java:18)
Exception in thread "main"
La prima riga riporta la classe che identifica il tipo di eccezione/errore (in questo
caso java.lang.ArrayIndexOutOfBoundsException). E' possibile cercare nella documentazione
Javadoc il significato attribuito alla classe di eccezione, ossia le condizioni in cui
tale errore si verifica.
La seconda riga indica il punto in cui l'eccezione si è verificata, in modo che il programmatore
possa trovare corrispondenza nel codice sorgente. L'indicazione sull'errore è formattata
nel seguente modo:
package.nome_classe.nome_metodo(nome_file:riga)
Per produrre la documentazione Javadoc si puo' utilizzare il comando javadoc da una finestra
prompt dei comandi o, in alternativa, si puo' impostare l'ambiente JCreator affinchè esegua javadoc
direttamente.
In entrambi i casi è consigliata la configurazione del PATH in maniera opportuna per
gli strumnti del compilatore Java (si vedano a tal proposito i lucidi
installazione_java.pdf).
Da prompt dei comandi:
javadoc -private *.java
javadoc *.java. Confermare con il pulsante OK e chiudere la
finestra delle opzioni.
Quelli che seguono sono alcuni semplici risultati di un confronto fatto su versioni differenti delle JVM
prodotte da SUN. Tali risultati non sono da considerarsi definitivi e/o professionali, e sono forniti
al solo scopo di dare un'idea dei tempi di esecuzione delle singole JVM.
Il frammento principale del codice Java utilizzato e' il seguente:
for(int i=0;i<500;i++)
for(int j=0;j<500;j++)
for(int k=0;k<500;k++)
Math.sqrt( (double) i+j+k );
ove si faceva variare l'indice comune ai cicli for per ottenere un numero complessivo di radici
calcolate differente. I programmi sono stati compilati con il compilatore a corredo della JVM, al fine di
usufruire di tutte le ottimizzazioni possibili. I test sono stati eseguiti su una workstation SUN Ultra Sparc
con sistema operativo SUN Solaris 5.8
| Test eseguito | JVM 1.2.2 | JVM 1.4.2 | JVM 1.5.0 beta |
| 50^3 | 26-28 msec | 117-147 msec | 152-164 msec |
| 500^3 | 26,533 sec | 27,178 sec | 27,601 sec |
| 500^3 + apertura di un JFrame | 32,709 sec | 31,059 sec | 33,193 sec |