*********************************************************************************
Appunti di JAVA
License: GPL
Author: Marco Segato <segatom(at)yahoo(dot)it> aka Mach <tumin17(at)yahoo(dot)it>
Website: http://www.marcosegato.tk/
irc: irc.azzurra.org ---> #lonelzero
*********************************************************************************

*********************************************************************************
Capitolo 0. Appunti di JAVA - "Un primo approcio"
*********************************************************************************


------------------------
 0.1 \ UN PO' DI STORIA
------------------------

  La storia di JAVA ha inizio nel lontano 1991, quando un gruppo della Sun
Microsystems progetta un linguaggio (chiamato in codice "Green") indipendente
dall'architettura su cui viene usato, e che puo' cosi' operare su hardware
profondamente diversi tra loro quali i sistemi embedded; non trovando pero'
nessun cliente interessato a questa tecnologia, la Sun, per non buttare al vento
milioni di dollari investiti, converte il progetto orientandolo al web, dove
cominciano a farsi pressanti esigenze come il bisogno di neutralita' rispetto
all'architettura e la sicurezza. Nel 1995 viene cosi' presentato al pubblico del
SunWorld un browser (HotJava) che scarica ed esegue in tempo reale dei programmi
chiamati applet: l'entusiasmo e' tale che gia' l'anno successivo sia la Netscape
che la Microsoft supportano JAVA nei loro browsers. Con il motto �write once,
run everywhere�, nel 1998 viene rilasciato JAVA2 e la sua imponente libreria,
che cresce a ritmi impressionanti soprattutto a partire da quest'ultimo anno,
quando la Sun ha accolto le pressioni della comunita' OpenSource per modificare
gradualmente la licenza di questo linguaggio in senso meno restrittivo.


--------------------------------------
 0.2 \ UN LINGUAGGIO MULTIPIATTAFORMA
--------------------------------------

  Per meglio comprendere quella che e' una vera e propria rivoluzione nel mondo
della programmazione, possiamo fare un parallelo con quello che e' considerato
un po' il rivale di JAVA, il C++. Esistono compilatori C++ un po' per tutte le
piattaforme, ma la procedura per eseguire un programma scritto con questo
linguaggio e' sempre la stessa: compilare il sorgente ed eseguirlo sulla stessa
macchina; sta proprio qui il suo limite: nessun programma compilato su un
particolare sistema puo' essere avviato su una macchina di tipo differente per
questioni architetturali (da approfondire a parte :)). Un programma JAVA invece,
per essere eseguito su sistemi operativi diversi, non deve essere ne' riscritto
ne' ricompilato! I vantaggi sono enormi: approcio multipiattaforma, uniformita'
di distribuzione dell'applicativo, ecc...
  Ma in concreto, come funziona allora un'applicazione JAVA? Quando si compila
un sorgente, si ottiene il bytecode, che pero' non e' codice eseguibile, ma
necessita di una Java Virtual Machine (JVM) che possiamo immaginare come una
sorta di livello intermedio che fa da tramite tra il nostro programma e il
sistema operativo vero e proprio:

                +==========+
                |          |  <===>  JVM  <===>  LINUX
                | BYTECODE |  <===>  JVM  <===>  WINDOWS
                |   JAVA   |  <===>  JVM  <===>  SOLARIS
                |          |  <===>  JVM  <===>  ALTRO..
                +==========+

  Tra i vantaggi che presenta JAVA, abbiamo che esso e' un linguaggio
completamente orientato agli oggetti (vedremo che cosa significa piu' avanti),
sicuro (data la sua provenienza dal web) e multithreaded (in poche parole puo'
fare piu' "cose" insieme). Naturalmente ci sono anche aspetti assai limitanti:
per le caratteristiche con cui e' stato creato, JAVA non puo' interagire a basso
livello con la macchina come fa invece il C, e la JVM, interpretando il
bytecode, produce un sensibile calo delle prestazioni.
 

---------------------------
 0.3 \ SOFTWARE NECESSARIO
---------------------------

  Per iniziare ad imparare a programmare in JAVA e' necessario procurarsi la
piattaforma JAVA 2 STANDARD EDITION (J2SE), che e' liberamente scaricabile ed
utilizzabile senza alcun limite dal sito http://java.sun.com/j2se/, oppure la si
puo' trovare molto spesso nelle riviste specializzate; e' composta di due parti
differenti:
 + JRE (Java Runtime Environment): rivolto agli utenti, permette la sola
   esecuzione del programma;
 + SDK (Software Development Kit): rivolto ai programmatori, permette
   l'esecuzione del programma ed include un compilatore insieme a tutti gli
   altri software di sviluppo per JAVA;
naturalmente noi dovremo avere l'SDK (circa 40 Mb), che comprende anche il JRE.


------------------------------
 0.4 \ INSTALLAZIONE DELL'SDK
------------------------------
 
  L'installazione e' molto semplice; e' sufficiente avviare il programma
d'installazione e modificare la variabile PATH di sistema:
 + WINDOWS 9X: lanciare il comando "sysedit" - aggiugere all'autoexec.bat la
   riga
      SET PATH=%PATH%;C:\J2SDKx.y.z\BIN
 + WINDOWS 2000/XP: Pannello di controllo - Sistema - Avanzate - Variabili
   d'ambiente
 + LINUX: da root modificare il file /etc/profile aggiungendo la riga
      PATH="$PATH:/usr/local/j2sdkx.y.z/bin"


--------------------------
 0.5 \ UN PRIMO PROGRAMMA
--------------------------

  Apriamo il nostro editor di testo preferito e salviamo quanto segue nel file
Hello.java:

     public class Hello
     { public static void main(String[] args)
       { System.out.println("Hello, World!");
       }
     }

compiliamo il sorgente digitando:
     javac Hello.java
viene prodotto il bytecode Hello.class che eseguiamo con:
     java Hello
Quello che otterremo sara' la stampa a video della frase:
     Hello, World!

  Analizzando meglio queste semplici righe notiamo che:
- la prima identifica il nome della classe e la avvia; questo nome deve
corrispondere al nome del file che abbiamo salvato, ed e' fondamentale che
corrispondano esattamente le lettere maiuscole e quelle minuscole; e' buona
norma per un programmatore dare un nome che inizi con una lettera maiuscola.
- nella seconda, il metodo "main" specifica da dove il programma comincera' ad
essere eseguito; il parametro "String[] args" e' necessario, e contiene gli
argomenti della riga di comando (che in questo esempio non ci sono);
- la terza contiene le istruzioni, che devono terminare con un punto e virgola.
 

--------------------------
 0.6 \ COMMENTI E JAVADOC
--------------------------

  Un buon programmatore aggiunge sempre commenti molto particolareggiati ai
propri sorgenti, anche nell'ottica, ormai sempre piu' frequente, di distribuire
il codice alla comunita': si semplifica notevolmente la lettura del codice
velocizzandone la comprensione, il tutto senza alcuna perdita delle prestazioni,
dato che il compilatore ignora ogni riga commentata. In JAVA si commenta allo
stesso modo del C/C++:

     // commento su una sola riga

     /* commento
     su piu'
     righe */
     
  Ma c'e' un potente strumento in piu' per gli sviluppatori JAVA che debbano
creare la documentazione dei loro applicativi: si tratta di javadoc. Javadoc e'
un'applicazione che analizza il file sorgente di una classe ed elabora
automaticamente un documento HTML che ne descrive le specifiche d'interfaccia,
il tutto grazie all'uso di tag specifici. Ma vediamo un esempio:
 
     /**
      Questa classe stampa la frase "Hello, World!".
      @author Mach
      @version 0.1, 09/03/2003
      @return La stampa della frase "Hello, World!"
      */
     public class Hello
     { public static void main(String[] args)
       { System.out.println("Hello, World!");
       }
     }

Se noi eseguiamo:
     javadoc Hello.java
otterremo nella stessa directory un file di nome Hello.html che descrivera'
dettagliatamente la nostra classe. Naturalmente abbiamo un esempio della
straordinaria potenza di questo strumento nell'intera documentazione di JAVA,
essa stessa ottenuta tramite javadoc.