La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Fisica Computazionale I - 31 UTILIZZARE OGGETTI GIA' ESISTENTI Abbiamo visto che un programma Java puo' fare riferimento ed utilizzare oggetti, cioe' altre.

Presentazioni simili


Presentazione sul tema: "Fisica Computazionale I - 31 UTILIZZARE OGGETTI GIA' ESISTENTI Abbiamo visto che un programma Java puo' fare riferimento ed utilizzare oggetti, cioe' altre."— Transcript della presentazione:

1 Fisica Computazionale I - 31 UTILIZZARE OGGETTI GIA' ESISTENTI Abbiamo visto che un programma Java puo' fare riferimento ed utilizzare oggetti, cioe' altre classi. Lo abbiamo fatto, ad esempio, utilizzando l'oggetto Libro, ma anche utilizzando oggetti non costruiti da noi come ad esempio String. Dobbiamo ora approfondire questo meccanismo e comprendere le regole sottostanti. Java consente di raggruppare piu' classi in una unita' funzionale, il "package". Un package e' appunto un gruppo di classi, generalmente, ma non necessariamente, legate tra loro da qualche tipo di omogeneita'.

2 Fisica Computazionale I - 32 Una classe e' dichiarata appartenere ad uno specifico package mediante lo statement package. Lo statement package deve essere la prima istruzione del file che contiene la classe: package prova.text; public class IlMioProgramma{......... } In questo esempio la classe IlMioProgramma e' posta nel package prova.text.

3 Fisica Computazionale I - 33 Una classe e' accessibile solo alle classi che appartengono al medesimo package. Per consentire che essa sia visibile da qualunque classe e' necessario premettere al nome il modificatore public. Questo e' cio' che abbiamo fatto finora, senza comprenderne il significato. Quindi se noi scriviamo: package prova.text; class IlMioOggetto{......... } la classe IlMioOggetto sara' accessibile solo agli altri membri del package prova.text

4 Fisica Computazionale I - 34 Accedere a classi appartenenti al medesimo package e' quindi totalmente automatico. Viceversa, per accedere a classi appartenenti a package diversi (supposto naturalmente che esse siano public) e' necessario fornire a Java gli elementi necessari per poter rintracciare i files relativi. Questo significa che noi dobbiamo fare riferimento alla classe premettendo ad essa il nome del package. Quindi, per fare riferimento alla classe IlMioOggetto dovremo ad esempio scrivere: prova.text.IlMioOggetto ogg = new prova.text.IlMioOggetto(); in questo modo abbiamo creato l'istanza ogg della classe IlMioOggetto. Questo rappresenta un notevole appesantimento del codice, fonte di possibili errori. Java ci consente di ottenere il risultato voluto in modo piu' semplice con lo statement import.

5 Fisica Computazionale I - 35 package applicazione.prova; import prova.text.IlMioOggetto; class Applicazione{......... IlMioOggetto ogg = new IlMioOggetto();......... } La statement import indica a Java dove localizzare la classe IlMioOggetto. Lo statement import deve essere posto all'inizio (dopo l'eventuale statement package); e' possibile naturalmente avere piu' statements import per localizzare piu' oggetti. E' anche possibile utilizzare il carattere * per importare tutti i membri di un package: import prova.text.*;

6 Fisica Computazionale I - 36 Non e' obbligatorio che una classe appartenga ad un package. Quindi tutte le classi di questo tipo (cioe' prive di appartenenza)possono fare liberamente riferimento le une alle altre e Java sara' in grado di localizzare i relativi files se essi si trovano nella medesima directory. Viceversa il nome del package e' in stretta relazione con la localizzazione fisica delle classi. Cosa vuol dire questo? Se la classe IlMioOggetto e' appartenente al package prova.text essa viene cercata da Java nel file prova/text/IlMioOggetto.class (stile unix) prova\text\IlMioOggetto.class (stile Windows) Ovvero i vari membri del package devono trovarsi nella sotto-directory (a partire dalla directory corrente) prova/text/

7 Fisica Computazionale I - 37 Questo dipende dalla impostazione della variabile d'ambiente CLASSPATH; noi abbiamo impostato CLASSPATH dando come unica directory quella corrente. Ma e' possibile dare piu' percorsi di ricerca. Per esempio: CLASSPATH.:/usr/local/classes in Unix CLASSPATH.;C:\usr\local\classes in Windows (notare che unix usa come separatore ":", mentre Windows usa ";") informa Java che i packages da importare possono essere sia nell'albero sottostante la directory corrente, sia nell'albero sottostante /usr/local/classes. Quindi e' possibile organizzare i propri files di classi separandoli e ordinandoli in piu' directories.

8 Fisica Computazionale I - 38 Il software fornito dalla Sun comprende un enorme numero di classi, divise in vari packages, che possono essere liberamente utilizzati nella costruzione di una applicazione. Alcuni di questi packages sono importati implicitamente (e quindi non vi e' bisogno dello statement import per utilizzarli). Sono le cosidette classi fondamentali di java. Un esempio e' l'oggetto String, che abbiamo piu' volte utilizzato in precedenza. In altri casi, invece, e' necessario importare esplicitamente il package. Si noti comunque che gli statements di import anche se superflui, non comportano nessun danno, ne' rallentano l'esecuzione del programma. Pertanto, scrivere ad esempio: import java.lang.*; non pregiudica nulla, anche se il package java.lang e' gia' importato implicitamente.

9 Fisica Computazionale I - 39 Viceversa, se il nostro programma utilizza una classe che appartiene ad un package da importare esplicitamente il compilatore ce lo segnalera' con um messaggio del tipo.........cannot resolve symbol....... seguito dal nome dell'oggetto sconosciuto. Bastera' aggiungere lo statement import del package mancante per risolvere il problema. I packages forniti da Sun hanno un nome tipo java.xxx o javax.xxx. La loro localizzazione fisica (cioe' la directory in cui risiedono) segue regole diverse da quanto detto in precedenza, cioe' non sono legati alla directory corrente, bensi' all'albero principale di installazione di Java. In linea di principio non dobbiamo quindi preoccuparcene, perche' compilatore javac e tutti gli altri comandi Java 'conoscono' il proprio albero di installazione e sono quindi in grado di rintracciare i packages importati da esso.

10 Fisica Computazionale I - 310 LE CLASSI FONDAMENTALI In Java i numeri e le variabili booleane sono tipi primitivi, non oggetti. Ma, per ogni tipo primitivo, Java definisce anche una classe, la cosidetta wrapper class; quindi il package java.lang comprende le classi Byte, Short, Integer, Long, Float, Double e Boolean. Ciascuno di questi oggetti e' sostanziamente caratterizzato da un'unica proprieta': il proprio valore, di tipo corrispondente al rispettivo tipo primitivo. Ma queste classi hanno anche molti metodi, che consentono di eseguire manipolazioni sulle stringhe, confronti, nonche' effettuare il 'parsing' di stringhe per trovare contenuti numerici da trasformare in variabili int, float, double, ecc. E' importante quindi imparare a consultare la documentazione che si accompagna ad ogni classe, per poterla utilizzare.

11 Fisica Computazionale I - 311 Ognuna di queste classi ha un costruttore che consente di creare un'istanza della classe e attribuirgli un valore, per esempio. Integer nn = new Integer(47); crea un'istanza nn con valore 47. Oppure: Boolean bb = new Boolean(true); crea un'istanza bb con valore true.

12 Fisica Computazionale I - 312 Supponiamo ora di voler trasformare una stringa in un numero intero, oppure in un numero double. Potremo utilizzare i metodi di parsing:......... String a = "42"; String b = "3.45"; int n = Integer.parseInt(a); double d = Double.parseDouble(b);......... avremo in conseguenza n che contiene il valore intero 42 e d che contiene il valore 3.45. Naturalmente il parsing di una stringa in un numero non e' sempre fattibile:......... String a = "ciccio"; int n = Integer.parseInt(a);......... Si ha un errore in esecuzione!

13 Fisica Computazionale I - 313 Si noti che qui stiamo usando dei metodi, in modo un po' diverso rispetto a quanto avevamo imparato finora: nei capitoli precedenti avevamo visto che si doveva: - creare un'istanza della classe - usare un metodo applicato a quella istanza. Invece, qui usiamo direttamente il metodo parseInt(..) (o parseDouble(..)) direttamente sulla classe, senza creare nessuna istanza specifica. Questo e' possibile perche' questi metodi delle wrapper classes sono metodi statici. Nel prossimo Capitolo capiremo meglio cosa vuol dire questo aggettivo (nel linguaggio Java esso e' un modificatore). Qui ci basta comunque usare il buon senso: il parsing di una stringa per ricavarne un numero non richiede la costruzione di uno specifico oggetto Integer o Double.

14 Fisica Computazionale I - 314 Non bisogna mai fare confusione tra tipo primitivo e corrispondente oggetto: e' il valore dell'oggetto che e' una variabile primitiva, non l'oggetto in se'. Cio' significa, ovviamente, che non potremo eseguire operazioni aritmetiche tra oggetti Integer, Double, ecc., ma bensi' tra i loro valori. Ognuna di queste classi ha un metodo per 'estrarre' il valore, per esempio:......... Integer nn = new Integer(33);......... int a = nn.intValue(); adesso a acquista il valore dell'oggetto nn.

15 Fisica Computazionale I - 315 LA CLASSE Math Consente di effettuare tutte le operazioni numeriche fondamentali, come radici, esponenziali, logaritmi, funzioni trigonometriche. Per questo essa possiede un gran numero di metodi (statici) corrispondenti. Possiede inoltre due campi che ci forniscono il valore delle due costanti matematiche piu' importanti, e e double pi = Math.PI; double e = Math.E; Qui impariamo una nuova regola di Java: i campi di una classe possono essere letti ed usati, in modo analogo ai metodi. In questo caso si tratta di campi statici (cioe' non legati ad una specifica istanza), ma il discorso vale anche per i campi non statici.

16 Fisica Computazionale I - 316 ALTRI PACKAGES java.applet java.awt java.beans java.io java.math java.net java.nio java.rmi java.security java.sql java.text java.util javax.* org.*

17 Fisica Computazionale I - 317 JAVA ARCHIVE FILES (JAR) I files JAR rappresentano il modo standard di archiviare e traferire le applicazioni Java. Si puo' archiviare cio' che si vuole in un file JAR: files di tipo.class,.java, fotografie, testi... Java e' in grado di gestire files JAR e puo' caricare ed eseguire i files.class direttamente dall'archivio. Quindi l'indirizzo di un archivio puo' essere direttamente nel CLASSPATH affinche' possa essere utilizzato. I files sono compressi in un archivio secondo lo standard ZIP. Lo SDK della Sun comprende una utility - il comando jar - che ci consente di creare e gestire archivi JAR. L'uso del comando jar e' molto semplice:

18 Fisica Computazionale I - 318 Creazione di un archivio Supponiamo di avere una serie di files nella sotto-directory arch della directory corrente Con il comando jar -cvf arch.jar arch crea un file arch.jar che contiene tutti i files contenuti in arch, comprese tutte le eventuali sotto-directories. Estrazione di un archivio jar -xvf arch.jar arch estrae tutti i files dall'archivio (provenienti dalla sotto- directory arch) e li ripristina nella sotto-directory arch della directory corrente.

19 Fisica Computazionale I - 319 Visualizzazione del contenuto di un archivio jar -tvf arch.jar Mostra il contenuto dell'archivio. Chi conosce Unix avra' notato che il comando jar e' quasi una fotocopia del comando tar (tape archive). La forma generale del comando e' quindi: jar -opzioni nomearchivio [path],[..],[..]

20 Fisica Computazionale I - 320 E' quindi possibile archiviare piu' directories simultaneamente (il comando "jar -cvf arch.jar" archivia tutto il contenuto dell'albero a partire dalla directory corrente), ripristinarle in tutto o solo in parte (indicando quali directories vogliamo estrarre) o semplicemente visualizzare (in tutto o in parte) il contenuto di un archivio.


Scaricare ppt "Fisica Computazionale I - 31 UTILIZZARE OGGETTI GIA' ESISTENTI Abbiamo visto che un programma Java puo' fare riferimento ed utilizzare oggetti, cioe' altre."

Presentazioni simili


Annunci Google