LA DOCUMENTAZIONE È noto che un buon programma dovrebbe essere ben documentato.. ma lesperienza insegna che quasi mai ciò viene fatto! –non cè tempo, ci si penserà poi... –... e alla fine la documentazione non cè! Java accetta il fatto che la gente non scrive documentazione.....e quindi fornisce uno strumento per pro- durla automaticamente a partire dai com- menti scritti nel programma: javadoc
LESEMPIO... COMPLETATO /** File Esempio0.java * Applicazione Java da linea di comando * Stampa la classica frase di Enrico 1.0, 5/4/98 */ public class Esempio0 { public static void main(String args[]){ System.out.println("Hello!"); } Informazioni di documentazione
LESEMPIO... COMPLETATO Per produrre la relativa documentazione: javadoc Esempio0.java Produce una serie di file HTML Si consulti la documentazione di javadoc per i dettagli.
TIPI DI DATO PRIMITIVI IN JAVA caratteri –char (2 byte)codifica UNICODE –coincide con ASCII sui primi 127 caratteri –e con ANSI / ASCII sui primi 255 caratteri –costanti char anche in forma '\u2122' interi (con segno) –byte (1 byte) –short (2 byte) –int (4 byte) –long (8 byte) NB: le costanti long terminano con la lettera L
TIPI DI DATO PRIMITIVI IN JAVA reali (IEEE-754) –float (4 byte) (6-7 cifre significative) –double (8 byte) (14-15 cifre significative) boolean –boolean (1 bit) false e true –tipo autonomo totalmente disaccoppiato dagli interi: non si convertono boolean in interi e viceversa, neanche con un cast –tutte le espressioni relazionali e logiche danno come risultato un boolean, non più un int !
CLASSI E OGGETTI IN JAVA Esclusi i tipi primitivi appena visti, in Java esistono solo classi –componenti statici, pre-esistenti, che possono avere i loro dati e le loro funzioni –ma anche fare da stampo per costruire oggetti oggetti –entità dinamiche costruite al momento delluso a immagine e somiglianza di una classe
CLASSI IN JAVA sono componenti statici: esistono già allinizio dellesecuzione, e permangono per tutta lesecuzione del programma possono avere propri dati (dati statici) e fun- zioni (funzioni statiche), come un modulo –il main è una tipica funzione statica: deve infatti esistere fin dallinizio in quanto è da lì che la computazione ha origine possono fungere da stampo per costruire oggetti (che sono invece entità dinamiche)
CLASSI IN JAVA sono componenti statici: esistono già allinizio dellesecuzione, e permangono per tutta lesecuzione del programma possono avere propri dati (dati statici) e fun- zioni (funzioni statiche), come un modulo –il main è una tipica funzione statica: deve infatti esistere fin dallinizio in quanto è da lì che la computazione ha origine possono fungere da stampo per costruire oggetti (che sono invece entità dinamiche) Dati e funzioni static appartengono al componente classe non definiscono la struttura di oggetti Dati e funzioni non- static non appartengono al componente classe definiscono la struttura degli oggetti creati dinamicamente a immagine della classe
CLASSI IN JAVA Esempio: la classe Math Math è una classe di sistema che comprende solo costanti e metodi statici (pubblici) (in pratica, è la libreria matematica) –Costanti di classe: E e PI –Metodi di classe: abs(), asin(), acos(), atan(), min(), max(), exp(), log(), pow(), sin(), cos(), tan(), etc. Si usano con il nome completo: float x = Math.sin(Math.PI/3);
OGGETTI IN JAVA sono componenti dinamici: vengono creati al volo, al momento delluso, tramite lope- ratore new sono creati a immagine e somiglianza di una classe, che ne descrive le proprietà su di essi è possibile invocare le operazioni pubbliche previste dalla classe non occorre preoccuparsi della loro distru- zione: Java dispone di un garbage collector!
ESEMPIO: LA CLASSE Counter public class Counter { private int val; public void reset() { val = 0; } public void inc() { val++; } public int getValue() { return val; } } Non contiene dati o funzioni statiche, quindi non dispone di dati e operazioni sue proprie Funge solo da stampo per costruire oggetti
ESEMPIO: UN CLIENTE Contiene ununica funzione statica (il main), che crea e usa un nuovo oggetto Counter Non può fungere da stampo per costruire og- getti (non ha dati o funzioni non- static ) public class Esempio1 { public static void main() { Counter c = new Counter(); c.reset(); c.inc(); c.inc(); System.out.println(c.getValue()); }
ESEMPIO: UN CLIENTE Contiene ununica funzione statica (il main), che crea e usa un nuovo oggetto Counter Non può fungere da stampo per costruire og- getti (non ha dati o funzioni non- static ) public class Esempio1 { public static void main() { Counter c = new Counter(); c.reset(); c.inc(); c.inc(); System.out.println(c.getValue()); } La frase Counter c; definisce un riferimento a un (futuro) oggetto di classe Counter Loggetto di tipo Counter viene però creato dinamicamente solo in un secon-do momento, mediante loperatore new
ESEMPIO: COSTRUZIONE Le due classi devono essere scritte in due file distinti, di nome, rispettivamente: –Esempio1.java (contiene la classe Esempio1 ) –Counter.java (contiene la classe Counter ) Ciò è necessario perché entrambe le classi sono pubbliche: in un file.java può infatti esserci una sola classe pubblica –ma possono essercene altre non pubbliche Per compilare: javac Esempio1.java Counter.java NB: lordine non importa
ESEMPIO: COSTRUZIONE Queste due classi devono essere scritte in due file distinti, di nome, rispettivamente: –Esempio1.java (contiene la classe Esempio1 ) –Counter.java (contiene la classe Counter ) Ciò è necessario perché entrambe le classi sono pubbliche: in un file.java può infatti esserci una sola classe pubblica –ma possono essercene altre non pubbliche Per compilare: javac Esempio1.java Counter.java Anche separatamente, ma nellordine: javac Counter.java javac Esempio1.java La classe Counter deve infatti già esiste-re quando si compila la classe Esempio1
ESEMPIO: ESECUZIONE La compilazione di quei due file produce due file.class, di nome, rispettivamente: –Esempio1.class –Counter.class Per eseguire il programma basta invocare linterprete con il nome di quella classe (pubblica) che contiene il main java Esempio1
ESEMPIO: UNA VARIANTE Se la classe Counter non fosse stata pubblica, le due classi avrebbero potuto essere scritte nel medesimo file.java public class Esempio2 {... } class Counter {... } nome del file = quello della classe pubblica ( Esempio2.java ) Importante: lordine delle classi nel file è irrilevante, non esiste un concetto di dichia- razione che deve pre- cedere luso!
ESEMPIO: UNA VARIANTE Se la classe Counter non fosse stata pubblica, le due classi avrebbero potuto essere scritte nel medesimo file.java ma compilandole si sarebbero comunque ottenuti due file.class : –Esempio2.class –Counter.class In Java, cè sempre un file.class per ogni singola classe compilata –ogni file.class rappresenta quella classe –non può inglobare più classi