220 likes | 332 Views
Java Beans. „A Java Bean is a reusable software component that can be visually manipulated in builder tools“ Visuelle Entwicklungsumgebung Komplett visuell Visuelle Verbindung mit Sourcecode Einfache Skriptsprache (z.B. JSP) Motivation Wieder verwendbare Software Komponenten
E N D
Java Beans • „A Java Bean is a reusable software component that can be visually manipulated in builder tools“ • Visuelle Entwicklungsumgebung • Komplett visuell • Visuelle Verbindung mit Sourcecode • Einfache Skriptsprache (z.B. JSP) • Motivation • Wieder verwendbare Software Komponenten • Leicht veränderbar, da visuell bearbeitbar • Kaum Unterschiede zu Java-Klassen • Plattformunabhängig, da auf Java basierend • Bestandteil des JDK: package java.beans
Visuelle Beans ist visuell (GUI) darstellbar Buttons, Textfelder, etc. z.B. SWING, AWT Eigenschaften visuell-veränderbar abgeleitet von java.awt.Component Nicht Visuelle Beans Hat keine Darstellung (GUI) Datenbank Anbindungs-Beans, Sortier-Beans, Timer, etc Eigenschaften Visuell-veränderbar Platzhalter-Symbol in Entwicklungsumgebung Java Beans - Typen
Grundlagen von Java Beans • Selbstbeobachtung (Introspection) • Analysierbarkeit von außen • Analyse des eigenen Kontextes • Eigenschaften (Properties) • Attribute beschreiben den Zustand des Beans • Spezielle Zugriffmethoden (Property-Programmierkonventionen) • Ereignisse (Events) • Auslösbarkeit von Ereignissen (Java 1.1 Modell) • Anpassung (Customization) • Änderung von Eigenschaften visuell bzw. interaktiv • Speicherung (Persistenz) • Speicher bzw. Ladbarkeit von Beans
Java Bean Darstellung CUSTOMIZER JAVA BEAN EIGENSCHAFTEN HD METHODEN PERSISTENZ EREIGNISSE BEANINFO
Java Beans Design Vorschriften • Öffentlicher Konstruktor • ohne Parameter • Implementation von java.io.Serializable • Javabeans Programmierkonventionen • Get / Set – Methoden für Eigenschaften • Add / Remove – Methoden für Ereignisse • „Multitasking Umgebungssicher“ • Thread Sicherheit
Eigenschaften (Properties) Zugriffsarten • Zugriff durch get bzw. set Methode • getValue() bzw. setValue(1234) • Zugriff während der Anpassung (Customization) • Visuelle Entwicklungsumgebung durch • Property Editor • Property Sheet • Direkter Zugriff in Scriptumgebung (JSP etc) • B.value = 1234 • Zugriff als wäre es Variable • Aufruf der set bzw. get methode implizit
Eigenschaften (Properties) Typen • Einfache Eigenschaften (Simple Properties) • int, string, boolean, etc. • Indizierte/Indexierte Eigenschaften (Indexed-Properties) • Zusammenfassung gleicher Eigenschaften in Arrays • Gebundene Eigenschaften (Bound-Properties) • Informierung der angemeldeten Komponenten über Änderung • eingeschränkte Eigenschaften (Constraint-Properties) • vor Änderung Informierung der angeschlossen Komponenten die evtl. „Veto“ einlegen können
Programmierkonvention public <PropertyTyp> getXXX() publicvoid setXXX (<PropertyTyp> wert ) Nicht notwendigerweise set und get Methode Zugriffs- & Integritätsprüfung in diesen Methoden möglich Zugriff auf Eigenschaften nur durch diese Methoden Bei boolschen Wert isXXX() möglich Simple-Properties (Einfache Eigenschaften) Name RECHTECK Color Farbe; … Eigenschaften getFarbe(); setFarbe(Color neu); … Methoden
Programmierkonvention public <PropertyTyp> [ ] getXXX() public <PropertyTyp> getXXX(int index ) publicvoid setXXX( <PropertyTyp> [ ] werte ) publicvoid setXXX( <PropertyTyp> wert, int index ) Wie Einfache-Eigenschaften Index um Zugriff auf Elemente des Feldes zu bekommen Indexed-Properties (Indizierte Eigenschaften) DOPPELBOX Color[ ] Farben; … getFarben(); setFarben(Color[ ] neu); getFarben(int index) setFarben(Color neu, int index)
Ereignisse (events) Objekt BEAN Trägt sich ein EVENT Obj EVENT Obj EVENT Obj Objekt addXXListener (…) Objekt
Ereignisse (events) • Basiert auf dem Java Event Model • Sender / Listener - Modell • Bean muss Listener verwalten • z.B. durch java.util.Vector • Programmierkonvention für Multicast (mehrere Listener) • public void add<EventListenerType>(<EventListenerType> listener) • public void remove<EventListenerType>(<EventListenerType> list.) • Unicast (ein Listener) • public void add<EventListenerType>(...) throws java.util.TooManyListenersException
Bound-Properties (Gebundene Eigenschaften) Implementiert Property-ChangesListener SENDER EMPFÄNGER Property -Changesupport changes; Object wert; propertyChange (ChangeEvent evt) Feuert Event Trägt sich ein addP.C.Listener() getWert() setWert(Obj new)
Bound-Properties • Basiert auf Simple bzw. Indexed Eigenschaften • set / get Methode vorhanden • Funktionsumfang erweitert • PropertyChangeSupport wird instanziert • add/removePropertyChangeListener werden implementiert • mehre interessierte Listener können sich eintragen (Multicast) • (Unicast) auch möglich • Set Methode der Eigenschaft informiert Listener • ruft firePropertyChange Methode auf • feuert Event nach Änderung des internen Zustandes
Constained-Properties(Eingeschränkte Eigenschaften) Implementiert vetoable-ChangeListener SENDER EMPFÄNGER Vetoable-Changesupport changes; Object wert; vetoableChange (ChangeEvent evt) addV.CListener Feuert Event entscheidet ob Änderung stattfinden darf getWert() getWert() setWert(Obj new)
Constained-Properties • Listener können „VETO“ zu Änderung einlegen • Sonst wie Bounded Properties • Listener können „Veto“ einlegen zu Änderung • set Methode wirft PropertyVetoException • VetoableChangeSupport wird instanziert • add / removeVetoableChangeListener wird implementiert • Multicast • Set Methode informiert eingetragene Listener • Meistens gekoppelt mit Gebundenen Eigenschaften • „feuert“ Event vor Änderung des internen Zustandes
Selbstbeobachtung (Introspection) • Entwicklungsumgebung analysiert Bean • benutzt „low level reflection“ • erhält Informationen über öffentliche Schnittstellen der Bean • Programmierkonventionen nötig um • Eigenschaften • Ereignisse • Methoden unterscheiden zu können • Auch Angabe der Schnittstellen durch Programmierer möglich • BeanInfo Klasse
Anpassung (Customization) • Property-sheet • Änderungen der Eigenschaften visuell • über get/set – Methoden realisiert • Property-Editoren • in meisten IDEs vorgefertigte Editoren für Standard Typen • color, string, integer, boolean, etc • kann auch bei eigenen Typen selbst erstellt werden • Customizer • komplexe Bean, z.B. Tabellenkalkulation • z.B. Wizard, der das Anpassen der Bean erleichtert • kann jede gewünscht GUI Funktionalität haben
Persistenz (Speicherung) • Beans können ihren internen Zustand speichern • implementieren java.io.Serializable • Speicherung z.B. im XML Format • java.beans beinhaltet Methoden die dies leisten • java.beans.XMLdecoder • Beans können sich aus einer Datei selbst initialisieren • Bean wird in einem Builder angepasst und gespeichert • aus dieser Datei kann der ursprünglichen Zustand der Bean wiederhergestellt werden
Speicherung der Beans • Speicherung in JAR (Java ARchive) • Manifest Datei nötig (.mf) • beschreibt was in der JAR Datei steht • gehört zum JDK • Visuelle Entwicklungsumgebungen für Beans • öffnen JAR Datei • analysieren Manifest • bindet Beans aus JAR Datei ein
Arbeiten mit Java Beans • Kaufen oder Programmieren der Beans • Zusammenstellung der Beans • Bean-Builder • Von Hand programmiert • Speichern der Zusammenstellung durch Builder • Serialisierung der internen Zustände der Beans • Speicherung der Verbindungen • Eingetragene Listener, etc. • Aufgabe des Builders
Java Bean Builder • Sun Beanbuilder 1.0 beta • Frei erhältlich • Eher zu Demonstrations-Zwecken geeignet • Borland JBuilder • Personal Edition frei erhältlich • Komplette Entwicklungsumgebung • Viele Komponenten vordefiniert • Entwicklung jeder Art von Java-Programmen möglich
Vorteile „write once, run everywhere“ Introspektion Umfangreiche Bibliotheken Dynamisches Nachladen von Klassen Nachteile kein Komponentenmodell, sondern … Nicht echtzeitfähig Interpretierter bytecode Langsam Kaum Unterstützung bei der Komponenten-Erzeugung Vor-/Nachteile von JavaBeans