Introduzione

Cosa è Java (what)

Java è un linguaggio di programmazione nato neglianni novanta, e destinato a diventare in breve tempo, illinguaggio più utilizzato in assoluto. Nato per puriscopi di ricerca in ambito universitario, e non come in moltialtri casi, per volere di una multinazionale per conquistarenuove fette di mercato, Java si pone come un"super-linguaggio" che supera i limiti e i difettiche hanno altri linguaggi. La Sun Microsystems ha poi fattoin modo che dal linguaggio, si sia poi evoluta una serie difamose tecnologie (J.S.P., Servlet, E.J.B., Jini, R.M.I.,etc.) che si stanno diffondendo in molti ambiti del mondodella programmazione. Con il termine "Java" ci siriferisce sia al linguaggio, sia alla tecnologia cheracchiude tutte le tecnologie di cui sopra. In questo manualeci limiteremo a parlare del linguaggio.

- Breve storia di Java (who, where & when)

Nel 1992 nasce il linguaggio Oak (quercia) prodotto dellaSun Microsystems e realizzato da un gruppo di esperti enavigati sviluppatori, che formavano il cosiddetto"Green Team" , ed erano capitanati da JamesGosling, oggigiorno uno tra i più famosi e stimati"guru informatici" del pianeta. Sembra che il nomeOak derivi dal fatto che Gosling e i suoi colleghi, nelperiodo in cui svilupparono questo nuovo linguaggio, avesseroavuto come unica compagnia, quella di una quercia che sitrovava proprio fuori la finestra dell’ufficio in cuilavoravano.

In un primo momento la Sun decise di destinare questonuovo prodotto, alla creazione d’applicazioni complesseper piccoli dispositivi elettronici. In particolare, sembravache i campi strategici da conquistare in quegli anni, fosseroquello della domotica e quello della TV via cavo. Ma, inrealtà, i tempi non erano ancora maturi per argomentiquali il "video on demand" e gli"elettrodomestici intelligenti". Solo da pochissimianni, infatti, si iniziano a richiedere video tramiteInternet o TV via cavo, ed appartiene ancora ai sogni dimolte casalinghe l’idea di avere un "Robot"che svolga le faccende domestiche al loro posto.

Nel 1993, con l’esplosione di Internet (negli StatiUniti), nasce l’idea di trasmettere codice eseguibileattraverso pagine HTML. La nascita delle C.G.I. (CommonGateway Interface) rivoluzionò il World Wide Web.

Il mercato che sembrava più appetibile allora benpresto diventò proprio Internet. Nel 1994 vienerealizzato un browser che fu chiamato per breve tempo"Web Runner" (dal film "Blade Runner" ,il preferito di Gosling) e poi, in via definitiva,"HotJava".

Il 23 maggio del 1995 Oak è ribattezzatoufficialmente col nome "Java". Il nome questa voltaderiva dalla tipologia indonesiana di caffè di cui haabusato il Green Team durante il periodo di sviluppo dellinguaggio: per i nomi non hanno avuto molta fantasia! LaNetscape annuncia contemporaneamente la scelta di dotare ilsuo celeberrimo browser della Java Virtual Machine (J.V.M.),la quale, rende di fatto, Java un linguaggiomultipiattaforma. Inoltre la Sun Microsystems mette adisposizione gratuitamente il kit di sviluppo J.D.K. (JavaDevelopment Kit) sul sito www.java.sun.com . Nel giro di pochi mesi idownload del J.D.K. 1.02a diventarono migliaia e Javainiziò ad essere sulla bocca di tutti. La maggiorparte della pubblicità di cui usufruì Java neiprimi tempi, era direttamente dipendente dallapossibilità di scrivere piccole applicazioni in rete,sicure, interattive ed indipendenti dalla piattaformachiamate "applet". Nei primi tempi sembrava cheJava fosse il linguaggio giusto per creare siti Webspettacolari, ma in realtà, Java era ed è moltodi più che un semplice strumento per renderepiù piacevole alla vista la navigazione. Oggigiornoabbiamo altri strumenti per ottenere certi risultati conminor sforzo. Java è invece oggi un potente linguaggiodi programmazione che sta diventando sempre di più lasoluzione ideale ai problemi che accomunano aziende operantiin settori diversi (banche, software house, compagnied’assicurazioni) come la sicurezza. La Sun ha investitomolto in questi anni sul progetto Java ottenendo risultatistraordinari.

- Perchè Java (why)

Nei mesi che precedettero la sua creazione, nel mondoinformatico circolavano statistiche alquanto inquietanti. Inuna di esse, si calcolava che, in una prima release diun’applicazione scritta in C++ (all’epocalinguaggio leader indiscusso nella programmazione), fossepresente un bug ogni cinquanta righe di codice. Inun’altra si affermava che per un ottanta per cento, lapresenza di questi bug era dovuta fondamentalmente a treragioni: scorretto uso dell’aritmetica dei puntatori,abuso delle variabili globali e conseguente utilizzoincotrollato del comando goto. Infatti, tramitel’aritmetica dei puntatori, il programmatore ha adisposizione uno strumento tanto potente quanto pericoloso edifficile da utilizzare. Per quanto riguarda le variabiliglobali (ovvero le variabili che essendo dichiarateall’interno del programma chiamante risultanoaccessibili da qualsiasi funzione dell’applicazione inqualsiasi momento), rappresentano per molti programmatori,una scorciatoia troppo invitante per apportare modifiche alcodice. Giacché, il flusso di lavoro diun’applicazione non è sempre facilmenteprevedibile, per cercare di evitare che le variabili globaliassumano valori indesiderati, il programmatore avrà adisposizione il "famigerato" comando goto,che permette di far saltare il workflowdell’applicazione da una parte di codice adun’altra, senza tener conto più di tanto dellalogica implementativa.

Java è stato creato proprio per superare, a partireda queste ed altre statistiche, i limiti che gli altrilinguaggi hanno. Alcuni dei punti fermi su cui si basòlo sviluppo del linguaggio, furono l’eliminazionedell’aritmetica dei puntatori e del comandogoto. In generale si andò nella direzione di unlinguaggio potente, moderno, chiaro, ma soprattutto robusto e"funzionante". In molti punti chiave del linguaggioè favorita la robustezza piuttosto che la potenza,basti pensare all’assenza dell’aritmetica deipuntatori.

Gli sviluppatori che hanno realizzato a Java, hannocercato di realizzare il linguaggio preferito daiprogrammatori, arrichendolo delle caratteristiche miglioridegli altri linguaggi, e privandolo delle peggiori e dellepiù pericolose.

- Caratteristiche di Java

Java ha alcune importanti caratteristiche chepermetteranno a chiunque di apprezzarne i vantaggi.

Sintassi: è simile a quella del C e del C++,e questo non può far altro che facilitare lamigrazione dei programmatori da due tra i piùimportanti ed utilizzati linguaggi esistenti. Chi non hafamiliarità con questo tipo di sintassi puòinizialmente sentirsi disorientato e confuso, ma neapprezzerà presto l’eleganza e lapraticità.

Gratuito: per scrivere applicazioni commerciali nonbisogna pagare licenze a nessuno. Sun ha sviluppato questoprodotto e lo ha migliorato usufruendo anche dell’aiutodella comunità "open-source".

Robustezza: essa è derivante soprattutto dauna gestione delle eccezioni chiara e funzionale, e ad unmeccanismo automatico della gestione della memoria (GarbageCollection) che esonera il programmatore dall’obbligodi dover deallocare memoria quando ce n’èbisogno. Inoltre il compilatore Java, è molto"severo". Il programmatore è infatticostretto a risolvere tutte le situazioni "pocochiare" , garantendo al programma maggiori chance dicorretto funzionamento.

Libreria e standardizzazione: Java possiede unaenorme libreria di classi standard che forniscono alprogrammatore la possibilità di operare su funzionicomuni di sistema come la gestione delle finestre, deicollegamenti in rete e dell’input/output. Il pregiofondamentale di queste classi sta nel fatto che rappresentanoun’astrazione indipendente dalle piattaforme perun’ampia gamma di interfacce di sistema comunementeutilizzate. Inoltre se utilizziamo Java non avremo problemidi standardizzazione, come per esempio, compilatori checompilano in modo differente grazie alle specifiche dettateda Sun.

Indipendenza dall’architettura: grazie alconcetto di macchina virtuale ogni applicazione, una voltacompilata, potrà essere eseguita su di una qualsiasipiattaforma (per esempio un PC con sistema operativo Windowso una workstation Unix). Questa è sicuramente lacaratteristica più importante di Java. Infatti, nelcaso in cui si debba implementare un programma destinato adiverse piattaforme, non ci sarà la necessitàdi doverlo convertire radicalmente a seconda dellapiattaforma. E’ evidente quindi che la diffusione diInternet favorirà sempre di più la diffusionedi Java. Recentemente una statistica ha affermato che questolinguaggio diventerà il più utilizzato inassoluto a livello mondiale nel 2003, operando unostraordinario sorpasso al C++.

Java Virtual Machine: Ciò che rendepossibile di fatto l’indipendenza dalla piattaformaè la Java Virtual Machine, un software che svolge unruolo da interprete (ma non solo) per le applicazioni Java.Più precisamente dopo aver scritto il nostro programmaJava, prima bisogna compilarlo (per i dettagli riguardantel’ambiente e il processo di sviluppo, vi rimandiamo alparagrafo successivo). Otterremo così, nondirettamente un file eseguibile (ovvero la traduzione inlinguaggio macchina del file sorgente che abbiamo scritto inJava), ma un file che contiene la traduzione del nostrolistato in un linguaggio molto vicino al linguaggio macchinadetto "byte code". Una volta ottenuto questo filedobbiamo interpretarlo. A questo punto la J.V.M.interpreterà il byte code ed il nostro programmaandrà finalmente in esecuzione. Quindi, se piattaformediverse posseggono una Java Virtual Machine, ciòsarà sufficiente per renderle potenziali esecutrici dibyte code. Infatti, da qualche anno a questa parte, i WebBrowser più diffusi implementano all’interno diessi una versione della J.V.M., capace di mandare inesecuzione le applet Java. Ecco quindi svelato il segretodell’indipendenza della piattaforma. Si parla di"macchina virtuale" perché in pratica questosoftware è stato implementato per simulare unhardware. Si potrebbe affermare che il linguaggio macchinasta ad un computer come il byte code sta ad una Java VirtualMachine. Oltre che permettere l’indipendenza dallapiattaforma, la J.V.M. permette a Java di essere unlinguaggio multithreaded (caratteristica di solito deisistemi operativi), ovvero capace di mandare in esecuzionepiù processi in maniera parallella. Inoltre garantiscedei meccanismi di sicurezza molto potenti, e la"supervisione" del codice della GarbageCollection

Orientato agli oggetti: Java ci fornisce infattidegli strumenti che praticamente ci "obbligano" aprogrammare ad oggetti. I paradigmi della programmazione adoggetti (ereditarietà, incapsulamento, polimorfismo)sono più facilmente apprezzabili e comprensibili. Javaè più chiaro e schematico che qualsiasi altrolinguaggio orientato agli oggetti. Sicuramente, chi imparaJava, potrà in un secondo momento accedere in modopiù naturale alla conoscenza di altri linguaggiorientati agli oggetti, giacché, avrà di certouna mentalità più "orientata aglioggetti".

Semplice: in realtà relativamente a questoargomento bisogna fare una precisazione. Java è unlinguaggio molto complesso considerandone la potenza etenendo presente che ci obbliga ad imparare la programmazionead oggetti. Ma, in compenso, si possono ottenere risultatiinsperati in un tempo relativamente breve. Apprezzeremosicuramente le semplificazioni che ci offre Java durantequesto corso. Abbiamo già accennato al fatto che nonesiste l’aritmetica dei puntatori grazieall’implementazione della Garbage Collection.Provocatoriamente Bill Joy, vice-presidente della Sunmicrosystems negli anni in cui Java è stato creato,propose come nome sostitutivo di Oak il nome "C + + --" , a sottolineare che il nuovo linguaggio volevaessere un nuovo C++, ma senza le sue caratteristiche peggiori(o se vogliamo, senza le caratteristiche più difficilida utilizzare e quindi pericolose).

Sicurezza: ovviamente, avendo la possibilitàdi scrivere applicazioni interattive in rete, Java possiedeanche delle caratteristiche di sicurezza molto efficienti.Come c’insegna la vita quotidiana nulla è certoal 100%. Esistono una serie di problemi relativi allasicurezza di Java che ricercatoridell’Università di Princeton hanno scoperto ereso pubblici su Internet. Ma di una cosa possiamo esserecerti: la Sun sta dando priorità assoluta proprio allarisoluzione di questi problemi. Intanto, oggi come oggi, Javaè semplicemente il linguaggio "piùsicuro" in circolazione.