1. Java: un linguaggio di programmazione per applicazioni multimediali
e multiambiente
1.1 Introduzione
Il linguaggio di programmazione e l'ambiente Java sono stati sviluppati dai ricercatori della Sun
Microsystems al fine di risolvere i più comuni problemi della programmazione moderna, primi fra
tutti la semplicità e la portabilità. Ciò rientra nell'ambito di un progetto più generale il cui scopo
consiste nel portare software avanzato anche su macchine piccole, ma molto diffuse, come i PC.
Inizialmente, i ricercatori della Sun avevano pensato di usare il C++, poi però problemi di complessità
e di portabilità hanno condotto alla implementazione di un nuovo linguaggio di programmazione, Java
(per maggiori dettagli si veda Evoluzione del linguaggio Java).
Java è un linguaggio di programmazione indipendente dalla piattaforma, completamente orientato
all'oggetto e multi-threaded. Oltre a queste moderne caratteristiche, esso dà la possibilità di creare
applicazioni (applet) in grado di essere richiamate ed eseguite da apposite applicazioni client del
World Wide Web (Hotjava, Netscape 2.0). E' stata proprio quest'ultima caratteristica, unica nel suo
genere, a rendere Java subito molto popolare nel giro di qualche mese. Infatti, a pochi anni dalla sua
invenzione, il WWW è divenuto un vero e proprio ambiente di lavoro e sviluppo che necessita di
risorse sempre più evolute (si pensi alla creazione dei form e dell'interfaccia CGI, oltre allo sviluppo
dei MIME). Ciò che mancava al WWW era uno specifico linguaggio di programmazione, le cui
peculiarità fondamentali dovevano essere necessariamente l'indipendenza dalla piattaforma usata dal
client e la sicurezza. Entrambe queste caratteristiche erano possedute da Java al momento dell'uscita
del WWW.
Nonostante ciò, è importante ribadire che Java può essere usato come un linguaggio di
programmazione indipendente dal WWW. Pur assomigliando esteriormente al C e al C++, Java
tuttavia differisce da essi per alcune caratteristiche fondamentali. In particolare, Java è totalmente
orientato all'oggetto. A differenza del C++ che deve essere compatibile con il C, in un programma
Java tutte le istruzioni sono contenute nelle classi, le quali, una volta compilate, costituiscono ognuna
un modulo a sé stante. Inoltre in Java non esiste la possibilità di accedere direttamente alla memoria.
Non sono previsti né puntatori, né funzioni di allocazione e disallocazione della memoria. Questa
caratteristica, se da una parte fa perdere flessibilità al linguaggio, rende Java particolarmente sicuro,
affidabile e robusto. Infatti, tutto ciò che è definito privato (private) è effettivamente escluso da un
accesso non permesso, mentre nel C++, attraverso i puntatori, si può facilmente accedere
direttamente a ciò che è stato definito privato e quindi la dichiarazione di privato è comunque
sorpassabile. Inoltre, in Java l'impossibilità di manipolare direttamente la memoria rende più affidabili
i programmi. Infatti, la maggior parte degli errori che si verificano in fase di esecuzione in un
programma scritto in C o C++ sono dovuti ad accessi incorretti alla memoria eseguiti dai puntatori e
dalle funzioni di allocazione e disallocazione della memoria. In Java, invece, la gestione
dell'allocazione e della disallocazione della memoria è gestita automaticamente (automatic garbage
collection).
Inoltre in Java si possono implementare più thread contemporaneamente, ovvero un singolo
programma può eseguire più compiti separati nello stesso tempo. Questa caratteristica non è presente
nel C++. Infine, attraverso i metodi nativi, un programma Java può includere programmi scritti in C e
C++, dando la possibiltà al programmatore di usare il vecchio software che egli ha già sviluppato con
questi linguaggi. I metodi nativi in Java forniscono pure un mezzo che consente di accedere
direttamente alla memoria nei casi in cui ciò si renda indispensabile.