010426

annuncio pubblicitario
Linguaggi e Traduttori
Esercitazione n°1 del 3/5/2001
Relatore: Ramilli Stefan
Come prima esperienza si e’ proceduto alla compilazione di
codice java gia’ fornito dal docente.
In particolare si prendera’ come riferimento l’esempio
“ex4”.
Si e’ messo in evidenza la modalita’ di compilazione in
presenza di classi distribuite in package e l’esecuzione
dell’applicazione ottenuta eseguendo sulla macchina
virtuale java il file .cass contenente il main.
Per compilare il sorgente java abbiamo digitato da consol la
seguente linea di comando :
javac ex4/Counter.java ex4/Example.java.
In questo modo abbiamo ottenuto due file;
Counter.class
Example.class.
Per eseguire l’applicazione abbiamo eseguito la macchina
virtuale java invocando il file .class contenente il main nel
modo seguente:
java ex4.Example
Occorre fare particolare attenzione ai package e porsi nella
giusta directory per compilare ogni singola classe ed
eseguire l’applicazione.
Altra difficolta’ come primo approccio e’ stato il fatto che il
compilatore e’ case sensitive, commettendo banalmente
alcuni errori.
Negli esempi proposti abbiamo anche osservato il fatto che
assegnando ad un oggetto un altro oggetto (della stessa
classe) viene passato il riferimento e non viene fatta una
copia come invece avviene per le primitive.
Abbiamo imparato admusare i costruttori notando che
diversi costruttori possono avere lo stesso nome se la lista
dei parametri e’ diversa.
Inoltre il file contenente il codice java deve avere lo stesso
nome della classe contenuta (esempio per la classe Counter
il file sorgente si deve chiamare Counter.java).
Counter.java
package ex4;
/**
*
* A Counter is an object that counts integer values.
* It provides services to be reset,
* to be incremented and to retrieve its value
*
*/
public class Counter {
/**
* Constructs a counter with default value (1).
*/
public Counter(){
value=1;
}
/**
* Constructs a counter providing a start value.
*/
public Counter(int v){
value=v;
}
/**
* Resets the counter value.
*
* The value is reset to zero.
*/
public void reset(){
value=0;
}
/**
* Increments the counter value.
*/
public void inc(){
value++;
}
/**
* Increments the counter value.
*
* @param n amount of the increment
*/
public void inc(int n){
value+=n;
}
/**
* Gets the counter value.
*/
public int getValue(){
return value;
}
/**
* Tests if two counters are equal.
*
* Two counters are equal when they have
* the same value.
*/
public boolean equals(Counter x){
return value==x.value;
}
// private data
private int value;
}
Example.java
package ex4;
public class Example {
public static void main (String args[]) {
Counter c1 = new Counter();
c1.inc();
Counter c2 = new Counter(10);
c2.inc();
System.out.println("c1 = "+c1.getValue());
System.out.println("c2 = "+c2.getValue());
}
}
Come variante ho aggiunto un metodo che serve per
incrementare il contatore, ma lo fa in funzione a due valori
passati al momento dell’invocazione del metodo; min e
max.
In questo modo il contatore e’ costretto a rimanere dentro
ad un certo range.
Se il valore attuale oppure mediante incremento si sipera il
valore massimo il contatore viene riportato
automaticamente al valore massimo.
Se il contatore ha un valore minore al minimo, anche dopo
l’incremento, esso viene portato automaticamente al valore
minimo.
Se invece il valore si trova tra il minimo ed il massimo
avviene l’incremento.
Metodo aggiunto al file Counter.java
/**
*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
* Increments the counter value between a minimun value
* and a maximun value
*
*
*/
public void incBetween(int min,int max){
value++;
if (value >= max) value=max;
if (value < min) value=min;
}
Example.java
package es;
public class Example {
public static void main (String args[]) {
Counter c1 = new Counter();
System.out.println("");
System.out.println("c1 = "+c1.getValue());
System.out.println("Inizio conteggio");
System.out.println("");
for (int j=0; j<10; j++) {
c1.incBetween(2,8);
System.out.println("c1 = "+c1.getValue());
}
}
}
Compilando il sorgente come segue
C:\lt>javac es/Example.java
Lanciando l’applicativo
C:\lt>java es.Example
Si ottiene il risultato voluto come testimonia lo screenshot
seguente:
NOTE : lanciando l’applicativo esso parte anche con la
seguente sintassi anche se e’ stato affermato il contrario
C:\lt>java es/Example
Scarica