Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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.

Ähnliche Präsentationen


Präsentation zum Thema: "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."—  Präsentation transkript:

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

2 Überblick J AVA B EANS Komponentenmodell: –Was ist eine Komponente? –Wie interagieren Komponenten? –Wie werden Komponenten "verdrahtet"? J AVA B EANS : –Komponente = Menge von Java Klassen ( hauptsächlich GUI, aber auch unsichtbare Komponenten ) –Interaktion über Events –Verdrahtung durch Entwicklungswerkzeug

3 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 Instanz Komponente B SWTListener Interface handleSWTEvent(e); e addSWTListener(l); removeSWTListener(l); actionPerformed(e);

4 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); Instanz Komponente B SWTListener Interface handleSWTEvent(e);

5 Event Interaktion: Elemente Event Klasse: SWTEvent Eventlistener Interface: SWTListener Eventsource Klasse: A Eventlistener Klasse: B Instanz Komponente A Instanz Komponente B SWTListener Interface handleSWTEvent(e); e addSWTListener(l); removeSWTListener(l);

6 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;} }

7 Eventlistener Interface: SWTListener public interface SWTListener extends java.util.EventListener { public void handleEvent (SWTEvent e); }

8 Eventsource Klasse: A public 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 erkennt man eine Event Quelle!

9 Eventlistener Klasse: B public class B implements SWTListener {... public void handleEvent(SWTEvent e) { doSomething();... } Daran erkennt man einen Event Listener!

10 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

11 Events ++: Adapter Event soll einen bestimmten, nicht antizipierten Methodenaufruf im Listener verursachen => Mehr Flexibilität Instanz Komponente A Instanz Komponente B SWTListener Interface e handleSWTEvent(e); addSWTListener(l); removeSWTListener(l); Adapter machWasBesonderes();

12 J AVA B EANS : 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

13 J AVA B EANS : Reflection Dynamisches Nachladen einer Klasse: Klasse = ClassLoader.loadClass("Unbekannt", true); Analyse der Methoden der Klasse Methoden[ ] = Klasse.getMethods();... if (Methoden[i].getName.startsWith("add")) { }; Dynamisches Aufrufen von Methoden Methoden[i].invoke(Instanz_von_Klasse,Parameter[ ]);

14 J AVA B EANS : 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

15 Komposition "Beschreibung eines Systems von Softwarekomponenten" Unterschiedliche Ansätze Gemeinsame Elemente: –Komponenteninstanzen –Komponenteneigenschaften –Komponentenverbindungen A B D C AB D C A Komponenten laufendes System

16 Kompositionswerkzeuge IBM Visual AgeJ AVA B EANS MS Visual BasicCOM Unix Shell SkriptePipes & Filters Regis (D ARWIN )"Applikationen" Komponentenmodell => Vielzahl von unterschiedlichen Komponentenmodellen => Vielzahl von Kompositionsmethoden

17 IBM Visual Age for Java Visuelle Komposition Erzeugt reinen Java Code Komposition wird compiliert => System = "normales" Java Programm

18 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;

19 MS Visual Basic Visuelle Komposition + Scripting Skript wird in speziellen P-Code übersetzt Komponenten selber in C++ (compiliert) => System = P-Code + Komponenten + VB Runtime

20 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 /tmp/words > /tmp/unknown echo "Unknown keywords:" cat /tmp/unknown Komponenteninstanzen Komponenteneigenschaften Komponentenverbindungen => System = Skript-file + Executables © Nierstrasz & Schneider

21 D ARWIN: Eine Kompositionssprache für verteilte Systeme Komponenten: lokale Applikationen / Prozesse Verbindungen: Methodenaufrufe ("Services") component System { required input daten; provided output daten; subcomponent Instanz1 = 5); subcomponent Instanz2 bind Instanz1.Port1 -- Input bind Instanz1.Port2 -- Instanz2.Port1; bind Instanz2.Port2 -- Output; } System Instanz1 Port1Port2 Port1 Input Output Instanz2 => System = Darwin file + Executables + Runtime Umgebung

22 Regis Runtime Umgebung D ARWIN Ablauf component System { required input daten; provided output daten; subcomponent Instanz1 = 5); subcomponent Instanz2 bind Instanz1.Port1 -- Input bind Instanz1.Port2 -- Instanz2.Port1; bind Instanz2.Port2 -- Output; } machine1 System Instanz1 von Executable Port1Port2 Port1 Input Output Instanz2 von Executable Executable.exe... Andere.exe

23 Zusammenfassung IBM Visual Age System = Java Programm (+ Virtual Machine) MS Visual Basic System = P-Code + Komponenten + VB Runtime Unix Shell Skripte System = Skript + Executables (+ Shell) Regis (D ARWIN ) System = D ARWIN file + Executables + Regis Runtime

24 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)

25 Dynamische Anpaßbarkeit der Komposition einer Anwendung Integration von Kompositionsumgebung + Laufzeitumgebung

26 E VOLVE


Herunterladen ppt "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."

Ähnliche Präsentationen


Google-Anzeigen