Linguaggi Java Struttura di un programma Java Dal punto di vista sintattico un programma Java è un insieme di classi ognuna delle quali è definita in un file con estensione .java con lo stesso nome della classe. La classe principale, e si deve decidere quale sarà la classe principale, deve avere un metodo main dal quale avrà inizio il programma. Una classe può essere vista come un tipo definito dall’utente che specifica le operazioni utilizzabili sul tipo stesso, e diventa il modello per creare più oggetti dello stesso tipo, che diventano così dei contenitori di altri dati primitivi e di comportamenti. Package Le classi che costituiscono un programma e che quindi sono collegate tra loro vengono raggruppate in gruppi chiamati package; per indicare a quale package appartiene una classe, è sufficiente aggiungere in testa al file come prima istruzione Package nome_package Un package una volta compilato può essere compresso in un file con estensione jar che contiene tutti i file in bytecode delle classi del package, e tale file poi ha la funzione di libreria Classi In generale ogni file che definisce una classe è composto dalle seguenti parti: 1. dichiarazione del nome del package di appartenenza 2. elenco dei package utilizzati diversi da quelli di appartenenza, in particolare import package librerie di base import package librerie aggiuntive 3. definizione del nome della classe 4. definizione degli attributi – che saranno le variabili globali della classe, viste quindi da tutti i metodi: ogni attributo potrà essere visto da tutti gli utilizzatori esterni alla classe ( public ), oppure solo all’interno della classe ( private o protected); le costanti vanno identificate con la parola chiave final. 5. definizione dei costruttori 6. definizione dei metodi – i metodi realizzano i comportamenti che gli oggetti implementano: sono definiti in modo analogo alle funzioni del linguaggio C, però non ci può essere passaggio di variabili primitive come parametri per riferimento Per la classe Lampadina dunque dovremo scrivere: package illumina; import java.io.* punto 1 punto 2 Fondazione ITS A. Volta – Linguaggi -Java – Flavia Lollis 10 Linguaggi Java public class Lampadina punto 3 { int stato, numClick, numMaxClick, contaCllick; String colore punto 4 public Lampadina(int num, String color) punto 5 { ……. } public Lampadina(int numMax) { ……. } public void click() punto 6 { ….. } public int getStato() { ….. return st; } public String getColore() { ….. return co; } public int getNumClick() { ….. return cl; } } Tipi primitivi e variabili Fondazione ITS A. Volta – Linguaggi -Java – Flavia Lollis 11 Linguaggi Java Le variabili possono essere di tipo primitivo e di tipo classe, nel senso che oltre ai tipi di variabili conosciute dal C, si possono definire delle variabili che siano del tipo definito da una classe. Abbiamo quindi i tipi numerici (int, float, double, short, long), il boolean (true/false), il carattere char come tipi primitivi. Per quanto riguarda le stringhe, Java propone il tipo di variabile String, che in realtà è una classe fornita dalle librerie java.lang: quando definiremo una variabile di tipo String dunque definiremo in realtà un oggetto che è un’istanza della classe String, del quale potremo utilizzare tutti i metodi. Ricordando che anche in C una stringa è un vettore di caratteri, scrivere String str = "abc"; è equivalente a scrivere char data[] = {'a', 'b', 'c'}; String str = new String(data); Come utilizzare gli oggetti Tutte le classi sono state scritte per fornire dei servizi alle altre classi che le istanziano, pertanto se dobbiamo realizzare un’azione, dobbiamo individuare la classe che fornisce il servizio desiderato, creare un suo oggetto ed utilizzarlo. Come esempio vediamo come fare a leggere dei dati da tastiera. Cercando nella documentazione delle classi Java messa a disposizione da Oracle, all’indirizzo http://docs.oracle.com/javase/7/docs/api/overview-summary.html vediamo che nelle librerie java.util troviamo la classe Scanner che preleva i tipi primitivi e stringhe da una risorsa, quindi scrivendo Scanner sc = new Scanner(System.in); int num = sc.nextInt(); siccome System.in rappresenta la tastiera, usando l’oggetto sc che abbiamo definito di tipo Scanner, possiamo usare tutti i suoi metodi, in particolare nextInt() per leggere un intero nextFloat() per leggere un float nextLine() per leggere l’intera riga digitata Fondazione ITS A. Volta – Linguaggi -Java – Flavia Lollis 12