JavaBeans Folien

Werbung
Java Software-Komponenten
"JavaBeans"
• Warum?
–
–
–
–
Wiederverwendung Reuse
Objektorientierung reicht nicht
Kapselung von Funktion, Dokumentation und Ressourcen
Zusammensetzen einzelner Komponenten so einfach wie
möglich gestalten
– Wenn möglich Plattform- und Sprachenunabhängigkeit
– Testen und Verifizieren von einzelnen Komponenten
– Pool aus Standardkomponenten (z.B. GUI Objekte)
• Informationsquellen:
– JavaBean Homepage:
http://java.sun.com/beans
– Sammlungen von JavaBean Komponenten:
http://www.alphaworks.ibm.com/alphaBeans
http://www.developer.com/directories/pages/dir.java.html
– JavaBean Tutorial von Sun:
http://www.ssw.uni-linz.ac.at/
Services/Docs/Tutorial/javabeans/index.html
– O’Neil, Josef: JavaBeans Programming from the
Ground Up, McGraw Hill, 1998,
ISBN: 0-07-882477-X
Wiederverwendung
Objekt - Orientiert
• Whitebox Reuse durch Vererbung
• Vererbung = Subclassing;
erbt Code & Schnittstellen
• Anwender muss Doku & fremden Code
verstehen
• Entwickler gibt sein Know-How preis
Komponenten - Orientiert
• Blackbox Reuse durch „Zusammenstecken“
• Vererbung = Subtyping;
erbt Schnittstellen (COM, nicht OO)
• Anwender braucht gute Dokumentation
• Möglichkeit von „Try & Buy“
Java Software-Komponenten
"JavaBeans"
"A Java Bean is a reusable software component
that can be manipulated visually in a builder tool“
• JavaBean = Java Objektmodell (Klasse)
+ Eigenschaften (properties)
+ Ereignisse (events)
+ Unterstützung für visuelle
Komposition
• Design Time versus Run Time
• Visible und Invisible Beans
• Idee von Ereignissen: Die Änderung eines
Zustandes soll allen, die sich dafür interessieren,
mitgeteilt werden.
• Erlaubt „loosley coupled communication“
• Beans werden über Ereignisse
zusammengesteckt
Ereignismechanismus
e1
Event
source
e1
Ereignisquelle (event source)
Interessent (event listener)
•
•
•
Auslöser der Ereignisse
Wo ist etwas passiert?
benachrichtigt alle
Interessenten
•
wird bei der Quelle
registriert und deregistriert
reagiert auf Ereignisse
Wer will es wissen?
Methoden der Ereignisquelle:
addMyEventListener( MyEventListener l)
removeMyEventListener( MyEventListener l )
fireMyEvent(){
//löse Ereignis für alle MyEventListener aus
}
Methoden des Ereignisempfängers:
interface MyEventListener{
doAction( MyEvent e ){}
}
Beispiel "AlarmBean"
• Alle x Millisekunden wird ein Alarm
ausgelöst
• AlarmEvent
– Enthält die Entstehungszeit des Alarms in
Millisekunden
• AlarmEventListener
– Reagiert auf AlarmEvent
– Methode:
public void alarmOccurred(AlarmEvent ev)
• AlarmBean
– Ereignisquelle
– Löst alle x Millisekunden den Alarm aus und
benachrichtigt die registrierten
AlarmEventListener
Beispiel "AlarmBean"
public class AlarmBean {
public addAlarmListener(AlarmListener al) {
// ... register al ...
}
private fireAlarmEvent () {
for (all registered listeners l) {
l.alarmOccurred (event);
}
}
public removeAlarmListener(AlarmListener l) {
... remove l ...
}
... other methods, properties, ...
}
public class AlarmClock implements AlarmEventListener {
public void alarmOccurred(AlarmEvent ev) {
this.beep();
}
}
Attribute "Properties"
• kann mittels Code und mittels Editor verändert werden
• verändert Aussehen / Verhalten einer Bean
– Beispiel: „label“ Eigenschaft eines GUI Knopfes, welches
die Beschriftung verändert
• kann zur Run Time und zur Design Time gesetzt werden
• Es wird immer über öffentliche Methoden zugegriffen
– Datenkapsel!
– kann in Bean als Instanzvariable gespeichert werden, oder
berechnet werden, oder .....
• Namenskonventionen um Eigenschaften von Methoden zu
unterscheiden
• Eigenschaft:
Name: label
Typ: String
• Namenskonventionen der Zugriffsmethoden:
public String getLabel();
public void setLabel(String aLabel);
Attribute "Properties"
• Simple Property
– lesbar
– schreibbar
• Bound Property
– spezielles Ereignis wird nach dem Ändern einer
Eigenschaft ausgelöst
• Constrained Property
– spezielles Ereignis wird vor dem Ändern einer
Eigenschaft ausgelöst
– es kann ein Veto gegen die geplante Änderung
eingelegt werden
• Indexed Property
– für eine Sammlung von gleichen Eigenschaften (z.B.:
URL-Liste)
AlarmBean Package
Manifest-Version: 1.0
Name: org/merlin/beans/alarm/AlarmBean.class
Java-Bean: True
Herunterladen