MokaByte 67 - 8bre 2002 
Java for beginners: passare da Visual Basic a Java
di
Massimiliano Bigatti
Sebbene Visual Basic 6.0 e Java siano linguaggi molto differenti, spesso si é sentito parlare di Java come del nuovo Visual Basic. Come VB ha portato la semplicità nello sviluppo di applicazioni per Windows, Java porta semplicità nello sviluppo di applicazioni Internet, ma non solo.
Visual Basic offre una grande potenzialità per lo sviluppo di applicazioni desktop e presenta un linguaggio di facile comprensione, tanto é vero che la sua versione semplificata (VBA) é il linguaggio di scripting utilizzato negli applicativi da ufficio di Microsoft e nelle pagine ASP.
Java, sebbene con una struttura più elegante ed una sintassi mutuata dal linguaggio C, condivide con Visual Basic una certa semplicità di programmazione (ad esempio entrambi hanno la gestione automatica della memoria) anche se nel contempo la libreria di base di Java ed alcuni aspetti del linguaggio lo rendano più potente di VB, come ad esempio il supporto più completo al multithreading.

Object Oriented
Una differenza sostanziale é inoltre il fatto che Java é orientato agli oggetti, mentre VB é basato su componenti. L'utilizzo degli oggetti é una cosa a cui non si può fare a meno dopo che é stata provata, come ad esempio la rotellina di scorrimento del mouse. L'approccio agli oggetti consente di isolare meglio il codice e rendere il programma più modulare. E' vero che richiede uno sforzo iniziale maggiore, ma, se ben dosato, il tempo necessario é generalmente ben speso; agli inizi degli anni '90, quando esplose la programmazione orientata agli oggetti, si pensava che questa risolvesse completamente i problemi di riuso del codice, ma cioé non é risultato vero. Infatti, é vero solo in parte: é facile il riuso di codice all'interno di una stessa applicazione ma risulta ancora un po' difficile il riuso attraverso le applicazioni. Ovviamente, il codice prodotto da sviluppatori esperti in Java può avere caratteristiche di riusabilità maggiori finanche totali.
Comunque, Visual Basic si avvicina agli oggetti nel suo modo particolare. Consente infatti di:

· creare oggetti;
· simulare l'ereditarietà;
· utilizzare una sorta di polimorfismo.

Si noti però che il polimorfismo viene implementato tramite i parametri opzionali e che l'ereditarietà, viene simulata con la delega. Questa non rappresenta un valido sostituto all'ereditarietà: si pensi ad una classe dotata di molti metodi ed a una sottoclasse che aggiunga anche solo un metodo alla classe padre. Questo é un caso frequente, ma con la delega si é costretti a riscrivere tutti i metodi nella sottoclasse richiamando i metodi relativi dell'oggetto delegato. Visual Basic ha strumenti che automatizzano questo aspetto, ma il codice prodotto dovrà essere manutenuto, e non ci sono strumenti per questo in automatico!
In merito al polimorfismo di Visual Basic: la programmazione ad oggetti ha lo scopo di rendere il codice più chiaro. In un linguaggio orientato agli oggetti, ogni metodo polimorfico ha differenti firme (un differente insieme di parametri); utilizzare i parametri opzionali per simulare il polimorfismo, oltre ad essere un meccanismo meno flessibile, costringe a mettere tutto il codice in un unico metodo di fatto riducendo la chiarezza del codice. Ovviamente sono possibili codifiche alternative per spezzare il contenuto del metodo, ma la soluzione, purtroppo, non é mai elegante.
Diventa quindi di fondamentale importanza apprendere bene le basi della programmazione ad oggetti. Un libro che può essere utile é [1] a cui può seguire, quando si abbia acquisito dimestichezza, [2].

 

Strumenti di sviluppo
Quando si parla di Java, si intende Java2, il successore al primo Java nato nel marzo del 1995. Java2 non é radicalmente diverso dal precedente e condivide con il Java originale la sintassi del linguaggio ed il fatto di essere uno strumento basato sulla riga di comando. Dal sito di SUN é possibile scaricare il Java2 SDK che contiene il runtime per eseguire i programmi Java e gli strumenti di sviluppo.
Questo vuol dire che per sviluppare con Java é necessario tornare ad utilizzare la console?
Non necessariamente (anche se molti sviluppatori esperti conoscono la produttività che una buona console - magari Unix - può dare): esistono una serie di strumenti visuali, alcuni addirittura gratuiti che possono essere utilizzati per sviluppare con Java:

  • SUN One Studio (ex Forté for Java). Forté è una società che produceva, tra le altre cose, strumenti di sviluppo. Tempo fa è stata acquistata da SUN che ora distribuisce gratuitamente il prodotto da suo sito web. I sorgenti di questo tool sono disponibili open source su Internet al sito http://www.netbeans.org che ne fornisce anche una distribuzione gratuita.
  • Borland JBuilder. La Borland/Inprise è una presenza storica nell'ambiente dei sistemi di sviluppo.Il suo C++ Builder è un prodotto che tiene degnamente testa a Microsoft Visual C++ ed il suo Delphi è noto ed apprezzato per le sue potenzialità. Borland produce anche JBuilder, un sistema di sviluppo basato su Java2.
  • Visual Age for Java. Questo strumento, potente ma dalle importanti pretese in fatto di hardware, è lo strumento di sviluppo per Java della famiglia Visual Age di IBM. Il colosso mondiale è tra i maggiori sostenitori di Java ed ha contribuito significativamente alla definizione delle specifiche di Java per la versione enterprise. L'impegno profuso da IBM per Java è riscontrabile nelle potenti funzioni di Visual Age, sopratutto nell'area di integrazione con altri sistemi IBM (ovviamente!).
  • Eclipse. E' la nuova generazione di strumenti di sviluppo di IBM sfociata in un prodotto open source. E' scaricabile dall'indirizzo http://www.eclipse.org


Un cambio di mentalità
Visual Basic e Java hanno un approccio allo sviluppo radicalmente diverso. Quando si lancia VB, spesso una delle prime cose che viene visualizzata é la finestra di disegno dell'applicazione: é un irresistibile invito all'opera! In Visual Basic si é spinti a partire dallo sviluppo dell'interfaccia utente dell'applicazione - ed é proprio questa l'intenzione del suo creatore, Alan Cooper [4].
In Java, ed in generale in tutti i linguaggi ad oggetti, si tende a pensare al problema da risolvere non in funzione del come, ma del cosa. In altre parole si pensa in termini di oggetti e non di algoritmi. Estremizzando si può dire che nella Object Orientation l'algoritmo non è importante.
In un mondo dove è importante l'architettura, molto tempo viene speso a progettare, più che a scrivere. A pensare alle cose invece che agire: in fase di design ci si occupa di progettare la struttura dell'applicazione, pensando alle entità che esistono nel problema: queste diverranno classi Java.
Questa è la fase che, solitamente, in Visual Basic corrisponde alla definizione dei componenti da realizzare. In questa fase vengono definite le procedure che comporranno l'applicazione verranno poi posizionate nel Visual Basic Module opportuno.
Anche in Visual Basic è possibile definire classi, ma questo non è l'unico modo possibile per sviluppare in VB: Java impone al programmatore di pensare in termini di oggetti. Questo é importante, più di quanto sembri: si provi a sviluppare in un certo periodo ad oggetti e poi tornare su un linguaggio misto: ad ogni momento si é sempre tentati di semplificare le cose introducendo codice procedurale. Questo non é un male assoluto, ma alla fine, con un linguaggio misto si produrrà codice misto che é meno leggibile e manutenibile di un programma completamente ad oggetti.

 

Multipiattaforma e sicurezza
Il risultato della compilazione del codice Java non é un codice oggetto od un eseguibile come per Visual Basic: é un codice eseguibile (bytecode) pensato per un processore "immaginario" ed implementato nella Virtual Machine per Java.
Quando le classi (file con estensione .class) vengono eseguite, il bytecode in esso contenuto viene caricato in memoria ed interpretato dalla Virtual Machine. Questo meccanismo consente, oltre alla realizzazione della multipiattaforma (é sufficiente avere una Virtual Machine per Java sui diversi sistemi su cui si vuol eseguire codice Java), anche controlli di sicurezza più accurati di quanto possibile con il codice nativo. Quest'ultimo, infatti, agisce direttamente nel processore e con la memoria del computer in modo incontrollato. Il codice Java deve passare dalla Virtual Machine che dunque può filtrare eventuali operazioni dannose o semplici bug, come l'accesso ad un array al di fuori dell'indice massimo.
Ma questo vuol dire che Java é un linguaggio interpretato?
Non proprio. Infatti, le nuove Virtual Machine utilizzano una tecnlogia chiamata Hotspot, che effettua la compilazione del bytecode in codice nativo mentre il programma é in esecuzione. Questa operazione viene svolta in congiunzione ad operazioni di ottimizzazione del codice. Il risultato é che le performance di codice Java di tipo computazionale sono molto buone e comparabili ai linguaggi compilati. I programmi con interfaccia utente grafica, lenti nelle prime versioni di Java, con l'evoluzione delle Virtual Machine e l'aumento di potenza dei computer ha raggiunto livelli di responsività comparabili ad applicazioni Visual Basic.

 

Sostituzioni, ottimizzazioni e cosa non si può fare in Java
Il linguaggio Java assomiglia al C piuttosto che al BASIC, ma molti concetti di base sono i medesimi: esistono le strutture di controllo classiche, come If, For e While. I tipi di dati hanno talvolta nomi diversi ma per praticamente ogni tipo di dato VB, ne esiste un corrispettivo Java. Anche per quanto riguarda gli operatori, Java dispone di quelli basilari con cui é possibile implementare altri, magari un po' esotici, presenti in Visual Basic. Anche per quanto riguarda le funzioni del linguaggio e le istruzioni, il 90% di quanto possibile in Visual Basic é realizzabile con la libreria di base di Java, oppure implementabile facilmente. (Per una tabella comparativa ed esempi di realizzazione delle funzioni mancanti, si veda [3]).
Java ha poi approcci differenti rispetto a Visual Basic in merito a molti aspetti, vediamone alcuni.

 

Applicazioni desktop
In merito alle applicazioni, esiste una fondamentale differenza tra VB e Java: in Visual Basic si é abituati al posizionamento fisso dei controlli nella Form. Le interfacce si disegnano disegnando i controlli in uno specifico punto della Form e li si dimensiona nel modo voluto. Cosa succede se l'utente ridimensiona la finestra? I controlli rimangono fermi nella stessa posizione e immutati nella dimensione, anche se la conformazione dell'interfaccia avrebbe suggerito un comportamento differente. Ad esempio, un utente che ridimensioni una finestra contentente solo una tabella potrebbe aspettarsi che la tabella cambi dimensione al variare della dimensione della finestra.
Per ottenere un comportamento del genere, in Visual Basic viene utilizzato l'evento Resize della Form, oppure con il supporto di software di terze parti, ma entrambi gli approcci possono risultare poco praticabili per via della complessità o del costo.
Java supporta il posizionamento fisso, ma é dotato anche di un sistema che consente di gestire in modo semi automatico il ridimensionamento delle finestre: i Layout Manager. Questi oggetti consentono di definire con che logica deve essere gestito lo spazio quando una finestra viene ridimensionata: un piccolo sforzo iniziale in più nell'utilizzare i layout manager compensa nell'avere automaticamente implementato il supporto al ridimensionamento delle finestre.

 

Controlli
Java ha il suo proprio modello a componenti, chiamati Javabeans. Si può pensare ai Javabeans come controlli ActiveX multipiattaforma. Come per Visual Basic, esiste un mercato di componenti Javabeans visuali che implementano diverse funzionalità utili, come calendari o campi di testo formattati.
I componenti Javabeans possono essere inoltre non-visuali: questa tipologia é particolarmente utilizzata per la strutturazione di applicazioni Web. La logica dell'applicazione viene infatti racchiusa in specifici componenti, in modo da raccoglierla in un unico punto, che saranno poi utilizzati dai componenti di presentazioni, come pagine dinamiche o Servlet.
I controlli aggiuntivi di Visual Basic sono il modo "classico" é più semplice per il riutilizzo del codice: spesso lo sviluppatore crea componenti che svolgono una determinata funzione da riutilizzare all'interno delle proprie applicazioni. Spesso si sviluppa una applicazione "per componenti", creando controlli aggiuntivi anche molto verticali che andranno poi a formare l'applicazione. Alcune volte questo approccio é più produttivo nel creare tanti file di classi (cls).
In Java l'approccio é contrario: le classi Java sono di per loro riutilizzabili da diverse applicazioni. Non é necessario creare obbligatoriamente dei Javabean per agevolare il riutilizzo: questo, in Javam é promosso dall'organizzazione delle classi in package e file jar. In questo modo si può anche risparmiare il tempo necessario a produrre gli elementi di contorno per l'impacchettamento dei bean.
Risulta dunque più facile, al fine di realizzare un'applicazione per componenti, limitarsi alla progettazione delle classi dell'applicazione.
Lo strumento stesso di sviluppo é differente per i due linguaggi: in Visual Basic un progetto complesso con molte classi, moduli e Form é complesso da gestire. Con gli strumenti classici di sviluppo Java (e la sua organizzazione gerarchica) é prassi comune la gestione di progetti composti da molti file.

 

Applicazioni Web
Le applicazioni Web sono sicuramente la tipologia applicativa che meglio esprime le potenzialità di Java, che gode di una ottima affermazione sul lato server, ma di una scarsa adozione sul lato client. Esistono però esempi di successo sul client: eccone due. La Lehman Brothers ha creato una complessa applicazione Swing da utilizzare nel suo prodotto client/server per le banche [web1]; gli schermi informativi della metropolitana milanese sono gestiti da un client scritto in Java.
Le tecnologie server-side di Java sono diverse, per la creazione di applicazioni Web rivestono particolare importanza quelle di presentazione, che si occupano di formattare in modo intelleggibile (tipicamente in HTML, ma anche WML, per esempio) i dati dell'applicazione. Queste sono: le Servlet e le Java Server Pages (JSP). Possiamo paragonare le servlet ad estensioni ISAPI, che però funzionano su tutte le piattaforme che supportano Java. Le JSP sono invece l'equivalenti Java delle pagine ASP. Tra JSP ed ASP esistono moltissime similitudini, ma anche qualche differenza: ad esempio, in JSP, le parti di codice sono delimitate, come in ASP, ma con i caratteri <% e %>. Diversamente da ASP, nelle pagine JSP é necessario dichiarare il tipo delle variabili, ad esempio:

<%
double lire;
double euro;
%>

Quando in ASP é sufficiente dichiarare l'uso di una variabile con la parola chiave Dim.


Conclusioni
In questa breve presentazione abbiamo appena accennato agli argomenti che é necessario approfondire per sviluppare in modo proficuo in Java. Alcune cose sono però chiare: per prima, é necessario un cambio di approccio. La natura orientata agli oggetti di Java richiede uno sforzo di organizzazione e progettazione iniziale maggiore, che però viene ricompensato da una più agevole manutenzione. In secondo luogo, lo sviluppo delle applicazioni ha, in aree importanti, un approccio diverso: le applicazioni desktop devono essere pensate in modo indipendente al sistema operativo; l'organizzazione della libreria di controlli aggiuntivi dello sviluppatore può risultare in uno snellimento della libreria stessa, in virtù della differente organizzazione di Java; le applicazioni Web potranno fare uso di un linguaggio più evoluto nelle pagine dinamiche e di una maggiore organizzazione delle logiche operative.
Per ulteriori informazioni, risorse, indicazioni di libri per imparare Java a partire da una conoscenza Visual Basic vi consiglio [web2].

Riferimenti e bibliografia
[web1] http://www.informationweek.com/story/IWK20010823S0007
[web2] http://www.bigatti.it/vb2java - http://www.mokabyte.it/vb2java

[1] Stephen Gilbert and Bill McCarty - "Object-Oriented design in Java", Waite Group Press
[2] Gamma et altri - "Design Patterns", Addison Wesley
[3] Massimiliano Bigatti - "Da Visual Basic a Java", Hops Libri
[4] Alan Cooper -"About Face: the essentials of user interface design", IDG Books


Massimiliano Bigatti é autore del libro "Da Visual Basic a Java" , pubblicato da Hops Libri. E' certificato, tra le altre, come SUN Certified Enterprise Architect for Java Platform, Enterprise Edition Technology, si occupa di architetture applicative basate su Java, technical writing e del portale http://javawebservices.it.

MokaByte® è un marchio registrato da MokaByte s.r.l. 
Java®, Jini® e tutti i nomi derivati sono marchi registrati da Sun Microsystems.
Tutti i diritti riservati. E' vietata la riproduzione anche parziale.
Per comunicazioni inviare una mail a info@mokabyte.it