GUIDA JAVA |
|
|
INTRODUZIONE
Java nasce come linguaggio per la rete, per
affiancare l'HTML, il quale non è un linguaggio di
programmazione vero e proprio, e per dargli quella
sicurezza che l'HTML non ha. Da quando è nato Java
sulla rete si è iniziato a poter parlare di numeri
di carte di credito e di informazioni sicure. Per
eseguire un programma Java occorre avere uno
strumento, detto Java Virtual Machine, la quale
interpreta il bytecode generato dal compilatore Java
e lo esegue sulla macchina su cui è installato.
DOWNLOAD VELOCI
il
manuale Java (mattone dopo mattone)
-
Corso Java (20 Lezioni)
-
Scarica questa guida
|
IL
LINGUAGGIO JAVA
Java appena è uscito è stato accolto con molto
entusiasmo dalla comunità mondiale dei progettisti
di software e dei provider di servizi Internet,
questo perché Java permetteva agli utenti di
Internet di utilizzare applicazioni sicure e
indipendenti dalla piattaforma, che si possono
trovare in qualsiasi punto della rete. Java è quindi
nato come linguaggio per la rete, per affiancare l'
Hyper Text Markup Language (HTML), il quale non è un
linguaggio di programmazione vero e proprio, e per
dargli quella sicurezza che l'HTML non ha. Da quando
è nato Java sulla rete si è iniziato a poter parlare
di numeri di carte di credito e di informazioni
sicure, notizia che ha molto affascinato le grosse
società mondiali, le quali hanno trasformato la
vecchia Internet, rete ad appannaggio delle sole
università e centri di ricerca, nell'attuale mezzo
di comunicazione aperto a tutti.
Il linguaggio di programmazione Java è stato creato
verso la metà degli anni novanta, è il più recente
tra i suoi cugini, e per questo è ancora in fase
evolutiva, tanto che ogni anno circa ne viene
rilasciata una nuova relase. Da linguaggio nato solo
per la rete è divenuto un vero e proprio linguaggio
di programmazione, paragonabile, dal punto di vista
delle funzionalità, al più blasonato C++.
Java e la maggior parte degli altri linguaggi
possono essere paragonati solo dal punto di vista
delle funzionalità, perché sono fondamentalmente
molto diversi, infatti Java compila i sorgenti dei
suoi programmi in un codice detto Bytecode, diverso
dal linguaggio della macchina su cui è compilato,
mentre linguaggi come il C++ compilano i sorgenti
dei programmi in un codice che è il codice della
macchina (per macchina intendo computer + sistema
operativo) su cui è eseguito. Quindi per eseguire un
programma Java occorre avere uno strumento che è
chiamato Java Virtual Machine, la quale interpreta
il bytecode generato dal compilatore Java e lo
esegue sulla macchina su cui è installato. Grazie
alla Java Virtual Machine Java è indipendente dalla
piattaforma, infatti il programma compilato Java è
legato alla JVM e non al sistema operativo, sarà
quindi possibile eseguire lo stesso programma Java,
compilato una sola volta su una qualche macchina con
un compilatore Java versione X, su una piattaforma
Windows e su una piattaforma Linux, per fare questo
però c'è bisogno che sia Windows che Linux abbiano
installato una Java Virtual Machine che supporti la
versione X di Java. Le due JVM installate sulle due
piattaforme diverse sono lo stesso programma
compilato una volta per Windows ed una volta per
Linux, come avveniva con i programmi scritti in
linguaggi come il C/C++.
Una Java Virtual Machine è implementata anche nei
vari Browser (Come Netscape e Explorer) per poter
eseguire i programmi Java incontrati nella rete, i
cosidetti Applet. Questo però, unito al fatto che
Java ancora si evolve, causa degli ovvi problemi di
incompatibilità, infatti capita sempre che il più
moderno Browser supporti una versione precedente di
Java rispetto all' ultima versione rilasciata dalla
Sun Microsystem, inoltre bisogna tener presente che
non tutti gli utenti di Internet navigano usando
l'ultima versione di Netscape o di Explorer. Quindi
volendo creare un' applet ed inserirlo in un nostro
documento HTML, dobbiamo tenere presente questi
problemi, e cercare di fare un programma che sia
compatibile con la maggior parte delle JVM
implementate nei vari browser.
Un altro problema da affrontare è quello della
scelta del compilatore Java da utilizzare, infatti
esistono vari ambienti integrati per editare,
compilare, debuggare ed eseguire programmi Java,
come quelli della Broland, della Microsoft, della
Symantec. Tutti questi ambienti offrono dei tool di
sviluppo eccellenti, come editori grafici di
finestre, debugger molto interessanti, però hanno
due problemi, il primo è che si pagano, anche molto,
il secondo è sempre lo stesso della compatibilità,
infatti essi spesso si trovano indietro alla relase
della sun, ed inoltre aggiungono delle classi che
poi le JVM implementate nei browser non hanno.
Il mio consiglio è quallo di usare le JDK ( Java
Development Kit ) della Sun, le quali comprendono
sia il compilatore che la Java Virtual Machine per
eseguire i programmi da noi compilati, inoltre sono
freeware (non costano niente) e sono scaricabili
dalla rete ed i browser si adeguano pian piano a
questa versione di Java.
Se volete scrivere applet per i vecchi browser
dovete scaricarvi la versione 1.1 di Java, però
questa versione è niente alla versione attualmente
più gettonata, ovvero alla 1.2.2 ( Chiamata per
qualche motivo a me oscuro Java 2 , la si può
scaricare all'indirizzo http://java.sun.com/products/jdk/1.2/index.html
), alla quale farò riferimento anche io in questo
corso e per la quale Netscape versione 4.0x ed
Explorer 5 hanno implementato la Java Virtual
Machine (quasi tutta, io ho avuto qualche problema
con le Swing, che sono una libreria standard di Java
2).
Se avete intenzione di scaricarvi Java 2 vi
consiglio di farlo la mattina verso tra le nove e le
undici, perché il sito è affollato e lento, inoltre
il file da scaricare è una ventina di mega, se
volete potete scaricarvi anche la documentazione la
quale è molto utile, però anch' essa è di circa
venti mega.
Io ho appena scaricato e installato la prossima
versione, ovvero la Relase Candidate del Java 2
Software Development Kit versione 1.3 Relase
Candidate 1, e vi assicuro che se la 1.2.2 era
eccezionale questa è incredibile, ho anche appena
scoperto che è uscita la Relase Candidate 2 del JDK
1.3 e che a fine aprile uscirà finalmente la relase
(Io la aspetto, non ho voglia di passare un'altra
nottata in bianco per scaricarmi una cosa che verrà
rimpiazzata dalla relase tra meno di un mese).
Per scaricarvi il prodotto dovrete iscrivervi,
fatelo, l'iscrizione è gratuita.
Un ultimo problema che ha Java è la lentezza,
infatti, come già detto, esso è interpretato, quindi
le istruzioni Java prima di essere eseguite dalla
macchina vengono interpretate dalla JVM, ovvero per
eseguire ogni istruzione il computer eseguirà un
numero di istruzioni macchina che è più del doppio
delle istruzioni che eseguirebbe se la stessa
istruzione fosse stata scritta in C, quindi avrete
bisogno di computer veloci per eseguire bene
programmi Java, e di questo vi sarete sicuramente
accorti anche navigando sulla rete. Anche la memoria
è importante, si compila e si esegue anche con soli
32Mb di RAM, ma per fare le cose velocemente ne
occorrono almeno 64, pensate che l' ultimo ambiente
integrato della Borland, il Jbuilder 3, ha come
requisito minimo di RAM 96 Megabyte.
Per finire ritorno al Java Development Kit della Sun
Microsystem, con questo è possibile produrre tutto
il software che si vuole senza dover pagare diritti
di uso del prodotto come avviene con il Borland
Jbuilder, il Symantec Cafe, e il Microsoft Visual
Java, vi consiglio di leggervi la licenza d'uso che
troverete quando andrete a scaricare il JDK prima di
cominciare a produrre software. |
|
INTRODUZIONE ALLA
PROGRAMMAZIONE JAVA La principale
differenza tra Java e gli altri linguaggi di
programmazione ad oggetti è che mentre con questi
ultimi è possibile anche programmare ad oggetti con
Java si deve assolutamente programmare ad oggetti.
Quindi punto fondamentale a questo punto è spiegare
cosa vuol dire programmare ad oggetti.
Sostanzialmente la programmazione avviene allo
stesso modo dei linguaggi "normali", solo che sia i
dati che le funzioni che li manipolano sono
racchiusi in delle strutture dette classi. Le classi
sono dei prototipi di oggetti, ovvero sono delle
strutture astratte (non troppo vedremo) che possono
essere instanziate e quindi creare un oggetto (ma
anche più di uno).
La classe definisce tutte le proprietà degli oggetti
appartenenti a quella classe, detti attributi, e le
funzioni che verranno usate per agire su di essi,
detti metodi. Ad esempio è possibile definire una
classe delle persone, come segue:
Inizio classe persone
Attributo annodinascita
Metodo calcolaetà (annoattuale)
Fine classe persone
La classe delle persone così definita ha un
attributo che è annodinascita che sarà sicuramente
un numero intero ed un metodo che in base all' anno
attuale passatogli calcola l'età della persona.
Usando il formalismo di Java,per definire la classe
persone scriveremo:
class persone
{
public int annodinascita;
public int calcolaeta ( int annoattuale )
{
return ( annoattuale - annodinascita );
}
}
Come si vede abbiamo dichiarato sia il metodo che
l'attributo come public, vedremo tra poco cosa
significa, vediamo anche che la classe comincia con
{ e finisce con }, così anche i metodi. Questo
ricorda molto il C, e devo dire che la sintassi di
Java è molto simile, anzi quasi uguale a quella del
C, mentre per chi non conosce il C, le parentesi
graffe rappresentano il begin e l'end del pascal. La
classe avrà un cosiddetto costruttore (o più di
uno), che è un metodo particolare che di solito
viene utilizzato per inizializzare gli attributi
quando viene instanziata la classe in un oggetto,
esso è una funzione che non ha nessun tipo di
ritorno ed il nome uguale al nome della classe. Ho
detto che i costruttori possono essere più di uno,
che però il nome del costruttore deve essere lo
stesso di quello della classe, chi è abituato a
programmare con linguaggi non orientati agli oggetti
troverà tutto questo strano, però è possibile perché
Java fa il cosidetto overloading di funzioni, ovvero
funzioni con lo stesso nome che hanno parametri
diversi (detti in informatica parametri formali)
sono diverse, e al momento dell'invocazione viene
scelta la funzione in base al parametro (detto
parametro attuale). Questo vale per ogni metodo, non
solo per i costruttori.
class persone
{
public int annodinascita;
public String Cognome=new String();
// Costruttori
public persone(int annonascita)
{
this("Non Conosco");
this.annodinascita=annonascita;
}
public persone(String Cognome)
{
this(0);
this.Cognome=Cognome;
}
public persone(int annonascita , String Cognome)
{
annodinascita=annonascita;
this.Cognome=Cognome;
}
// Funzione che calcola l'età del soggetto;
public int calcolaeta ( int annoattuale )
{
return ( annoattuale - annodinascita );
}
}
Le linee che cominciano con // sono dei commenti,
vengono ignorati dal compilatore, vi sono altri due
tipi di commenti, quelli racchiusi tra /* e / che
permettono di definire commenti su più linee e
quelli racchiusi tra /** e */, che permettono sempre
di definire commenti su più linee, sono detti
commenti di documentazione, essi si devono trovare
subito prima la dichiarazione di classi, di membri
di classi (attributi o metodi) o costruttori, e
vengono inclusi nella eventuale documentazione del
codice generata automaticamente.
Nell'esempio vediamo che ci sono tre costruttori,
diversi per i parametri formali, che hanno lo stesso
nome, vediamo inoltre un nuovo attributo che è
Cognome, esso è una Stringa, definita come public
String Cognome=new String(); la parte prima
dell'uguale è chiara, lo è meno quella a destra,
quel new String() crea un nuovo oggetto della classe
String, e ne invoca il costruttore che non ha
parametri, questo è il modo standard usato da Java
per instanziare gli oggetti di una classe. Non deve
sorprendere che il tipo di dato stringa sia una
classe, in Java è possibile usare oggetti che
rappresentano tutti i tipi di dato del linguaggio,
inseriti per completezza del linguaggio, detti
involucri che a volte sono molto utili, è però
possibile anche usare i valori.
Quindi ad esempio ci troveremo a lavorare sia con
interi che con oggetti che rappresentano interi. Un
ultima cosa che salta all'occhio dall'esempio è che
i costruttori hanno volutamente dei parametri che
hanno lo stesso nome degli attributi, anche questo è
possibile in Java, il quale stabilisce che quando
c'è un assegnamento alla sinistra dell'uguale ci
deve essere l'attributo, e alla destra il parametro,
comunque se non vogliamo confonderci possiamo usare
il riferimento this, scrivendo ad esempio
this.annodinascita intendiamo l'attributo. This è un
riferimento all'oggetto, e nell'esempio lo troviamo
anche come invocazione di funzione this(0), in
questo caso esso è un riferimento ad un costruttore
dell'oggetto, in questo caso chiama il costruttore
persone (int annodinascita), con il valore 0. E'
quindi possibile in un costruttore chiamare un
costruttore diverso della classe stessa, a patto che
l'invocazione sia la prima istruzione del
costruttore e che il costruttore sia diverso da
quello attuale.
A questo punto siamo pronti a creare oggetti
appartenenti alla classe da noi appena definita,
abbiamo tre modi per farlo, perché abbiamo creato
tre costruttori, essi sono:
persone Pietro=new persone(1974);
oppure
persone Pietro=new persone("Castellucci");
oppure
persone Pietro=new persone(1974,"Castellucci");
ora vogliamo creare un altro oggetto della classe
persone
persone Lina=new persone(1975);
oppure
persone Lina=new persone("Marucci");
oppure
persone Lina=new persone(1975,"Marucci");
a questo punto ho creato due oggetti della classe
persone, essi sono in una relazione con la classe
detta di inst_of, gli oggetti si chiamano uno Pietro
e l'altro Lina, è possibile anche copiare i
riferimenti degli oggetti, ad esempio è possibile
scrivere:
persone Pietro2=Pietro;
Costruiti gli oggetti ne poso invocare i metodi,
questo si fa indicando Oggetto.Metodo, ad esempio è
possibile invocare i metodi:
Pietro.calcolaeta(2000);
Pietro2.calcolaeta(2000);
Lina.calcolaeta(2000);
Introduciamo adesso degli attributi e dei metodi
particolari, i cosidetti membri statici. Per come
abbiamo definito i membri della classe non ci è
possibile referenziare direttamente dalla classe
attributi e metodi ( persone.annodinascita è un
errore), questo perché essi lavorano su una istanza
della classe, ovvero su un oggetto, però a volte può
essere utile scrivere metodi e attributi che possano
essere invocati senza dover istanziare l'oggetto, ma
direttamente dalla classe, per fare questo occorre
dichiararli static, ad esempio:
class TitoliAziendaVattelapesca
{
public static int TassodiInteresse=3;
public String Proprietario=new String();
public static float InteressiMaturati (int Periodo)
{
return((Periodo * TassodiInteresse )/100)
}
TitoliAziendaVattelapesca(String nome)
{
Proprietario=nome;
}
}
Quindi potremo decidere ad esempio di instanziare un
oggetto della classe TitoliAziendaVattelapesca solo
se ci conviene, ad esempio facendo:
if
(TitoliAziendaVattelapesca.InteressiMaturati(12)>1000)
CompraAzioni(10000);
Dove CompraAzioni(int X) è una funzione che
instanzia X TitoliAziendaVattelapesca.
Introduciamo adesso la relazione is_a tra classi,
data una classe è possibile creare una nuova classe
da questa facendo come si dice in gergo una
specializzazione della prima classe. La nuova classe
creata è in relazione is_a con la prima. Creata una
classe studente dalla classe (detta superclasse)
persone, la nuova classe eredita dalla prima tutti i
metodi e gli attributi, con la possibilità di
definirne dei nuovo o di ridefinirne alcuni, in Java
l'estensione di una classe si esplicita con la
parola chiave extends.
class studente extends persone
{
int matricola;
// Costruttori
public studente(int annonascita)
{
super(annonascita,"Non Conosco");
}
public studente (String Cognome)
{
super(0,Cognome);
}
public studente(int annonascita , String Cognome)
{
super(annonascita,Cognome);
}
}
Come si vede dall'esempio la classe studente eredita
tutti i metodi e gli attrubuti della classe persone,
definisce un nuovo attributo matricola e nei suoi
costruttori chiama i costruttori della classe
persone, con super().
super() può essere, come this(), una invocazione di
un altro costruttore (tra parentesi vanno i
parametri eventuali) o un riferimento alla classe
(alla superclasse in questo caso), quindi
super.annodinascita rappresenta l'attributo
annodinascita della superclasse persone. Le
relazioni is_a e inst_of sono le due relazioni più
importanti dei modelli ad oggetti. Adesso concludo
con un esempio ed alcune considerazioni sull'esempio
per spiegare il significato del public che abbiamo
introdotto sopra, e del private e protected
(attributi e metodi possono essere dichiarati come
public, private e protected).
class A
{
public int a;
private int b;
protected int c;
// Suoi medodi, attributi e costruttori
}
class B extends A
{
public float a;
private float b;
protected float c;
// Suoi medodi, attributi e costruttori
}
class C
{
// Suoi medodi, attributi e costruttori
}
Abbiamo definito tre classi, A,B e C, B è definita
da A ridefinendone i tre attributi, da interi a
reali.
In A, nei suoi costruttori e nei suoi metodi ho
libero accesso ai propri attributi di tipo intero,
senza limitazioni, ovvero posso scriverli e leggerli
a piacimento.
In B e C accade lo stesso per i propri attributi, ma
vediamo cosa succede per quelli delle altre classi.
Ad esempio in B (in un suo metodo ) se scrivo
espressioni con a,b e c, scriverò delle espressioni
per dei float (in Java è importantissimo il tipo
delle espressioni), per referenziare invece gli
attributi omonimi di A da cui è ereditata, dobbiamo
scrivere come sappiamo, super.a, super.b e super.c
(e sono degli interi).
Il nostro compilatore Java non darà problemi per le
prime due ma ci darà errore per la terza, questo
perché il c di A è protected, questo vuol dire che è
possibile leggere e scrivere quell'attributo solo
all'interno della classe a cui appartiene, ma non è
possibile leggerlo e scriverlo da classi estranee o
da sottoclassi.
A questo punto mettiamoci in un metodo di C,
instanziamo qui dentro un oggetto della classe B (lo
chiamo b) e scriviamo le espressioni b.a, b.b e b.c
, il nostro simpatico compilatore a questo punto ci
darà buona solo la prima, questo perché la terza è
protected ed è quindi visibile solo nella classe di
appartenenza e la seconda è private, questo
significa che è visibile solo alla classe di
appartenenza e alle sue sottoclassi, e C non è
sottoclasse di B.
Sopra ho un po' barato, ovvero ho parlato di
attributi di classi e di oggetti come se fossero la
stessa cosa, ma in effetti lo sono, solo con la
piccola differenza che se accedo all'attributo di
una classe ( NOMECLASSE.NOMEATTRIBUTO )questo sarà
sicuramente static, e vi accederò solo in lettura, è
in pratica una costante. Quando instanzierò la
classe in un oggetto (NOMECLASSE NOMEOGGETTO= new
NOMECLASSE (parametri); ), accedendo allo stesso
attributo dell'oggetto ( NOMEOGETTO.NOMEATTRIBUTO )
accederò allo stesso valore di prima, e non potrò
modificarlo (è static). Se cercherò invece di
accedere ad un attributo non dichiarato static di
una classe avrò ovviamente errore, infatti questo
attributo verrà creato al momento della creazione
dell'oggetto della classe, ed il più delle volte
verrà inizializzato dal costruttore dell'oggetto.
Spero di essere stato abbastanza chiaro nella
trattazione dell'argomento, però devo dirvi che i
modelli ad oggetti sono piuttosto complicati, ed è
impossibile spiegarli in dettaglio in un solo
paragrafo, occorrerebbe un corso dedicato
interamente a loro. Ovviamente quello che vi ho
detto non è tutto sui modelli ad oggetti, ho solo
introdotto alcuni concetti che ci basteranno per
fare i nostri programmi in Java, se dovessi
accorgermi durante il corso di avere tralasciato
qualche punto importante per i nostri scopi il corso
aprirà sicuramente una piccola parentesi.
LE CATEGORIE DI WEBMASTER
Add Url -
Affiliazioni -
Applet Java -
Barre -
Banner Swish -
Bottoni -
Chat Webmaster -
Contatori Accessi -
Corso Web Marketing -
Directory Italiane -
Directory Straniere -
Domini -
Forum -
Frecce -
Frame -
Frontpage -
Google Adsense -
Google Pagerank -
Google Search -
Guadagnare con un sito -
Guestbook -
Guida Java -
Html -
Html Editor -
Icone -
Meta Tags -
Midi Web -
Mini Icone -
Msn Search -
News -
Paint Sho Pro -
Photoshop -
Perl -
Posizionamento Sito -
Programmi Grafica -
Programmi Webmaster -
Promozione Sito -
Raccolta Java Script -
Realizzazione Siti -
Scambio Banner -
Sfondi -
Spazio Web -
Template Frontpage -
Template Swish -
Webmaster Tools -
Ws Ftp -
Yahoo Search |
|
|