26
SWT 17.6.99 JAVABEANS und Komposition Oliver Stiemerling Universität Bonn •JAVABEANS – Events – Properties – Reflection • Komposition – Alternative Ansätze – Vergleich

SWT 17.6.99 J AVA B EANS und Komposition Oliver Stiemerling Universität Bonn J AVA B EANS –Events –Properties –Reflection Komposition –Alternative Ansätze

Embed Size (px)

Citation preview

Page 1: SWT 17.6.99 J AVA B EANS und Komposition Oliver Stiemerling Universität Bonn J AVA B EANS –Events –Properties –Reflection Komposition –Alternative Ansätze

SWT 17.6.99JAVABEANS und Komposition

Oliver Stiemerling

Universität Bonn

• JAVABEANS

– Events– Properties– Reflection

• Komposition– Alternative Ansätze– Vergleich

Page 2: SWT 17.6.99 J AVA B EANS und Komposition Oliver Stiemerling Universität Bonn J AVA B EANS –Events –Properties –Reflection Komposition –Alternative Ansätze

Überblick JAVABEANS

• Komponentenmodell:– Was ist eine Komponente?– Wie interagieren Komponenten?– Wie werden Komponenten "verdrahtet"?

• JAVABEANS:– Komponente = Menge von Java Klassen

(hauptsächlich GUI, aber auch unsichtbare Komponenten) – Interaktion über Events– Verdrahtung durch Entwicklungswerkzeug

Page 3: SWT 17.6.99 J AVA B EANS und Komposition Oliver Stiemerling Universität Bonn J AVA B EANS –Events –Properties –Reflection Komposition –Alternative Ansätze

Event Interaktion: Grundlagen• Event "Quelle" (source) ruft eine Eventhandling

Methode beim Event "Zuhörer" (listener) auf:

• Es wird keine Resultat zurückgegeben...

Instanz Komponente A

InstanzKomponente B

SWTListenerInterface

handleSWTEvent(e);

e

handleSWTEvent(e);addSWTListener(l);removeSWTListener(l);

actionPerformed(e);

Page 4: SWT 17.6.99 J AVA B EANS und Komposition Oliver Stiemerling Universität Bonn J AVA B EANS –Events –Properties –Reflection Komposition –Alternative Ansätze

Event Interaktion: Verbindungen• Multicast:

– >1 Eventlistener

– keine garantierte Reihenfolge!

• Fan-in:– Ein Listener hört auf >1 Quellen

– Synchronisierung?– synchronized

Instanz Komponente A

e

addSWTListener(l);removeSWTListener(l);

InstanzKomponente B

SWTListenerInterface handleSWTEvent(e);

Page 5: SWT 17.6.99 J AVA B EANS und Komposition Oliver Stiemerling Universität Bonn J AVA B EANS –Events –Properties –Reflection Komposition –Alternative Ansätze

Event Interaktion: Elemente

• Event Klasse: SWTEvent• Eventlistener Interface: SWTListener• Eventsource Klasse: A• Eventlistener Klasse: B

Instanz Komponente A

InstanzKomponente B

SWTListenerInterface

handleSWTEvent(e);

e

handleSWTEvent(e);addSWTListener(l);removeSWTListener(l);

Page 6: SWT 17.6.99 J AVA B EANS und Komposition Oliver Stiemerling Universität Bonn J AVA B EANS –Events –Properties –Reflection Komposition –Alternative Ansätze

Event Klasse: SWTEvent

public class SWTEvent extends java.util.EventObject {

private int info; // zusätzliche Informationen zum Ereignis

public SWTEvent (Object source, int info) { super (source); this.info = info; }

public int getInfo () {return info;}}

Page 7: SWT 17.6.99 J AVA B EANS und Komposition Oliver Stiemerling Universität Bonn J AVA B EANS –Events –Properties –Reflection Komposition –Alternative Ansätze

Eventlistener Interface: SWTListener

public interface SWTListener extends java.util.EventListener {

public void handleEvent (SWTEvent e);

}

Page 8: SWT 17.6.99 J AVA B EANS und Komposition Oliver Stiemerling Universität Bonn J AVA B EANS –Events –Properties –Reflection Komposition –Alternative Ansätze

Eventsource Klasse: Apublic class A {

Vector listeners = new Vector ();

public void synchronized addSWTListener (SWTListener listener) { listeners.addElement (listener); } public void synchronized removeSWTListener (SWTListener listener) { listeners.removeElement (listener); }

private void fireSWTEvent () { SWTEvent e = new SWTEvent (this, 9999); int n = listeners.size (); for (int i = 0; i < n; i++) { (SWTListener) listeners.elementAt (i).handleEvent(e); } }}

Daran erkenntman eine EventQuelle!

Page 9: SWT 17.6.99 J AVA B EANS und Komposition Oliver Stiemerling Universität Bonn J AVA B EANS –Events –Properties –Reflection Komposition –Alternative Ansätze

Eventlistener Klasse: B

public class B implements SWTListener {...

public void handleEvent(SWTEvent e) {doSomething();

...}

}

Daran erkenntman einen EventListener!

Page 10: SWT 17.6.99 J AVA B EANS und Komposition Oliver Stiemerling Universität Bonn J AVA B EANS –Events –Properties –Reflection Komposition –Alternative Ansätze

Zusammenfassung Events• Events werden durch void method calls realisiert• multicast und fan-in sind möglich• 4 Implementierungselemente:

– Event Klasse– EventListener Inferface– Eventsource Klasse (Methodensignaturen)– Eventlistener Klasse (implementiert Interface)

• "Umverdrahten" zur Laufzeit möglich

Page 11: SWT 17.6.99 J AVA B EANS und Komposition Oliver Stiemerling Universität Bonn J AVA B EANS –Events –Properties –Reflection Komposition –Alternative Ansätze

Events ++: Adapter• Event soll einen bestimmten, nicht

antizipierten Methodenaufruf im Listener verursachen

=> Mehr Flexibilität

Instanz Komponente A

InstanzKomponente B

SWTListenerInterface

e

handleSWTEvent(e);addSWTListener(l);removeSWTListener(l);

Adapter

machWasBesonderes();

machWasBesonderes();

Page 12: SWT 17.6.99 J AVA B EANS und Komposition Oliver Stiemerling Universität Bonn J AVA B EANS –Events –Properties –Reflection Komposition –Alternative Ansätze

JAVABEANS: Properties• Properties = (veränderbare) Eigenschaften

einer Komponente

• Methodensignatur:void setHintergrundfarbe (Farbe wert);

Farbe getHintergrundfarbe();

• Drei Arten von Properties:– "silent"– bound: Änderungen erzeugen Events– constraint: Änderungen erzeugen Events und

können verhindert werden

Page 13: SWT 17.6.99 J AVA B EANS und Komposition Oliver Stiemerling Universität Bonn J AVA B EANS –Events –Properties –Reflection Komposition –Alternative Ansätze

JAVABEANS: Reflection

• Dynamisches Nachladen einer Klasse:Klasse = ClassLoader.loadClass("Unbekannt", true);

• Analyse der Methoden der KlasseMethoden[ ] = Klasse.getMethods();

...

if (Methoden[i].getName.startsWith("add")) { };

• Dynamisches Aufrufen von MethodenMethoden[i].invoke(Instanz_von_Klasse,Parameter[ ]);

Page 14: SWT 17.6.99 J AVA B EANS und Komposition Oliver Stiemerling Universität Bonn J AVA B EANS –Events –Properties –Reflection Komposition –Alternative Ansätze

JAVABEANS: Benutzungsmodell

• Entwickler erhält Bean mit allen Klassen &

Ressourcen (z.B. bitmaps) als JAR Datei

• Entwicklungswerkzeug analysiert Bean => Event

(Ein- und Ausgänge), Methoden, Properties

• Komposition: Bean wird instanziiert, Properties

werden gesetzt, Instanz wird mit anderen Bean

Instanzen "verdrahtet"

• "Netz" von Beans wird persistent gemacht

Design Modus -------> Runtime Modus

Page 15: SWT 17.6.99 J AVA B EANS und Komposition Oliver Stiemerling Universität Bonn J AVA B EANS –Events –Properties –Reflection Komposition –Alternative Ansätze

Komposition• "Beschreibung eines Systems von

Softwarekomponenten"

• Unterschiedliche Ansätze

• Gemeinsame Elemente:– Komponenteninstanzen– Komponenteneigenschaften– Komponentenverbindungen

AB

DC

A B

DC

AKomponenten laufendes System

Page 16: SWT 17.6.99 J AVA B EANS und Komposition Oliver Stiemerling Universität Bonn J AVA B EANS –Events –Properties –Reflection Komposition –Alternative Ansätze

Kompositionswerkzeuge

• IBM Visual Age JAVABEANS

• MS Visual Basic COM

• Unix Shell Skripte Pipes & Filters

• Regis (DARWIN) "Applikationen"

Komponentenmodell

=> Vielzahl von unterschiedlichen Komponentenmodellen=> Vielzahl von Kompositionsmethoden

Page 17: SWT 17.6.99 J AVA B EANS und Komposition Oliver Stiemerling Universität Bonn J AVA B EANS –Events –Properties –Reflection Komposition –Alternative Ansätze

IBM Visual Age for Java

• Visuelle Komposition

• Erzeugt reinen Java Code

• Komposition wird compiliert

• => System = "normales" Java Programm

Page 18: SWT 17.6.99 J AVA B EANS und Komposition Oliver Stiemerling Universität Bonn J AVA B EANS –Events –Properties –Reflection Komposition –Alternative Ansätze

IBM Visual Age: erzeugter Code

public SWTFrame() {initialize();

} private void initialize() {getButton1().addActionListener(this);

}

private java.awt.Button getButton1() {if (ivjButton1 == null) {

ivjButton1 = new java.awt.Button();ivjButton1.setName("Button1");ivjButton1.setBounds(53, 29, 134, 37);ivjButton1.setLabel("Und tschüß");

};return ivjButton1;

public class SWTFrame extends java.awt.Frame private java.awt.Button ivjButton1 = null;

Page 19: SWT 17.6.99 J AVA B EANS und Komposition Oliver Stiemerling Universität Bonn J AVA B EANS –Events –Properties –Reflection Komposition –Alternative Ansätze

MS Visual Basic

• Visuelle Komposition + Scripting• Skript wird in speziellen P-Code übersetzt• Komponenten selber in C++ (compiliert)

=> System = P-Code + Komponenten + VB Runtime

Page 20: SWT 17.6.99 J AVA B EANS und Komposition Oliver Stiemerling Universität Bonn J AVA B EANS –Events –Properties –Reflection Komposition –Alternative Ansätze

Unix Shell Skript#!/bin/sh# Test auf unbekannte Schluesselwoerter

awk '! /^#/' keywords |tr -c '[A-Z][a-z]' '[\012*]' | sort -u > /tmp/words

grep -h '^#Keys' $* | tr -c '[A-Z][a-z]' '[\012*]' |grep -v 'Keys' |sort -u |comm -23 - /tmp/words > /tmp/unknown

echo "Unknown keywords:"cat /tmp/unknown

Komponenteninstanzen

Komponenteneigenschaften

Komponentenverbindungen

=> System = Skript-file + Executables

© Nierstrasz & Schneider

Page 21: SWT 17.6.99 J AVA B EANS und Komposition Oliver Stiemerling Universität Bonn J AVA B EANS –Events –Properties –Reflection Komposition –Alternative Ansätze

DARWIN: Eine Kompositionssprache für verteilte Systeme

• Komponenten: lokale Applikationen / Prozesse

• Verbindungen: Methodenaufrufe ("Services")

component System {required input daten;provided output daten;

subcomponent Instanz1 ExeA@machine1(Parameter1 = 5);subcomponent Instanz2 ExeA@machine2;

bind Instanz1.Port1 -- Input bind Instanz1.Port2 -- Instanz2.Port1;

bind Instanz2.Port2 -- Output;}

System

Instanz1

Port1Port2 Port2Port1

Input OutputInstanz2

=> System = Darwin file + Executables + Runtime Umgebung

Page 22: SWT 17.6.99 J AVA B EANS und Komposition Oliver Stiemerling Universität Bonn J AVA B EANS –Events –Properties –Reflection Komposition –Alternative Ansätze

Regis Runtime Umgebung

DARWIN Ablauf

component System {required input daten;provided output daten;

subcomponent Instanz1 ExeA@machine1(Parameter1 = 5);subcomponent Instanz2 ExeA@machine2;

bind Instanz1.Port1 -- Input

bind Instanz1.Port2 -- Instanz2.Port1;

bind Instanz2.Port2 -- Output;

}

machine1 machine1

System

Instanz1 von Executable

Port1Port2 Port2Port1

Input OutputInstanz2 von Executable

Executable.exe... Andere.exe

Page 23: SWT 17.6.99 J AVA B EANS und Komposition Oliver Stiemerling Universität Bonn J AVA B EANS –Events –Properties –Reflection Komposition –Alternative Ansätze

Zusammenfassung• IBM Visual Age

System = Java Programm (+ Virtual Machine)

• MS Visual BasicSystem = P-Code + Komponenten + VB Runtime

• Unix Shell SkripteSystem = Skript + Executables (+ Shell)

• Regis (DARWIN)System = DARWIN file + Executables + Regis Runtime

Page 24: SWT 17.6.99 J AVA B EANS und Komposition Oliver Stiemerling Universität Bonn J AVA B EANS –Events –Properties –Reflection Komposition –Alternative Ansätze

Zusammenfassung 2: Unterschiede

• Wie wird komponiert? (Interface: textuell, visuell, gemischt)

• Anzahl der Sprachen zur Beschreibung des ausgelieferten Systems? (nur Java, Kompositionssprache + Programmiersprache, Programmiersprache1 + Programmiersprache2)

• Ist das resultierende System verteilt oder lokal?• Wann werden Änderungen in der Komposition

wirksam? (nach dem Neustart, nach Compilieren+Neustart, sofort)

Page 25: SWT 17.6.99 J AVA B EANS und Komposition Oliver Stiemerling Universität Bonn J AVA B EANS –Events –Properties –Reflection Komposition –Alternative Ansätze

Dynamische Anpaßbarkeit der Komposition einer Anwendung

• Integration von Kompositionsumgebung + Laufzeitumgebung

Page 26: SWT 17.6.99 J AVA B EANS und Komposition Oliver Stiemerling Universität Bonn J AVA B EANS –Events –Properties –Reflection Komposition –Alternative Ansätze

EVOLVE