MokaByte 56 - 8bre  2001
Java Beans
La programmazione 
per componenti in Java

I parte

di
Andrea
Gini
Inizia da questo mese un nuovo corso pratico su un argomento molto importante nell'universo Java: la programmazione a componenti secondo la specifica Java Beans. Attraverso poche semplici lezioni, verranno illustrati i pricipi chiave della programmazione per componenti, e le poche nozioni necessarie a diventare produttivi con questo strumento. In questo primo articolo svolgeremo una panoramica sullo sviluppo a componenti in generale, prima di entrare nel vivo di cosa significhi la programmazione a componenti nel mondo Java.

La programmazione a Componenti
Uno degli obiettivi più ambiziosi dell'Ingegeria del Software è organizzare lo sviluppo di Sistemi in maniera simile a quanto è stato fatto in altre branche dell'Ingegneria, dove la presenza di un mercato di parti standard altamente riutilizzabili permette di aumentare la produttività, riducendo nel contempo i costi. Nella meccanica, ad esempio, esiste da tempo un grosso mercato di componenti riutilizzabili, come viti, dadi, bulloni e ruote dentate; ciascuno di questi componenti trova posto facilmente in centinaia di prodotti diversi.

L'industria del Software, sempre più orientata alla filosofia dei componenti, stà dando vita a due nuove figure di programmatore: il progettista di componenti e l'assemblatore di applicazioni.
Il primo ha il compito di scoprire e progettare oggetti software di uso comune, che possano essere utilizzati con successo in contesti differenti. Produttori in concorrenza tra di loro possono realizzare Componenti compatibili, ma con caratteristiche prestazionali differenti. L'acquirente può orientarsi su un mercato che offre una pluralità di scelte, e decidere in base al budget o a particolari esigenze prestazionali.
L'assemblatore di applicazioni, d'altra parte, è un professionista specializzato in un particolare dominio applicativo, capace di creare programmi complessi acquistando sul mercato componenti standard, e combinandoli con strumenti grafici o linguaggi di scripting. 

Questo capitolo offre un'analisi approfondita delle problematiche che si incontrano nella creazione di Componenti in Java; attraverso gli esempi verrà comunque offerto una panoramica su come sia possibile assemblare applicazioni complesse a partire da Componenti concepiti per il riuso.
 
 
 

La specifica Java Beans
JavaBeans è una specifica, ossia un insieme di regole, seguendo le quali è possibile realizzare in Java Componenti software riutilizzabili, che abbiano la capacità di interagire con altri Componenti, realizzati da altri produttori, attraverso un protocollo di comunicazione comune. Ogni Bean è caratterizzato dai servizi che è in grado di offrire, e può essere utilizzato in un ambienete di sviluppo differente rispetto a quello in cui è stato realizzato. Quest'ultimo punto è cruciale nella filosofia dei componenti: sebbene i Java Beans siano a tutti gli effetti classi Java, e possano essere manipolati completamente per via programmatica, essi vengono spesso utilizzati in ambienti di sviluppo diversi, come Tool grafici o linguaggi di scripting. 
I Tool grafici, tipo JBuilder, permettono di manipolare i componenti in maniera visuale. Un assemblatore di Componenti può selezionare i Beans da una palette, inserirli in un apposito contenitore, impostarne le proprietà, collegare gli eventi di un Bean ai metodi di un altro, generando in tal modo applicazioni, Applet, Servlet e persino nuovi Componenti senza scrivere una sola riga di codice. 
I linguaggi di scripting, di contro, offrono una maggior flessibilità rispetto ai Tool grafici, senza presentare le complicazioni di un linguaggio generico. La programmazione di pagine Web dinamiche, un dei domini applicativi di maggior attualità, deve il suo rapido sviluppo ad un'intelligente politica di stratificazione, che vede le funzionalità di più basso livello, come la gestione dei DataBase, la Businnes Logic o l'interfacciamento con le risorse di sistema, incapsulate all'interno di JavaBeans, mentre tutto l'aspetto della presentazione viene sviluppato con un semplice linguaggio di scripting, tipo Java Server Pages o PHP.
 
 
 

Il modello di componenti Java Beans
Un modello a componenti è caratterizzato da almeno sette fattori: Proprietà, Metodi, Introspezione, Personalizzazione, Persistenza, Eventi e Modalità di Deployment. Nei prossimi paragrafi analizzeremo il ruolo di ciascuno di questi aspetti all'interno della specifica Java Beans; quindi procederemo a descriverne l'implementazioni in Java.
 
 
 

Proprietà
Le proprietà sono attributi privati, accessibili solamente attraverso appositi metodi "get" e "set". Tali metodi costituiscono l'unica via di accesso pubblica alle proprietà, cosa che permette al progettista di Componenti di stabilire per ogni parametro precise regole di accesso. Se si utilizzano i Bean all'interno di un programma di sviluppo visuale, le proprietà di un componente vengono visualizzate in un apposito pannello, che permette di modificarne il valore con un opportuno strumento grafico.
 
 
 

Metodi
I metodi di un Bean sono metodi pubblici Java, con l'unica differenza che essi risultano accessibili anche attraverso linguaggi di scripting e Builder Tools. I metodi sono la prima e più importante via d'accesso ai servizi di un Bean.
 
 

Introspezione
I Builder Tool scoprono i servizi di un Bean (proprietà, metodi ed eventi) attraverso un processo noto come Introspezione, che consiste principalmente  nell'interrogare il componente per conoscerne i metodi, e da questi dedurne le caratteristiche. Il progettista di componenti può attivare l'introspezione in due maniere: seguendo precise convenzioni nella formulazione delle firme dei metodi, o creando una speciale classe BeanInfo, che fornisce un elenco esplicito dei servizi di un particolare Bean.
La prima via è senza dubbio la più semplice: se si definiscono i metodi di accesso ad un determinato servizio seguendo le regole di naming descritte dalla specifica JavaBeans, i Tool grafici saranno in grado, grazie alla reflection, di individuare i servizi di un Bean semplicemente osservandone l'interfaccia di programmazione. Il ricorso ai  BeanInfo, d'altro canto, torna utile in tutti quei casi in cui sia necessario mascherare alcuni metodi, in modo da esporre solamente un sottoinsieme dei servizi effettivi del Bean.
 
 
 

Personalizzazione 
Durante il lavoro di composizione di Java Beans all'interno di un Tool grafico, un apposito Property Sheet, generato al volo dal programma di composizione, mostra lo stato delle proprietà e permette di modificarle con un opportuno strumento grafico, tipo un campo di testo per valori String o una palette per proprietà Color. Simili strumenti grafici vengono detti Editor di Proprietà. I Tool grafici dispongono di Editor di Proprietà in grado di supportare i tipi Java più comuni, come i tipi numerici, le stringhe e i colori; nel caso si desideri rendere editabile una proprietà di un tipo diverso, è necessario realizzare un'opportuna classe di supporto, conforme all'interfaccia PropertyEditor. Quando invece si desideri fornire un controllo totale sulla configurazione di un Bean, è possibile definire un BeanCustomizers, una speciale applicazione grafica specializzata nella configurazione di un particolare tipo di Componenti.
 
 
 

Persistenza
La Persistenza permette ad un Bean di salvare il proprio stato e di ripristinarlo in un secondo tempo. JavaBeans supporta la persistenza grazie all'Object Serialization, che permette di risolvere questo problema in modo molto rapido.
 
 
 

Eventi
Nella programmazione ad oggetti tradizionale non esiste nessuna convenzione su come modellare lo scambio di messaggi tra oggetti. Ogni programmatore adotta un proprio sistema, creando una fitta rete di dipendenze che rende molto difficile il riutilizzo di oggetti in contesti differenti da quello di partenza. Gli oggeti Java progettati secondo la specifica Java Beans adottano un meccanismo di comunicazione basato sugli Eventi, simile a quello utilizzato nei componenti grafici Swing ed AWT. L'esistenza di un unico protocollo di comunicazione standard garantisce l'intercomunicabilità tra componenti, indipendentemente da chi li abbia prodotti.
 
 
 

Deployment
I JavaBeans possono essere consegnati, in gruppo o singolarmente, attraverso files jar, speciali archivi compressi in grado di trasportare tutto quello di cui un Bean ha bisogno, come classi, immagini o altri files di supporto. Grazie ai files jar è possibile consegnare i Beans con una modalità del tipo "chiavi in mano": l'acquirente deve solamente caricare un file jar nel proprio ambiente di sviluppo, e i Beans in esso contenuti verranno subito messi a disposizione. L'impacchettamento di classi Java all'interno di files jar segue poche semplici regole, che verranno descritte negli esempi del capitolo.
 
 
 

Conclusioni
In questo articolo sono stati presentati alcuni principi chiave dello sviluppo di applicazioni basate sui componenti. Il mese prossimo entreremo nel vivo del mondo dei componenti Java Beans, studiando in dettaglio il meccanismo delle proprietà.
 

Vai alla Home Page di MokaByte
Vai alla prima pagina di questo mese
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