Un tour a piedi di JavaBeans

Precedente 1 2 Pagina 2 Pagina 2 di 2

Cos'è JavaBeans e cosa fa

JavaBeans non è un prodotto, programma o ambiente di sviluppo. È sia un pacchetto Java di base ( java.beans) che Beans può utilizzare per fornire funzionalità estese, sia un documento (la specifica JavaBeans ) che descrive come utilizzare le classi e le interfacce nel java.beanspacchetto per implementare la "funzionalità Beans". La specifica della classe fa parte della versione base di Java 1.1, quindi non è necessario installare alcun software aggiuntivo per utilizzarla. L'aggiunta di Beans ha richiesto poche modifiche al linguaggio Java di per sé, sebbene diverse API nuove e estremamente necessarie siano state aggiunte alla versione principale per supportare le funzionalità di Beans. Leggere le specifiche può essere informativo ma soporifero. Fortunatamente è facoltativo se si comprende già come e perché utilizzare il pacchetto JavaBeans. Forse hai già capito Beans leggendo una serie di articoli divertenti e illuminanti su JavaBeans in JavaWorld , ad esempio.

JavaBeans trasforma le classi in componenti software fornendo diverse nuove funzionalità. Alcune di queste caratteristiche sono specifiche dei fagioli. Altri, come la serializzazione, possono essere applicati a qualsiasi classe, Bean o altro, ma sono fondamentali per la comprensione e l'uso di Bean.

I componenti software hanno proprietà , che sono attributi dell'oggetto. La personalizzazione è il processo di configurazione di un bean per un'attività particolare. Il nuovo schema di gestione degli eventi in Java 1.1 è stato creato in parte per facilitare la comunicazione tra Beans. I fagioli possono essere sezionati dagli IDE o da altre classi attraverso un processo chiamato introspezione . I bean possono essere persistenti (cioè serializzati ) in flussi di byte per la trasmissione o l'archiviazione e i bean persistenti possono essere impacchettati in "file JAR" per facilitare il download e l'accesso. Infine, i fagioli sono stati progettati per interagire facilmente con le tecnologie dei componenti legacy come ActiveX e LiveConnect e partecipa alle transazioni con i sistemi Object Request Broker come CORBA.

Diamo un'occhiata a ciascuna di queste funzionalità in modo un po 'più approfondito.

Proprietà e personalizzazione

Le proprietà, come notato sopra, sono attributi di un Bean. Le proprietà visive potrebbero includere il colore o le dimensioni dello schermo. Altre proprietà potrebbero non avere una rappresentazione visiva: un BrowserHistory Bean, ad esempio, potrebbe avere una proprietà che specifica il numero massimo di URL da memorizzare. I bean espongono i metodi setter e getter (chiamati "metodi di accesso") per le loro proprietà, consentendo ad altre classi o IDE di manipolare il loro stato. Il processo di impostazione delle proprietà di un bean in fase di progettazione o runtime è chiamato personalizzazione .

Lo sviluppatore ha un grande controllo sull'accesso e sulla modifica delle proprietà di Beans. Per una proprietà semplice , lo sviluppatore scrive un metodo chiamato setProperty()e un altro chiamato getProperty().

Qui avresti visto un'applet, ma per qualche motivo non puoi.

Grafico a barre

Ad esempio, se stai utilizzando un browser abilitato per Java, vedrai a sinistra un'applet che utilizza una piccola classe chiamata BarChart. La BarChartè la barra colorata tra i due pulsanti. BarChartmanca solo una cosa per diventare un Bean: non implementa l'interfaccia java.io.Serializable(perché la maggior parte dei browser non gestisce ancora Java 1.1 e quindi l'applet di esempio fallirebbe).

Con l'eccezione di essere serializzabile, BarChartè un semplice Bean, con pochissimi metodi. Ha void setPercent(int pct), che inonda il fondo per cento per cento della barra di rosso. Il metodo int getPercent()restituisce la percentuale corrente memorizzata nel Bean (questo è lo stato del Bean). Il setPercent()metodo chiama anche repaint()se ha modificato la percentuale, in modo che la rappresentazione visiva dell'oggetto rimanga aggiornata.

Il codice dell'applet chiama setPercent(getPercent()+10)quando si fa clic sul pulsante + 10% , facendo BarChartaumentare la sua percentuale (se è <100%). Percent è un esempio di una proprietà Bean , con metodi setter e getter denominati in conformità con la specifica JavaBeans. Mentre questa serie continua, trasformeremo questo piccolo modesto BarChartin un utile componente software che può essere inserito in una varietà di applicazioni.

Il valore di una proprietà indicizzata è un array. I metodi di accesso delle proprietà indicizzate ricevono e restituiscono matrici di valori anziché scalari. I metodi di accesso possono generare eccezioni controllate per segnalare condizioni di errore.

A volte è utile che un'azione si verifichi quando una determinata proprietà di un oggetto cambia. Le proprietà associate provocano l'invio di eventi ad altri oggetti quando il valore della proprietà cambia, consentendo eventualmente al destinatario di intraprendere un'azione. Quindi, un bean di foglio di calcolo potrebbe essere configurato per indicare a un bean di grafico a torta di ridisegnarsi ogni volta che i dati del foglio di calcolo cambiano.

Spesso, alcuni valori per le proprietà sono illegali, in base allo stato di altri fagioli. Un Bean può essere impostato per "ascoltare" queste proprietà vincolate di altri Bean e "veto" cambia che non gli piace. Ad esempio, il ControlRodArray Bean di un reattore nucleare potrebbe voler interferire con qualcuno che cerca di cambiare lo stato di un DrainReactorCorePump Bean su ON se le barre di controllo vengono estratte. (Non provateci a casa. Probabilmente nessuno dovrebbe essere utilizzando JavaBeans per tali applicazioni appena ancora.)

Quando uno sviluppatore collega i Beans insieme per creare un'applicazione, l'IDE può presentare una finestra delle proprietà contenente tutte le proprietà dei Beans ei loro valori correnti. (Una finestra delle proprietà è una finestra di dialogo utilizzata per impostare e / o visualizzare le proprietà, come ciò che si ottiene selezionando Opzioni ... in un menu.) Lo sviluppatore imposta le proprietà graficamente, che l'IDE traduce in chiamate ai metodi setter dei Beans, cambiando lo stato dei fagioli. Questo personalizza i fagioli per la particolare applicazione.

L'uso di elenchi di proprietà non è sempre il modo migliore per gestire la personalizzazione di Bean. Alcuni fagioli hanno uno stato troppo complesso per essere facilmente manipolato in questo modo. Altri fagioli sarebbero semplicemente più belli se ci fosse un modo più intuitivo per configurarli. Immagina il povero manager che vuole semplicemente guardare i rapporti di vendita e deve capire cosa digitare nella casella di testo "Origine dati ODBC remota" in una finestra delle proprietà. Non sarebbe più bello se potesse semplicemente trascinare e rilasciare l'icona di un DataSource Bean (personalizzata con l'etichetta "Dati di vendita", ovviamente) su un DataConnection Bean, configurandolo così automaticamente? Uno sviluppatore di Bean può incorporare una finestra delle proprietà nel Bean stesso e l'IDE utilizza quindi questo "personalizzatore" per personalizzare il Bean.

Le classi rilevanti per la manipolazione delle proprietà e la personalizzazione si trovano nel java.beanspacchetto.

Gestione degli eventi

Tutta questa interazione tra i fagioli presuppone per loro un modo di comunicare. JDK 1.1 definisce un nuovo modello di eventi che le classi (non solo Beans!) Usano per comunicare. Infatti, questo nuovo modello di eventi ha trovato la sua strada in uno dei pacchetti più diffusa di Java: java.awt!

Nel nuovo modello di eventi, una classe registra l'interesse per le attività di un'altra classe tramite un'interfaccia di ascolto . In effetti, l' oggetto di destinazione (la parte interessata) dice all'oggetto di origine (l'oggetto di interesse): "Fammi sapere ogni volta che accade il tal dei tali". Quando si verifica il tal dei tali, l'oggetto di origine "attiva" un evento sulla destinazione richiamando il gestore di eventi della destinazione con una sottoclasse di EventObjectcome argomento.

Gli eventi possono essere utilizzati per implementare proprietà vincolate e vincolate. Nell'esempio PieChart e SpreadSheet precedente, il PieChart "registra" l'interesse per qualsiasi modifica alla proprietà DataList di SpreadSheet (diciamo) . Quando lo SpreadSheet cambierà la sua proprietà DataList , passa un DataListChangedEvent(sottoclasse da EventObject), che indica cosa è cambiato, al metodo del gestore di eventi di ogni ascoltatore interessato. Il target ( PieChart) esamina quindi l'evento e intraprende l'azione appropriata.

L'esempio del reattore nucleare funziona in modo simile; ma in quel caso, l'obiettivo pone il veto al cambiamento lanciando un'eccezione. In questo modo il mondo viene salvato dalla distruzione radioattiva diffusa.

La EventObjectclasse può essere estesa per creare eventi definiti dall'utente . Le classi possono ora definire e utilizzare nuovi tipi di eventi per scambiarsi messaggi. Ciò significa che i bean in esecuzione all'interno dello stesso contenitore possono comunicare passando messaggi in giro. Questo aiuta a disaccoppiare le dipendenze tra gli oggetti, che sappiamo essere una cosa molto buona.

Gli eventi definiti dall'utente (e altri) derivano dalla classe java.util.EventObject.

Introspezione

Il termine piuttosto strano introspezione è il linguaggio Java per il processo di analisi programmatica dei metodi e dei membri pubblici di una classe. Questo processo è talvolta chiamato anche scoperta . Il nuovo meccanismo di riflessione nel core Java, che può sezionare un oggetto e restituire una descrizione del suo contenuto, rende possibile l'introspezione. (Sebbene Java possa essere riflessivo, anche introspettivo, l'omphaloskepsis non fa ancora parte della distribuzione principale.)

Abbiamo già incontrato un'applicazione di questa funzionalità. Sopra, abbiamo descritto un IDE che potrebbe costruire un elenco di proprietà Bean da presentare a uno sviluppatore. Come può l'IDE sapere quali proprietà ha un fagiolo? L'IDE scopre le proprietà di un fagiolo in uno dei due modi: chiedendo al fagiolo una descrizione delle sue proprietà, o sezionando il fagiolo attraverso l'introspezione.

Un tipico IDE inizierà chiedendo a un Bean un oggetto BeanInfo, che descrive le proprietà del Bean, tra le altre cose. L'IDE utilizzerà quindi l'oggetto BeanInfo per costruire una finestra delle proprietà. (Si presume che Bean non fornisca un personalizzatore proprio.) Se Bean non sa come restituire un oggetto BeanInfo, l'IDE quindi esamina il Bean ed esamina l'elenco dei metodi per i nomi che iniziano con set e ottenere . Presuppone (per convenzione) che questi metodi siano funzioni di accesso per le proprietà e crea un nuovo foglio delle proprietà basato sui metodi di accesso esistenti e sui tipi di argomenti che tali metodi accettano. Quindi, se i metodi di reperti IDE come setColor(Color), Color getColor(), setSize(Size), e Size getSize(), quindi si creerà un foglio di proprietà con le proprietàColore e dimensione e widget di tipo appropriato per impostarli.

Ciò significa che se uno sviluppatore segue semplicemente le convenzioni per la denominazione dei metodi di accesso, un IDE può determinare automaticamente come creare un foglio delle proprietà di personalizzazione per il componente.

Il meccanismo di riflessione che esegue l'introspezione è nel nuovo pacchetto di base del linguaggio java.lang.reflect.

Persistenza e confezionamento

Spesso è utile "congelare" un oggetto convertendone lo stato in un blob di dati da impacchettare per un uso successivo o trasmesso attraverso una rete per elaborarlo altrove. Questo processo è chiamato serializzazione ed è una nuova funzionalità del core Java.

Uno degli usi più semplici per la serializzazione consiste nel salvare lo stato di un Bean personalizzato, in modo che le proprietà di un Bean di nuova costruzione possano essere impostate correttamente in fase di esecuzione.

Inoltre, la serializzazione è un pilastro della tecnologia dei componenti, rendendo possibili schemi di elaborazione distribuita come CORBA. Se un oggetto non dispone localmente delle informazioni di cui ha bisogno per svolgere il suo compito, può inviarlo a un Request Broker, che serializza l'oggetto e lo invia altrove per l'elaborazione. All'estremità remota, l'oggetto viene ricostituito e viene eseguita l'operazione richiesta in origine. Questo è anche un modo per realizzare il bilanciamento del carico (per attività costose, ovvero: serializzazione e deserializzazione spesso non sono economiche).

Dove tieni un gruppo di fagioli liofilizzati che sono stati "marinati" in questo modo? Perché, in un JAR, ovviamente! La specifica JavaBeans descrive un file JAR come un file ZIP strutturato contenente più oggetti serializzati, documentazione, immagini, file di classe e così via, con un manifest che descrive cosa c'è nel JAR. Un file JAR, contenente molti piccoli file compressi, può essere scaricato tutto in un unico pezzo e decompresso sul lato client, rendendo più efficiente il download di applet (ad esempio). (JAR è abbastanza ovviamente un gioco sul formato di file tar Unix .)

Il java.iopacchetto fornisce la serializzazione degli oggetti. La specifica JavaBeans descrive il formato dei file JAR.

Interoperabilità

Qualcuno una volta ha detto che la cosa bella degli standard è che ce ne sono così tanti tra cui scegliere. Le tecnologie dei componenti non fanno eccezione. Esistono molti sistemi esistenti basati su OLE (o la sua ultima incarnazione, ActiveX), OpenDoc e LiveConnect. JavaBeans è stato progettato per (almeno alla fine) interagire con queste altre tecnologie componenti.

Non è realistico aspettarsi che gli sviluppatori abbandonino gli investimenti esistenti in altre tecnologie e reimplementino tutto in Java. Dal rilascio di Java 1.1, sono diventati disponibili i primi kit "bridge" Beans / ActiveX, che consentono agli sviluppatori di collegare Beans e componenti ActiveX senza problemi nella stessa applicazione. L'interfaccia Java IDL, che consentirà alle classi Java di operare con i sistemi CORBA esistenti, uscirà quest'anno.

Sebbene il bridge Beans / ActiveX e Java IDL non facciano parte della distribuzione JavaBeans standard, completano le capacità di JavaBeans come una tecnologia aperta e di forza industriale per software a componenti portatili.

Conclusione

Abbiamo coperto molto terreno. In questo articolo, hai imparato cosa sono i componenti software e perché sono preziosi. Quindi si sono apprese le varie proprietà di JavaBeans, incluse proprietà, personalizzazione, eventi, introspezione, persistenza, pacchettizzazione e interoperabilità con i sistemi di componenti legacy.

Nel prossimo articolo di questa serie, ti faremo iniziare a utilizzare JavaBeans e esamineremo le proprietà Bean in profondità: come funzionano e come personalizzarli. Man mano che procediamo, discuteremo delle nuove funzionalità principali di Java che rendono possibile Beans. Gli articoli futuri di questa serie approfondiranno i dettagli degli argomenti di cui abbiamo discusso questo mese.

Mark Johnson ha conseguito una laurea in ingegneria informatica ed elettrica presso la Purdue University (1986). Ha 15 anni di esperienza nella programmazione in C e due anni in C ++, ed è un fanatico devoto dell'approccio Design Pattern nell'architettura orientata agli oggetti, dei componenti software in teoria e di JavaBeans nella pratica. Negli ultimi anni ha lavorato per Kodak, Booz-Allen e Hamilton e per EDS a Città del Messico, sviluppando applicazioni database Oracle e Informix per l'Istituto elettorale federale messicano e per le dogane messicane. Ha trascorso l'ultimo anno lavorando a NETdelivery, una startup Internet ora a Boulder, CO. Mark è un programmatore Unix tinto nella lana e vede Java come l'anello mancante tra i sistemi client desktop ormai onnipresenti e aperti, distribuiti, e back-end aziendali scalabili.Attualmente lavora come designer e sviluppatore per Object Products a Fort Collins, CO.

Ulteriori informazioni su questo argomento

  • Un eccellente confronto tra JavaBeans e ActiveX può essere trovato nella storia di copertina di JavaWorld di Merlin Hughes , "JavaBeans e ActiveX si affrontano"

    //www.javaworld.com/javaworld/jw-03-1997/jw-03-avb-tech.html

  • Sun Microsystems gestisce un sito Web per JavaBeans. Su questo sito è possibile scaricare l'ultimo BDK (Beans Developer's Kit), leggere la specifica JavaBeans, navigare in un tutorial online e scoprire le ultime informazioni su Beans. //java.sun.com/beans
  • Il JavaBeans Advisor , una newsletter elettronica occasionale contenente notizie su Beans e suggerimenti per sviluppatori, è archiviato all'indirizzo

    //splash.javasoft.com/beans/Advisor.html

  • La FAQ JavaBeans gestita da Sun si trova all'indirizzo

    //splash.javasoft.com/beans/FAQ.html

  • Infine, l' omphaloskepsis è una forma di meditazione introspettiva che coinvolge un'intensa contemplazione dell'ombelico. Dai un'occhiata al sito Web Word A Day e riempi il tuo discorso quotidiano con riferimenti oscuri! //www.wordsmith.org/awad/index.html

Questa storia, "Un tour a piedi di JavaBeans" è stata originariamente pubblicata da JavaWorld.