MokaByte
Numero 17 - Marzo 1998
|
|||
|
Visual Cafe 2.0 |
||
Massimo Carli |
|
||
Introduzione
Symantec Visual
Cafe 2 si definisce come il primo tool visuale (RAD) progettato appositamente
per il linguaggio Java attraverso il quale è possibile creare, in
modo WYSIWYG (What You See Is What You Get), applicazioni ed applet. La
novità, rispetto alla versione precedente del prodotto, è
la completa compatibilità con il JDK1.1 (viene fornito il JDK1.1.3)
e conseguentemente la gestione delle API per l'accesso ai Database (JDBC),
la creazione dei file Jar e la creazione di componenti Bean. La versione
a disposizione per questa prova è la Web Development e viene fornita
con i seguenti manuali:
Getting Started:
Installation and Tour User's Guide
Visual Page
User's Guide
Visual Page
Getting Started
che, con il ricco help in linea, permettono di avere tutto il necessario per acquisire padronanza con il tool, già di per sé molto intuitivo. Per questo test abbiamo usato una macchina con processore Pentium 166 e 64M di RAM. La configurazione minima per l'installazione prevede, comunque, la classica combinazione di processore 486DX con almeno 16M di RAM.
Installazione
e Desktop
L'installazione
del prodotto è molto semplice e consiste nella esecuzione del file
di Setup. Nella parte conclusiva viene chiesto se aggiornare il file autoexec.bat
in modo automatico o se provvedere manualmente. Consiglio la prima scelta
in quanto vengono settate in modo automatico le variabili di ambiente CLASSPATH
e PATH e viene comunque mantenuta una copia di backup relativa alla configurazione
precedente. Terminata la fase di installazione, che richiede circa un paio
di minuti, e dopo aver riavviato il computer, è possibile eseguire
VisualCafe 2 cliccando sulla corrispondente icona nel menu delle applicazioni
di Windows.
All'avvio, verrà
visualizzata la barra degli strumenti con i bottoni raggruppati secondo
le seguenti funzionalità:
Form Designer: Permette di creare l'interfaccia grafica dell'applicazione o applet. È sufficiente scegliere il componente nella palette dei bean e posizionarlo , con il metodo point and click, sul frame. A questo punto l'oggetto verrà visualizzato e se ne potranno modificare, con il mouse, le dimensioni e la posizione. Una volta selezionato un componente sul Form Designer, verrà aggiornata la Property List che ne visualizzerà le proprietà, mentre con un doppio click verrà visualizzato il codice nella Source Window. È anche possibile aggiungere altre finestre di dialogo o frame attraverso l'opzione Insert del menu principale.
Property List: Ogni componente che viene inserito attraverso il Form Designer rispetta le specifiche JavaBean. Un Bean, oltre che dagli eventi che può generare o gestire e dalle azioni che può eseguire, è caratterizzato dalle proprietà. Esse non sono altro che l'insieme dei parametri che permettono di distinguere un oggetto rispetto ad un altro dello stesso tipo. Esse sono elencate nella Property List la quale è divisa in due colonne: la prima contiene il nome della proprietà mentre la seconda contiene i tool di editazione che vanno dal semplice TextField per i valori di tipo String o numerici, a tool più complicati come ad esempio la palette per la scelta dei colori. Si noti come il tutto rispetta le specifiche JavaBeans secondo le quali ad ogni proprietà viene assegnato un nome ed un editor. Per modificare una proprietà dell'oggetto è sufficiente cliccare (dare il focus) sul valore da editare. La modifica fatta sarà notificata all'oggetto corrispondente qualora si confermi l'inserimento oppure si selezioni un'altra proprietà o oggetto. La Property List contiene anche, nella parte superiore, una choice che permette di scegliere l'oggetto da editare senza necessariamente evidenziarlo nel Form Designer.
Source Window: Visual Cafe 2 permette di lavorare contemporaneamente in modo visuale ed in modo tradizionale con la Source Window , che non è altro che un text editor in cui vengono evidenziate, con colore diverso, le parole chiave del linguaggio. Utile è il fatto che esiste, in ogni istante, perfetta corrispondenza tra la rappresentazione visuale (con PropertyList e FrameDesign) ed il codice generato. Se ad esempio, modifichiamo il nome di una variabile corrispondente ad un oggetto inserito nel FrameDesigner (proprietà Name nella PropertyList), otterremo immediatamente la stessa modifica nel codice. Analogamente se modifichiamo il nome della variabile nel codice, all'atto del building della classe (salvataggio e compilazione), il cambiamento sarà notificato alla PropertyList. Molto utile è anche la choice presente nella parte alta a destra nella Window che permette, selezionando uno dei metodi della classe parent, di farne l'overloading. Come conseguenza di una scelta verrà, infatti, visualizzato il codice relativo al metodo. La SourceWindow permette inoltre, con l'utilizzo del pulsante destro del mouse, di inserire i breakpoint utili nella fase di debugging.
HierarchyEditor: questa finestra di dialogo permette di visualizzare in maniera grafica, oltre alle classi ed alle interfacce del project, anche le relazioni tra esse. Le classi sono rappresentate da rettangoli grigi all'interno dei quali è scritto il loro nome. Le interfacce sono rappresentate allo stesso modo, solamente che la scritta è in corsivo. Una linea che congiunge i rettangoli può rappresentare una relazione di ereditarietà (tra classi o tra interfacce) oppure di implementazione (da una interfaccia ad una classe). Ovviamente due classi possono essere unite tra loro al più da un solo legame diretto, data l'ereditarietà singola di Java. I vantaggi di questo tool non sono soltanto quelli di visualizzazione, ma soprattutto quelli di supporto alla creazione di nuove classi o interfacce. Supponiamo di voler estendere una classe. Basterà cliccare sul rettangolo corrispondente e, tenendo premuto il pulsante del mouse, rilasciarlo in un punto libero della finestra. Apparirà quindi, il Class Wizard che permetterà di creare la nuova classe. I vantaggi sono maggiori nel caso in cui si voglia che una classe implementi una determinata interfaccia. Con il mouse non faremo altro che cliccare sulla interfaccia e, tenendo premuto il pulsante, rilasciarlo sulla classe. A questo punto è possibile verificare nella Source Window, che il codice relativo alle intestazioni dei metodi previsti dall'interfaccia, è stato aggiunto a quello della classe. Questo procedimento permette un notevole risparmio di tempo.
Class Browser: quando si programma scrivendo il codice direttamente nel Source Editor, si ha il problema di ricercare particolari variabili o metodi e di inquadrarli nel contesto globale di una classe o dell'intera applicazione. Questi obiettivi si ottengono con il ClassBrowser che permette di raggiungere e modificare, ciascuna singola proprietà o singolo metodo di una qualunque classe del project. Selezionando con il mouse una classe, verranno visualizzati tutti i suoi metodi e le sue proprietà. Selezionando una di queste, ne vedremo il codice corrispondente nella parte bassa della finestra e potremo modificarlo. Ovviamente la modifica sarà immediatamente notificata alla SourceWindow. Con l'utilizzo del pulsante destro del mouse è possibile inserire le dichiarazioni relative a nuove variabili oppure le firme relative a nuovi metodi. Ciascun metodo e variabile è rappresentato graficamente con un simbolo di forma diversa e di colore dipendente dal relativo modificatore. Per esempio, una variabile private viene rappresentata con un rombo rosso, mentre un metodo public con un triangolo blu.
Messages Dialog : in questa dialog vengono visualizzati i messaggi scritti sullo standard output. Uniche operazioni possibili in essa sono quelle di cut/copy & paste.
L'Insert
Class Wizard
Symantec Visual
Cafe 2.0 Web Development dispone dei seguenti Wizard:
L'Interaction
Wizard
Un bean è caratterizzato,
oltre che dalle proprietà e dai metodi, dagli eventi che è in
grado di generare. Il modello ad eventi stabilito dalle specifiche JavaBean
si chiama delegation model e prevede la definizione, per ogni evento,
di oggetti sorgenti e di oggetti ascoltatori. Un oggetto sorgente è quello
che genera l'evento, mentre l'oggetto ascoltatore è quello che esegue
una determinata azione a seguito dello stesso. Secondo il modello per delega,
solamente gli oggetti ascoltatori che si sono registrati come tali alla sorgente
per un determinato evento, sono sensibili al suo verificarsi. La sorgente dovrà
quindi richiamare un metodo degli oggetti ascoltatori dipendente dall'evento
generato. Questo si ottiene attraverso l'utilizzo di interfacce che raccolgono
l'insieme dei metodi che possono essere eseguiti in relazione ad un evento.
È evidente che se un oggetto vuole essere un ascoltatore per quell'evento,
deve implementare la relativa interfaccia. Supponiamo, però, di disporre
di due componenti e di voler fare in modo che il primo divenga ascoltatore del
secondo per un certo evento. Un metodo sarebbe quello di modificare il codice
del primo componente in modo da registrarsi al secondo per quell'evento. La
modifica del codice di un componente da parte di un tool non è certo
figlia della filosofia per componenti secondo la quale ogni oggetto è
utilizzato agendo solamente sul suo stato e sul modo di interagire con altri.
Devono essere, allora, generate delle particolari classi, dette Adapter,
che fungono da tramite. Se la classe A deve eseguire il metodo a() a
seguito del verificarsi di un evento E generato da B, l'adapter implementerà
l'interfaccia corrispondente ad E, si registrerà come ascoltatore di
B e, come conseguenza del verificarsi dell'evento E, eseguirà il metodo
a() di A. L'adapter sarà quindi ascoltatore rispetto alla sorgente
e sorgente rispetto all'ascoltatore. L'Interaction Wizard permette di
gestire gli eventi in modo molto semplice. Si seleziona l'oggetto sorgente dell'evento
nella Project Window oppure nel Form Designer e, attraverso il
menu ottenuto con il pulsante destro del mouse, si invoca il l'InteractionWizard.
Esso può essere costituito da una o due pagine a seconda che il metodo
da eseguire conseguentemente all'evento abbia o meno parametri. Comunque il
primo passo consiste nello scegliere l'evento da gestire. A questo punto è
possibile selezionare l'oggetto ascoltatore tra quelli presenti nel project.
Verranno allora visualizzate tutte le possibili azioni che possono essere eseguite.
Se l'azione prevede la specifica di parametri, il pulsante Fine diventerà
Avanti e sarà quindi possibile selezionarli. Questa ultima possibilità
può essere molto utile in quanto permette di gestire tipi di parametri
diversi in modo appropriato. A seguito di un evento è possibile, per
esempio, scegliere una azione che consiste nel visualizzare una immagine. Il
metodo permetterà di scegliere l'immagine da visualizzare con la tipica
opzione di browse. Le azioni associate ad un evento dal Wizard
sono espresse in parole e non in termini di metodi. È possibile invocare
l'Interaction Wizard anche in modo visuale premendo il relativo pulsante
nella toolbar. Il puntatore del mouse cambierà forma e basterà
cliccare sulla sorgente e, tenendo premuto il pulsante, rilasciarlo sull'oggetto
destinatario. Apparirà quindi l'Interaction Wizard con alcune proprietà
già settate.
Creazione
di Bean
Per creare un
nuovo componente Java basterà scegliere la relativa opzione in fase
di creazione di un nuovo project. Saranno quindi create tre classi: una
relativa al bean vero e proprio, una relativa alla classe JavaBean ed un
applet che permette di verificarne il funzionamento. Se vogliamo editare
gli eventi del bean utilizzando completamente le potenzialità dell'InteractionWizard
(descrizione in parole delle possibili azioni conseguenti il verificarsi
di un evento, scelta dei relativi parametri, ecc.) dovremo utilizzare le
classi ConnectionDescriptor e SymantecBeanDescriptor del
package symantec.itools.beans. Queste classi estendono rispettivamente
le classi FeatureDescriptor e BeanInfo del package java.beans
del JDK e permettono di fornire ulteriori informazioni che l'introspection
specifica del tool permetterà di leggere. Attraverso la creazione
di oggetti ConnectionDescriptor descriveremo ciascuna possibile
connessione del bean con altri. Attraverso un oggetto di tipo SymantecBeanDescriptor,
descriveremo a Visual Cafe 2, alcune caratteristiche del bean quali il
nome relativo al bean nella toolbar, l'icona da affiancare al bean nel
caso di drag nel FormDesigner, ecc. Un esempio di dichiarazione
di una possibile azione conseguente ad un evento è la seguente:
connection=new ConnectionDescriptor("output", "String", "","%name%.getFrame()",
"Get the HTML Link Frame Name");
in cui si crea un oggetto symantec.itools.ConnectionDescriptor specificando:
Debugging
Dopo aver provveduto
al Building dell'applicazione o dell'applet, è possibile farne il debugging.
Una tipica operazione di debugging con Visual Cafe 2 consiste nella visualizzazione
del codice nella Source Window e nell'inserimento, nei punti cruciali
del programma, dei breakpoint ovvero dei punti in cui l'esecuzione si dovrà
bloccare. Questo viene fatto semplicemente scegliendo la relativa opzione nel
menu visualizzato premendo il pulsante destro del mouse in corrispondenza della
riga voluta. Basterà quindi eseguire il programma in modalità
debug attraverso la corrispondente opzione nel menu Project. Il Workspace sarà
automaticamente settato in debug ed il programma si bloccherà in corrispondenza
dei breakpoint inseriti. A questo punto sono disponibili numerose finestre di
dialogo che permettono di avere abbondanti informazioni sull'esecuzione del
programma ovvero:
Threads Dialog: visualizza tutti i thread esistenti e soprattutto il loro stato. Questa finestra è utile nel caso in cui si verifichino malfunzionamenti dovuti al blocco di thread, per esempio, in lettura su uno stream.
Breakpoints Dialog: permette di visualizzare le informazioni relative ai breakpoint inseriti in termini di nome del file e di riga nel testo. In questa finestra viene data la possibilità di ignorare determinati breakpoint inseriti in modo da verificare più casi senza dover riavviare il debugger.
Calls Dialog: permette di visualizzare quali metodi sono in esecuzione in quell'istante. Questa finestra è utile nel caso in cui si volesse conoscere il percorso di esecuzione del programma ovvero se determinati metodi sono invocati oppure no.
Watch Dialog: permette di specificare un determinato oggetto di cui si vuole tenere traccia visualizzandone lo stato in ogni istante. L'utilità è quella di raccogliere in una unica finestra tutte le informazioni relative agli oggetti di cui si è interessati senza doverli cercare nella Variables Dialog.
Codice
generato e compatibilità
Visual Cafe
2.0 Web Development si basa sulle API del JDK1.1 e quindi gli applet creati
potrebbero avere dei problemi con determinati browser non aggiornati all'ultima
versione. Per esempio Netscape Communicator, benché disponga della
JVM della versione 1.1 ha problemi relativamente all'AWT (Abstract Window
Toolkit) ed alla gestione degli eventi che è basilare nella
programmazione dei bean. Il codice generato è comunque di ottima
qualità sia rispetto ai nomi scelti nella rappresentazione delle
variabili corrispondenti ad oggetti inseriti (per i metodi si utilizzano
addirittura le regole del design pattern) sia per quello che riguarda la
sua leggibilità (indentazione del codice, spazio per i commenti,
ecc.). Per quello che riguarda il compilatore, Visual Cafe 2 permette di
scegliere se utilizzare quello standard del JDK oppure quello della Symantec
con velocità di compilazione sicuramente superiore. È sufficiente
scegliere la relativa opzione nelle Options del project. Questo
può servire per utilizzare gli strumenti di programmazione di Visual
Cafe 2 anche con il JDK 1.0.2. Ovviamente bisognerà rinunciare ad
utilizzare l'Interaction Wizard o i template forniti automaticamente
in fase di scelta del project, che si basano su concetti legati al delegation
model. La versione Web Development non contiene nessuno strumento
per la gestione dei database oltre alle normali API JDBC fornite con il
JDK1.1. A tale scopo è disponibile il prodotto dbAnyware
che prevede l'aggiunta di nuovi componenti per l'accesso ai database e
per la loro gestione, ma non è presente nella confezione Web Development.
L'attributo Web Development è dovuto al fatto che con il CD-Rom
viene fornito il tool Visual Page, per l'editazione di pagine Web.
Conclusioni
In questo articolo
abbiamo visto le caratteristiche principali di Visual Cafe 2.0 Web Development
cercando di descrivere al meglio gli strumenti che il tool offre a supporto
della programmazione in Java. Il prodotto, aggiornato al JDK1.1, è
ricco di tool che semplificano le fasi di digitazione del codice, ma può
sembrare povero di Wizard, in quanto contiene solamente quello per
la creazione di classi e per la gestione degli eventi secondo il delegation
model. Conseguentemente, Visual Cafe 2 non è adatto a coloro
che desiderano realizzare applicazioni o applet Java senza scrivere righe
di codice, ma a programmatori che conoscono abbastanza bene il linguaggio
nella sua ultima versione. Come visto, per creare un bean è necessario,
per esempio, conoscere le specifiche JavaBeans per poter utilizzare le
classi della Symantec. Altro punto a favore di Visual Cafe 2 è una
distinzione netta tra i componenti caratteristici del tool e quelli standard.
In questo modo è possibile scegliere di utilizzare solamente quelli
definiti nel JDK ed avere vantaggi nel caso di scaricamento di un applet.
Vantaggioso è il fatto che componenti creati possano essere aggiunti
a quelli già disponibili con un semplice drag and drop.
Massimo Carli, laureato in Ingegneria Elettronica presso l'Università di Padova, si occupa di Java da circa due anni e sviluppa, presso una azienda vicentina, applicazioni per Internet ed Intranet completamente in Java. |
|
||
|
||
MokaByte ricerca
nuovi collaboratori
|
||
|