LINGUAGGI & TRADUTTORI
“Prima relazione”
Albertazzi Luca, matricola 2134230
Trattazione del problema: Stesura e compilazione del tuo primo
programma Java come variante del sorgente visto in
laboratorio
Come mio primo programma Java e per la prima relazione ho voluto implementare una variante
del programma visto nella prima esercitazione in laboratorio utilizzante un contatore. Ho deciso di
creare un programma Java composto da due classi pubbliche (questo ha comportato la creazione di
due files .class) contenute in un Package chiamato “ESE1”.
Il primo file creato è stato Contatore.java che rappresenta la definizione di un ADT che può essere
resettato, incrementato di uno o due passi, paragonato al valore di un altro contatore e al quale può
essere richiesto il suo valore.
Alcune osservazioni che ho fatto su questo file sono: 1_ La definizione della variabile intera
“valore”, al contrario del linguaggio C, può essere fatta a qualsiasi punto del codice (io ho deciso di
dichiararla alla fine) e non è necessario dichiararla all’inizio. 2_ Definendo la variabile “valore”
come un “private” riesco ad evitare che chiunque, fuori dalla classe, possa alterare lo stato del
contatore artificiosamente (questa importante caratteristica di sicurezza non era presente nel
linguaggio C).
Dopo avere definito l’oggetto astratto “Contatore” ho creato il secondo file: Esercitazione.java.
Questo file contiene la classe statica main. Prima di potere usare il contatore ho dovuto creare il suo
riferimento: Contatore c1; (è come un puntatore). Al momento del suo utilizzo ho dovuto
definirlo con il comando c1 = new Contatore(); come uno stampino (template) ad immagine e
somiglianza della classe “Contatore”. Dopo avere creato l’oggetto (il quale “nascera” realmente in
run time) ho utilizzato i metodi messimi a disposizione dalla classe “Contatore”: l’ho resettato,
incrementato, …
Un aspetto da notare è che non ho potuto intervenire direttamente sulla variabile “valore”.
Terminata la stesura del codice ho dovuto creare i due files .class compilando i due files .java. Dal
prompt del dos mi sono recato ad un livello superiore rispetto al package ESE1 e ho digitato il
comando: javac ESE1\Contatore.java. Lo stesso è stato fatto per il file Esercitazione.java. Per
lanciare il programma ho digitato il comando: java ESE1.Esercitazione.
Infine con il comando: javadoc ESE1\Contatore.java ho creato la documentazione dell’oggetto
contatore.
In allegato al file Esercitazione1.doc ho messo i quattro files creati: Contatore.java, Contatore.class,
Esercitazione.java, Esercitazione.class.
Risoluzione del problema: Codice utilizzato
-------------------------------------------------------------------------------file Contatore.java
package ESE1;
/**
*
* Un contatore è un oggetto che può essere resettato,
* incrementato di uno o due passi, paragonato al valore di un altro
* contatore e gli può essere richiesto il suo valore.
*
*/
public class Contatore {
/**
*
* Resetta il suo valore
* a zero.
*
*/
public void reset () {
valore=0;
}
/**
*
* Incrementa il suo valore
* di uno.
*
*/
public void inc () {
valore++;
}
/**
*
* Incrementa il suo valore
* di due.
*
*/
public void inc2 () {
valore++;
valore++;
}
/**
*
* Ritorna il valore.
*
*/
public int getvalue () {
return valore;
}
/**
*
* Testa il valore di due contatori.
*
*/
public boolean equals(Contatore x) {
return valore==x.valore;
}
/**
*
* Dati privati.
* Definizione della variabile intera "valore".
*
*/
private int valore;
}
-----------------------------------------------------------------------------------------------------------------------file Esercitazione.java
package ESE1;
public class Esercitazione {
public static void main (String args[]) {
Contatore c1 = new Contatore();
c1.reset();
c1.inc2();
System.out.println("c1 = "+c1.getvalue());
Contatore c2 = c1;
c2.inc();
System.out.println("c1 = "+c1.getvalue());
System.out.println("c2 = "+c2.getvalue());
Contatore c3 = new Contatore();
c3.inc();
System.out.println(c3.equals(c1));
c3.reset();
c3.inc2();
c3.inc();
System.out.println("c3 = "+c2.getvalue());
System.out.println(c3.equals(c2));
}
}