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