Pronti per Java?

di Giuseppe Zanetti
beppe@freddy.iperv.it

Essendo Linux uno dei sistemi operativi preferiti dagli sviluppatori e fornitori di servizi Internet, non deve stupire il fatto che esistano dei porting molto aggiornati dei principali tool di sviluppo, compreso il JDK (Java Development Kit), lo strumento necessario per scrivere applicazioni in Java, il linguaggio ad oggetti creato da Sun per ``dar vita'' alle pagine WWW, fino ad ora statiche e noiose.

Lo scopo di questo articolo non è certamente quello di mostrare come fare per installare il JDK, cosa che sarebbe alquanto inutile, data la frequenza con cui escono nuove versioni dello stesso, bensì quello di analizzare uno strumento che è già disponibile su Linux e che probabilmente rappresenterà per Internet un passo fondamentale, forse ad un livello di importanza uguale o superiore alla creazione del WWW stesso.

Java è essenzialmente un linguaggio ``object oriented'', molto simile ad un C++ semplificato. La caratteristica che lo rende particolarmente adatto all'uso nel WWW è una elevata indipendenza dalla piattaforma hardware/software su cui gira, ottenuta mediante una ``virtual machine'', ovvero la simulazione di una macchina virtuale, dotata di proprie risorse, fra cui la capacità di eseguire, in multitasking, dei thread, ovvero dei processi in cui le condizioni di protezione della memoria risultano un po' rilassate, a vantaggio di una più semplice comunicazione fra i processi stessi.

L'uovo di colombo introdotto da Java consiste infatti nel trattare i programmi esattamente con la stessa filosofia di tutti gli altri oggetti reperibili da WWW, che, una volta caricati, possono essere ``visti'' sulla macchina locale. Poiché ``vedere'' un programma significa ``eseguirlo'', il client Java non deve far altro che eseguire il programma, possibilmente con i medesimi risultati su tutte le piattaforme.

L'idea di distribuire un codice oggetto eseguibile su piattaforme diverse da un apposito modulo runtime non è certamente nuova, basti pensare che già alcuni anni or sono il modo di funzionamento dell'UCSD pascal consisteva nel creare uno pseudo-codice (p-code) da far funzionare su macchine diverse mediante un runtime. La stessa tecnica è stata utilizzata per anni dalla Ryan-McFarland nei propri compilatori ed è ancora valida in alcuni prodotti attuali in cui si desideri avere la compatibilità col numero maggiore di piattaforme, come nel caso di un ambiente COBOL.

In Java non si parla tanto di ``programmi'', quanto di ``classi'', ovvero di oggetti che vengono definiti assieme ai metodi atti a manipolarli. Ad esempio, è possibile definire all'interno della classe ``Finestra'', non solo il modo con cui le finestre devono essere memorizzate in memoria, ma anche i metodi per manipolarle (apri, chiudi, ridimensiona, ...). È possibile ovviamente definire una classe ``Finestra con bordo'' che estenda le funzionalità di ``Finestra'', ereditandone le caratteristiche (concetto di ``ereditarietà'') e i metodi già definiti (concetto della ``riusabilità del codice'').

La libreria di classi fornite col JDK è molto ampia e comprende fra l'altro la classe ``AudioClip'', che permette di caricare e suonare un file audio. Per sentire la nostra macchina suonare definiremo semplicemente un oggetto di tipo AudioClip e gli diremo ``di suonarsi'' (in un linguaggio strutturato per classi non esiste più il concetto di funzione che lavora su un oggetto, ma quello di ``metodo'', che è una funzione propria, interna, all'oggetto).

import java.applet.AudioClip;

...

AudioClip clip;

...

clip = getAudioClip("http://www.sounds.com/clips/pinkpanter.au");
clip.play();

...
Per utilizzare la classe è necessario compilarla, mediante l'apposito compilatore presente nel JDK, e inserirla, magari dopo averla provata mediante il Netscape o l'apposito browser (anch'esso nel JDK), in qualche directory all'interno del proprio WWW.

Per fare in modo che il programma venga eseguito all'interno della pagina che l'utente richiede sarà sufficiente utilizzare il nuovo tag HTML ``applet'':


   <title>Pagina con animazione (da un demo di Sun)</title>
   <hr>

   Questo è un testo HTML di prova<P>

   <applet code=Animator.class width=200 height=200>
   <param name=imagesource value="demo">
   <param name=endimage value=10>
   <param name=soundsource value="audio">
   <param name=soundtrack value=spacemusic.au>
   <param name=sounds value="1.au|2.au|3.au|4.au|5.au|6.au|7.au|8.au|9.au|0.au">
   <param name=pause value=200>
   </applet>
Come si può vedere, è possibile chiamare l'applet mediante dei parametri, che potranno essere utilizzati per modificare il comportamento del programma.

Ovviamente i demo di Sun danno molta rilevanza all'aspetto ``giocoso'' (NDA: in quanto è risaputo che un demo viene scritto per attirare l'attenzione), e perciò è già disponibile una collezione abbastanza vasta di ``applets'' atte a visualizzare immagini e animazioni, creare effetti visivi e sonori, suonare musica, ... tutte cose che possono essere sfruttate senza troppa fatica per impreziosire le proprie pagine.

Essendo un prodotto rivolto allo sviluppo di applicazioni su Internet, è giusto aspettarsi che nel JDK siano presenti classi già pronte per la gestione, a livello molto alto, delle comunicazioni, ed in particolare per quanto riguarda l'utilizzo dei socket TCP/IP. In questo modo diventa assai semplice l'implementazione di nuovi protocolli di accesso alla rete, oltre che nuovi metodi di gestione dei tipi MIME.

Per capire le potenzialità insite in un approccio di questo tipo, immaginiamo di dover accedere all'URL myftp://www.mynet.it/images/paperino.xxx, ovvero ad un'immagine codificata in un formato grafico xxx e reperibile solamente mediante il protocollo myftp, attualmente non supportato dal browser. Mediante Java è possibile, non solo scrivere una classe in grado di visualizzare un qualunque file nel formato xxx, ma anche il software che permetta alla nostra macchina di parlare il protocollo myftp. Questo è importantissimo, in quanto abbiamo praticamente a disposizione uno strumento in grado di crescere e di autoaggiornarsi automaticamente. Ciò forse renderà inutile la versione 3.0 di Netscape ?

Java, come il C++, effettua un controllo molto stretto sui tipi, il che rappresenta certamente un vantaggio per il programmatore alle prime armi, ma tuttavia comporta qualche piccola rinuncia per l'utente esperto, magari proveniente dal C, dove tutto, o quasi, era permesso.

In realtà, almeno inizialmente, non sarà necessario diventare programmatori per aggiungere alla propria pagina WWW le caratteristiche più ``scenografiche'' offerte da Java, in quanto sarà sufficiente attingere il materiale bello e pronto da qualche raccolta di classi già pronte, ad esempio quelle disponibili su java.sun.com oppure sul sito italiano www.rmnet.it/JIS/

In futuro le cose cambieranno e, a meno che ditte come Microsoft ``inventino'' un dialetto più o meno ``visual'' anche per Java (voci di corridoio mi dicono che l'hanno già fatto), molte delle persone che ora lavorano su Internet scrivendo pagine HTML si troveranno davanti ad una sola possibilità per rimanere competitivi in questo mercato: imparare a programmare.

Dato che siamo in vena di analizzare i possibili riflessi sociali di questa nuova tecnologia, pensate solo per un momento alla possibilità di scrivere una ``big-application'' come un wordprocessor in modo portabile e coerente fra le varie piattaforme: un'unica versione che funzioni su tutte le macchine, senza bisogno di ricompilazione. La ``guerra'' dei produttori di software verrebbe così spostata dal terreno del sistema operativo a quello dell'applicazione e si dovrebbe tenere in considerazione l'ipotesi di fornire al cliente un kernel robusto e funzionale e non solamente una interfaccia utente carina. È probabile che le software house ci stiano già pensando, alcune con gioia, altre con un po' di timore.

Per maggiori informazioni:


articolo pubblicato anche sul giornal i2unews