|
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.
|