Hawlitzek GmbH/ Veröffentlichungen/ Beans/
 

Hawlitzek IT-Consulting GmbH ©Foto Kirsten Literski-Hawlitzek

Beans

Dieser Artikel ist im JavaMagazin 6/00 erschienen. Vielen Dank an den Software & Support Verlag für die Genehmigung zur Veröffentlichung auf dieser Webseite!

Erstellen und Nutzen von JavaBeans in IBM VisualAge

Komposition mit Bohnen 

Das Komponentenmodell JavaBeans wurde für graphische Entwicklungsumgebungen entworfen. VisualAge for Java ist ein Werkzeug, das die Nutzung und Produktion von Beans im Mittelpunkt der Softwareentwicklung stellt. Hier sollen ein paar Tipps und Tricks vorgestellt werden, wie man die Fähigkeiten der IDE optimal nutzt.

Eine JavaBean ist eine wiederverwendbare Softwarekomponente mit einer klar definierter Funktion und einer festgelegten Schnittstelle für den Einsatz in graphischen Entwicklungswerkzeugen. Im Gegensatz zu einer Klasse, wo die Implementierung im Vordergrund steht, ist eine JavaBean in der Regel eine Blackboxkomponente ohne Sourcecode. Wichtig ist hier vielmehr die Schnittstelle nach außen, die so genannten Features einer JavaBean. Hierzu zählen Properties, Methoden und Ereignisse (siehe Abb.1).

Abb.1: Bestandteile der JavaBean-Schnittstelle

Properties sind die öffentlichen Attribute der Bean. Sie werden mittels get- und set-Methoden manipuliert. Daneben gibt es meist noch weitere öffentliche Methoden, die eine Komponente anbietet. Schließlich kann eine JavaBean beliebige Ereignisse auslösen und damit beispielsweise signalisieren, dass sich ihr interner Zustand verändert hat. Die Features einer Bean werden in einer separaten Klasse als Beschreibung jeder Komponente mitgeliefert, der BeanInfo [Haw].

Es gibt nun zwei Stadien im Entwicklungsprozess, wo JavaBeans eine Rolle spielen. Zum einen bei der Erstellung von Anwendungen: Hier komponiert der Entwickler aus Komponenten eine Anwendung. Er fügt Beans ein, stellt deren Eigenschaften ein (Customizing) und verknüpft sie miteinander. Zum Beispiel könnte auf Knopfdruck (Event: actionPerformed) ein Fenster geschlossen werden. Auf der anderen Seite erstellt ein Komponentenentwickler JavaBeans und macht deren Einsatz durch die Hervorhebung und Dokumentation wichtiger Funktionen leichter verständlich und einsetzbar. Bei besonders komplexen Properties kann er auch ein Fenster zum Einstellen der Attribute mitliefern, einen Property Editor. Die Zusatzinformationen für den Entwickler werden in Form der werkzeugunabhängigen BeanInfo-Klasse mitgeliefert. Zur Laufzeit hingegen spielen JavaBeans keine Rolle mehr, die BeanInfo-Klassen werden hier nicht mehr benötigt, da sie nur als Hilfsmittel für den Entwickler, nicht für den Endanwender gedacht sind.

Tooleinsatz

Es gibt viele Werkzeuge zur Verarbeitung von JavaBeans, angefangen von der einfachen Beanbox des Sun Beans Development Kit (BDK) bis hin zum mächtigen VisualAge. Alle Tools analysieren die BeanInfo einer Komponente per Introspection und bieten die erkannte Schnittstelle dem Entwickler an. Dieser kann nun die Komponente an seine Vorstellungen anpassen, zum Beispiel in dem er Farben und andere Properties einstellt. In der Regel kann man eine solcherart angepasste Bean auch in eine Datei serialisieren und bei Bedarf wiederherstellen. Hat man die Komponenten nun zu einer Anwendung oder einer größeren JavaBean zusammengesetzt, kann man den dynamischen Ablauf in Form von Methodenaufrufen als Folge von eingetretenen Ereignissen modellieren.

VisualAge for Java

Die komponentenbasierte Programmierung hat in den IBM Entwicklungsumgebungen schon einige Tradition. Vor allem in der Smalltalk- und der C++-Version von VisualAge findet sie seit vielen Jahren Einsatz und wird als “Composition from Parts” bezeichnet. In der Java-Variante sind diese “Parts” nun standardisierte JavaBeans. Im Visual Composition Editor fügt man die Komponenten ein, setzt die Eigenschaften und verbindet die Beans untereinander mit “Connections”, die das Event Handling symbolisieren. Ich möchte auf diese Standardtechniken hier nicht näher eingehen, da sie in der Literatur [Haw] und dem VisualAge-Handbuch ausführlich beschrieben werden und jedem VisualAge-Programmierer nach kurzem in Fleisch und Blut übergehen (Abb. 2).

Abb.2: Einsatz von JavaBeans im Visual Composition Editor

Tipp 1: Beans benennen

Jede Bean hat einen Namen. Sie sollten diesen unter dem Property beanName einstellen, damit Sie den generierten Code später lesen können. VisualAge setzt für den Variablennamen noch das Präfix ivj davor und generiert eine get-Methode. Wenn Sie also zum Beispiel eine Schaltfläche OKButton nennen, entsteht eine Referenz namens ivjOKButton und eine Methode getOKButton(). Im erzeugten Code verwendet VisualAge eine Technik namens Lazy Initialization, das heißt die Referenz wird nicht gleich bei der Deklaration oder im Konstruktor mit einem Objekt belegt, sondern erst beim ersten Aufruf der get-Methode.

Tipp 2: Property-Editoren

Ein Property-Editor ist eine Klasse, die eine (meist graphische) Oberfläche zum Einstellen komplexer Properties darstellt. VisualAge symbolisiert das Vorhandensein eines solchen Property-Editors durch einen kleinen Knopf mit drei Punkten (...) auf der rechten Seite des Property-Fensters (Abb. 2). Wenn Sie diesen z.B. bei einer Farbe wählen, erhalten Sie einen komfortablen Farbwähler mit Schieberegler, für Schriftarten eine Voransicht und bei Strings die Möglichkeit, die Zeichenkette für internationale Anwendungen in ein RessourceBundle auszulagern (Abb.3, wir berichteten in Ausgabe 3/00).

Abb. 3 : Einsatz von Property Editoren

Tipp 3 : Promoten von Bean-Features

Wenn Sie Komponenten ineinander verschachteln, treffen Sie schnell auf das Problem, das Sie an die Properties eingebetteter Beans nicht mehr herankommen, da deren get-Methoden privat deklariert sind. Um das zu vermeiden, können Sie Properties, Methoden und Ereignisse eingebetteter Beans an die Schnittstelle der Gesamtbean promoten. Dazu wählen Sie im Kontextmenü der inneren Bean “Promote Bean Feature...” bzw. “Bean-Element hochstufen...” (Abb. 4). Achten Sie darauf, dass Sie dem Feature einen sinnvollen Namen geben, damit Sie später auch jemand zuordnen kann, der den inneren Aufbau der Komponente nicht kennt.

Abb. 4 : Promoten von Bean-Features

Tipp 4: Tear-Off Properties

Bei der manuellen, d.h. nicht visuellen Programmierung hat man häufig den Fall, dass lokale Hilfsvariablen angelegt werden, um Veränderungen leichter und manchmal auch in einem abgeleiteten Typ durchgeführt werden können. Beispiel:

CardLayout temp = (CardLayout)panel.getLayout();
temp.next(panel);

Dies kann man im Visual Composition Editor per Property Tear-Off erreichen. Sie können damit Connections nicht nur zu den Features der Komponente, sondern auch zu denen des Objekts hinter dem Property ziehen. Wählen Sie im Kontextmenü der Bean „Tear-Off Property...“ und wählen Sie das Property aus. Daraufhin erscheint eine Variable vom Typ des Properties, die mittels Property-to-Property-Connection so synchronisiert ist, das sie ein Abbild des Properties darstellt (Abb. 5). Wenn Sie den Typ des Properties weiter spezialisieren möchten, z.B. weil Sie wissen, dass hier ein CardLayout Einsatz als LayoutManager findet, können Sie den Typ der Variable per Kontextmenü „Change Type...“ anpassen.

Abb. 5: Tear-Off Properties

Erstellung von Java Beans

JavaBeans können mit VisualAge besonders komfortabel erstellt werden. Zum einen wird alles, was Sie im Visual Composition Editor erstellen, automatisch mit einer BeanInfo-Klasse versehen und damit zur Java-Komponente. Auch die Erweiterung dieser Standardschnittstelle durch das Promoten von Features eingebetteter Beans haben wir ja schon gesehen. Zum anderen gibt es aber noch eine weitere Möglichkeit, eine JavaBean gezielt und mit allen Konfigurationsmöglichkeiten zu erstellen, die BeanInfo-Seite des Klassenbrowsers (Abb. 6).

Abb. 6: BeanInfo-Seite

Hier lassen sich alle Informationen über die Bean ablesen und konfigurieren sowie neue Features anlegen. So kann man für die Komponente eine Kurzbeschreibung oder ein Symbol für die Darstellung in Bean-Paletten angeben. Pro Feature kann man einstellen, welchen Stellenwert es in beanfähigen Entwicklungsumgebungen besitzt: In VisualAge beispielsweise wird ein “hidden” Feature gar nicht angezeigt, ein “expert” Feature nur bei Anwahl einer Checkbox im Property-Fenster, ein “preferred” Feature hingegen erscheint sogar im Kurzmenü einer Connection, die vom der Komponente ausgeht oder dort hinführt. Bei Properties kann man zusätzlich die Read- (Getter) und Write-Methode (Setter) angeben und optional einen Property-Editor.

Tipp 5: Neue Properties anlegen

Hiermit lassen sich neue Properties anlegen. Sie können dies zwar auch tun, indem Sie eine private Instanzvariable (Felder) mit öffentlichen get- und set-Methoden anlegen, der Property-Wizard (Abb. 7) kann aber noch viel mehr: Wenn Sie die Option “bound” ankreuzen, wird bei jeder Änderung des Properties automatisch ein PropertyChange-Event gefeuert, “contrained” Properties unterstützen einen Veto-Mechanismus und indizierte Properties sind Felder (Arrays), die sich entweder komplett oder gezielt per Index belegen oder abfragen lassen (Abb. 8). Auf der zweiten Seite lassen sich eine Kurzbeschreibung sowie der Stellenwert angeben.

Abb. 7: SmartGuide zum Anlegen neuer Properties

Abb. 8: Arten von Properties

Tipp 6: Neue Methoden anlegen

Ähnlich verhält es sich für neue Methoden, bei denen man nicht nur eine Beschreibung der Methode angeben kann, sondern auch solche für die einzelnen Parameter, was für den späteren Nutzer der Bean sehr hilfreich sein kann.

Tipp 7: Neue Ereignisse anlegen

Mit dem Event-Set-Wizard kann man bekanntgeben, welche Ereignisse auftreten können und welche Listener-Interfaces implementiert werden müssen, um diese zu behandeln. Viel nützlicher ist jedoch die Funktion, komplett neue Ereignisse anlegen zu lassen, die man nur über das Features-Menü erreicht. Hier kann man ein Listener-Interface mit all seinen Methoden anlegen und kommentieren. Die dazu passende Event- und Multicaster-Klasse werden gleich mit erzeugt.

Tipp 8: Klassen und Bean-Schnittstelle

Es ist wichtig zu wissen, dass VisualAge alle Klassen ohne BeanInfo ähnlich wie Beans behandelt. So behandelt es alle öffentlichen Methoden der Klasse als solche der Bean und alle Methoden, die mit “get” oder “set” beginnen wie Properties. Dies kann jedoch zum Problem werden, wenn man wirklich eine JavaBean erzeugt, also die BeanInfo konfiguriert. Danach gelten nur noch die dort angegebenen Methoden und Properties als Features der Bean, alles andere wird zum verborgenen Implementierungsdetail. Möchte man nun schon zuvor erzeugte “Features” der Bean hinzufügen, kann man das Menü “Add Available Features...” aufrufen und einfach aus der Liste der möglichen selektieren.

Fazit

JavaBeans bieten ein flexibles und mächtiges Modell zur Erstellung und zum Einsatz von graphischen wie nicht-graphischen Komponenten. VisualAge ist eine Umgebung, die beides erlaubt und mit vielen Hilfsmitteln unterstützt. Standardkomponenten wie die Swing-Beans sind schon vorkonfiguriert und mit vielen Property-Editoren versehen. Aber auch zur Erstellung eigener Komponenten sind Sie gut gerüstet, egal ob Sie diese kommerziell vertreiben wollen oder nur für sich und ihre Kollegen entwickeln.

 

 

 

Literatur

 

[Haw] Florian Hawlitzek: Java-Programmierung mit IBM VisualAge, Addison-Wesley 1999

 

[JM3] JavaMagazin 3/2000, Florian Hawlitzek: International Age

 

© 2006 Hawlitzek IT-Consulting GmbH,
Marketing&Design Kirsten Literski-Hawlitzek

Seitenanfang

Hawlitzek GmbH
Dienstleistungen
Java Downloads
Vorträge
Veröffentlichungen
Kontakt
Geschäftsführung
International
Sitemap