Komponenten-Orientierte Softwareentwicklung mit JavaBeans. Birngruber Dietrich

Ähnliche Dokumente
Java Beans von Christian Beck-Wörner. Inhalt. Was ist ein Bean Konzept von Beans Entwicklung eines Beans Eigenschaften von Beans Testumgebung: BDK

Java Beans.

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke

Einstieg in die Informatik mit Java

Algorithmen und Datenstrukturen

Einstieg in die Informatik mit Java

Java Beans. Seminar Komponentenprogrammierung Freie Universität Berlin, WS 2004/2005 Ivo Köhler, 08. November 2004

Lösungsvorschläge zur Nachklausur zum Kurs 1618 Sommersemester 2001 am

Interface. So werden Interfaces gemacht

Application Frameworks and Componentware Wintersemester 2002/03. Komponentenbasierte Programmierung in Java

Vorkurs Informatik WiSe 15/16

Das Interface-Konzept am Beispiel der Sprache Java

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Das Model View Controller (MVC) Konzept

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0

Objektorientierte Programmierung II

Javakurs für Fortgeschrittene

Kapitel 8: Serialisierbarkeit

Einstieg in die Informatik mit Java

Programmierung Nachklausurtutorium

Java Beans. Übersicht, Eigenschaftstypen, Heutiger Stand.

11. Komponenten Grundlagen der Programmierung 1 (Java)

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Objektorientierte Programmierung

Java Idioms. Basic und Advanced Java Coding Style. Prof. Dr. Nikolaus Wulff

Model-View-Controller. Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 1

Programmieren 1 09 Vererbung und Polymorphie

Einstieg in die Informatik mit Java

Enterprise JavaBeans Überblick

Ausnahmebehandlung in Java

Instrumentierung und Dekodierung

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5.

Objekt-orientierte Programmierung

Klassen als Objekte. Smalltalk vs. Objective-C. Self-Nachrichten an Klassen in Objective-C. Klassen als Objekte. Smalltalk: Everything is an object

Vererbung, Polymorphie

Kapitel 5: Interfaces

Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik

Handbuch für die Erweiterbarkeit

Einstieg in die Informatik mit Java

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Einführung: Verteilte Systeme - Remote Method Invocation -

Laborskript Verteilte Systeme

JavaBeans Property-Editoren und Customizer

Einführung in die Programmierung I. 11. Vererbung. Stefan Zimmer

II.4.5 Generische Datentypen - 1 -

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

7. Klassenmethoden Einführung in die Programmierung (fbw) Sommersemester 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, fbi

Kapitel 4: Klassen und Unterklassen

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Objektserialisierung

12. Java Klassen. Klassen - Technisch. Beispiel: Erdbebendaten. Klassen - Konzeptuell

Programmieren I. Dokumentation mit javadoc Heusch 10.4 Ratz Institut für Angewandte Informatik

Theorie zu Übung 8 Implementierung in Java

Objektorientierte Datenbanken

Funktionale und Objekt-Orientierte Programmierkonzepte

Java Concurrency Utilities

Propädeutikum Programmierung in der Bioinformatik

Creational Patterns. Seminar Software-Entwurf. Thomas Liro WS 2004/05.

Enterprise JavaBeans Überblick

Ein Vortrag im Rahmen des Wahlpflichtmoduls Fortgeschrittene Programmierung mit JAVA

12 Abstrakte Klassen, finale Klassen und Interfaces

Methoden und Klassen. Silke Trißl Wissensmanagement in der Bioinformatik

Sommersemester Implementierung I: Struktur

Programmierkurs Java

parallele Prozesse auf sequenziellen Prozessoren Ein Process ist ein typisches Programm, mit eigenem Addressraum im Speicher.

Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik. Jede Applikation braucht eine Klasse mit einer main-methode

Info B VL 11: Innere Klassen/Collections

Programmierung für Mathematik HS11

Javakurs für Anfänger

Teil 5 - Java. Programmstruktur Operatoren Schlüsselwörter Datentypen

Informatik B. Vorlesung 14 Serialisierung, Autoboxing. Dr. Ralf Kunze

II.4.2 Abstrakte Klassen und Interfaces - 1 -

Programmieren in Java -Eingangstest-

Tag 8 Repetitorium Informatik (Java)

Eclipse in der Java-Entwicklung

Anwendungsentwicklung mit Java. Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie

Grundlagen der Programmierung Prof. H. Mössenböck. 15. Pakete

Wiederholung. Klassenhierarchie:

14 Abstrakte Klassen, finale Klassen, Interfaces

Geschachtelte Klassen

Th. Letschert OOP 2 2. Geheimnisprinzip und Sichtbarkeitsbeziehungen

14 Abstrakte Klassen, finale Klassen, Interfaces. Auswertung von Ausdrücken. Beispiel. Abstrakte Methoden und Klassen

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Nebenläufige Programmierung in Java: Threads

Inhaltsverzeichnis. Grundlagen und Einführung (1. Band) 1

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Schnittstellen, Vererbung & Polymorphismus für Fortgeschrittene

Programmierkurs. SoSe Markus Geveler Inst. f. Applied Mathematics, TU Dortmund.

UML / Fujaba. Generierung von Java-Quellcode aus UML-Diagrammen. Marcel Friedrich

14 Abstrakte Klassen, finale Klassen, Interfaces

Info B VL 14: Java Collections/Reflections

Abstrakte Klassen, Interface. DVG Abstrakte Klassen, Interface

Thomas Sillmann. Swift im Detail HANSER

Transkript:

Komponenten-Orientierte Softwareentwicklung mit JavaBeans Birngruber Dietrich

Inhalt Einführung zum Thema Software Komponenten Komponenten - Wozu? Schlagwörter Geschichtlicher Hintergrund Wiederverwendung Java Komponentenmodell: JavaBeans

Software Komponenten - Wozu? Software Crises (Ende 60er) Ist sie bereits überwunden? Wiederverwendung (Reuse) Qualitätsverbesserung Reduced time to market Objekt-Orientierung hat sich etabliert - Brauchen wir mehr? Software Komponenten sind trendy Alternativen zu Komponenten: GEP, AOP,...

Komponenten - Schlagwörter componentware, software components, component based programming, component oriented programming, Lego for software engineers, reuse, Java, JavaBeans, DCOM, VBX, ActiveX, CORBA, CORBA-Beans...

Abstraktionsmechanismen - Evolution oder Revolution? 40's - 50's Data Registers Control OP Codes 50's - 60's Predefined Types Predefined Operations 60's - 70's User Defined Types User Defined Operations 70's - 80's (Simula 67) 90's -? Classes Components?????

Erhoffte Vorteile durch OOP Wiederverwendung von Code durch Vererbung (inheritance) Flexibilität durch Polymorphismus Modellieren der realen Welt (object identity) Erhöhung der Produktivität und Qualität Und trotzdem: Software Krise nicht überwunden! Warum?

Fragile Base Class Problem beschreibt Probleme durch Vertragsbruch zwischen Unterund Überklasse Unterklasse hält sich an den Vertrag Überklasse wird später geändert und bricht den Vertrag Ersetzbarkeit ist nicht mehr garantiert! syntactic: Modifizieren der Schnittstelle der Überklasse z.b.: Ändern von Methodennamen, Parameterliste,... semantic: Verhalten der Überklasse ändert sich

OOP Problem: Vererbung Inheritance breaks information hiding Schnittstelle zwischen Klienten / Objekt, Klasse ermöglicht Information Hiding A A C B B Schnittstelle zwischen Unterklasse und Superklasse kann Information Hiding verletzten, indem auf Instanzvariable der Superklasse direkt zugegriffen wird C

Beispiel: OO Framework für Editoren OO-Editor-Framework erlaubt schnelle Anpassung :-))) Framework wird für zwei OS bereitgestellt zwei verschiedene Versionen mehr Aufwand für Framework Hersteller Kunde braucht oft nicht ganze Funktionalität Framework kann schwer zerlegt werden einzelnes Objekt kann nicht ausgeliefert werden Kunde will Framework auch in Sprache X weil er auch ein Framework zur Rechtschreibprüfung, geschrieben in der Sprache X, verwendet Integration

Beispiel: Framework (2) Lösungen Auslieferung von Quellcode? um Framework in Anwendungen verwenden zu können Framework Code in jeder Anwendung (Speicherverschwendung) Preisgabe von Know How Application A Editor V1.0 Application B Editor V1.0 neue Framework Version betrifft viele Anwendungen jede Anwendung muss neu übersetzt werden...

Erwartete Vorteile durch COP Qualitätssteigerung Komponenten werden mehrmals wiederverwendet und Fehler werden sukzessiv beseitigt Senkung der Herstellungskosten Kürze Software-Entwicklungszeit indem, komplexe Komponenten wiederverwendet werden. Wurde das nicht schon mit OOP versprochen?

Lösungsansätze Plattformunabhängigkeit keine teueren parallelen Entwicklungen für jedes OS extra Sprachunabhängigkeit verwenden von Komponenten, programmiert in verschiedenen Sprachen Komponenten als unabhängige Einheiten Ausliefern von dem, was wirklich benötigt wird Markt für verschiedene Implementierungen

Lösungsansätze Zugriff nur über Schnittstelle kein teilweises Information Hiding, sondern vollständiges! blackbox reuse kein Auslieferen von Quellcode - sondern binäres Format kein Fragile Base Class Problem Dynamisches Laden von Komponenten weniger Speicherverschwendung Verhalten kann zur Laufzeit verändert werden... Viele dieser Lösungsansätze auch mit OO möglich!!!

Wiederverwendung (reuse) whitebox reuse Schnittstelle gegeben, aber voller Zugriff auf die Implementierung Anwender muß fremden Code verstehen und lernen Entwickler gibt sein Know How preis z.b.: durch implementation inheritance Gewünscht: blackbox reuse Zugriff nur über wohl definierte Schnittstelle Design by Contract Anwender braucht gute Dokumentation - muß aber Code nicht lernen Möglichkeit von try and buy z.b.: Application Programming Interface (API)

Wiederverwendung Objekt - Orientiert: Whitebox Reuse durch Vererbung Anwender braucht gute Dokumentation und muß fremden Code verstehen Entwickler gibt sein Know How preis Komponenten - Orientiert Blackbox Reuse durch Assoziation, Aggregation Anwender braucht gute Dokumentation Zugriff nur über Schnittstellen, Design by Contract Möglichkeit von Try & Buy

JavaBeans Grundlagen

Ziele Verstehen der grundlegenden JavaBean Technologie Wissen, wie man eine JavaBean baut Wissen, wie man eine JavaBean verwendet Spaß an der Arbeit Als Anfänger beginnen und als Bean... als ein JavaBean Experte enden

JavaBeans - Grundlagen JavaBeans Einführung und Definition Events über den grundlegenden Kommunikationsmechanismus Properties über virtuelle Variable Serialization über Zustand und Persistenz Packaging über das Verpacken von JavaBeans

JavaBeans Einführung Einfache Konzepte Einfache Programmierschnittstelle Plattformneutrales Komponentenmodel Verbindungen zu anderen Komponenten- und Verteilungsmodellen wie DCOM oder CORBA In plattformabhängigen Behältern (containern) einbettbar z.b.: MS Excel, Word etc.

JavaBeans Definition A Java Bean is a reusable software component that can be manipulated visually in a builder tool (JavaBeans Spezification)

JavaBeans Definition Beispiele: GUI widgets, Spreadsheet, HTML-Browser Keine genaue Angabe darüber, was eine "software component" ist. Die Granularität von JavaBeans reicht von einer Klasse bis zur ganzen Applikation. Die meisten sind jedoch "middle grained" - was immer das heißen mag! Eine oder mehrere Klassen realisieren eine Komponente Eine oder mehrere Komponenten realisieren eine komplexere Komponente oder eine Applikation

JavaBeans Definition Explizite Unterstützung von visueller Programmierung Design Time versus Run Time Visible versus Unvisible Beans Erforderliche Features oder Eigenschaften: properties events methods persistence customization introspection

JavaBeans Definition Beans wurden für ein lokales Laufzeitmodell im gleichem Adreßraum konzeptioniert. Beans können jedoch über verschiedene Mechanismen auf entfernte Ressourcen zugreifen. Wozu noch Klassenbibliotheken?

Beispiel einer Montageumgebung: VisualAge

JavaBeans - Grundlagen JavaBeans Einführung und Definition Events über den grundlegenden Kommunikationsmechanismus Properties über virtuelle Variable Serialization über Zustand und Persistenz Packaging über das Verpacken von JavaBeans

Ereignisse (Events) Allgemeiner Kommunikationsmechanismus Erlaubt loosley coupled communication Beans werden über Ereignisse zusammengesteckt Idee von Ereignissen: Die Änderung eines Zustandes soll allen, die sich dafür interessieren, mitgeteilt werden. Ziele: Ein allgemeines Rahmenwerk, das erweitert werden kann und für verschiedene Anwendungsdomänen geeignet ist Ereignisse müssen auch in anderen Programmierumgebungen (v.a. scripting environments) behandelt werden können Unterstützung durch Werkzeuge

Event Delegation Mechanismus Technische Realisierung in Java (seit JDK 1.1) mit drei Beteiligten: Quelle (event source) Auslöser der Ereignisse (WO ist etwas passiert?) Sie benachrichtigt alle, die sich dafür interessieren Interessierter mit Ereignis Definition (event listener) reagiert auf Ereignisse (WAS ist passiert?) wird bei der Quelle registriert und deregistriert Ereignis Objekt (event) ist Information über Zustandsänderung

Zusammenspiel zwischen Quelle, Interessierter und Ereignis Objekt X Event Source 1 void addfoolistener (FooListener l) Referenz auf Interface l 2 FooListener (Interface) void foobarhappened (FooEvent e1) Status geändert! - Erzeuge FooEvent e1 - Ereignis "foobarhappened" auslösen Objekt X 3 void removefoolistener (FooListener l)

Bean Design Pattern für Ereignis Objekte (Events) erweitern java.util.eventobject Klassenname endet mit Event z.b.: FooEvent, MouseEvent etc. Instanzvariable sind immutabel d.h. nicht veränderbar Der Zugriff auf Instanzvariable erfolgt nur über öffentliche Zugriffsmethoden Die Zugriffsmethoden unterliegen den Design-Pattern für Properties Ereignis Beispiel: public class AlarmEvent extends java.util.eventobject { private long t; public AlarmEvent(Object source, long ms) {super(source);t=ms;} public long gettime() {return t;} }

Beispiel - SimpleAlarmBean Beschreibung Alle x Millisekunden wird ein Alarm ausgelöst Sehr einfaches Bean: AlarmEvent Enthält die Entstehungszeit des Alarms in Millisekunden. AlarmEventListener Behandelt Ereignis alarmoccured SimpleTimerBean Event Source löst alle x Millisekunden den Alarm aus und benachrichtigt die registrierten AlarmEventListner

Beispiel - SimpleAlarmBean AlarmEvent & AlarmListener public class AlarmEvent extends java.util.eventobject { private long time; public AlarmEvent(Object source, long ms) { super(source); time=ms; } } public long gettime() {return time;} /* ---------------------------------------------------- */ public interface AlarmListener extends java.util.eventlistener { // alarmoccured event void alarmoccured(alarmevent ev); }

Beispiel - SimpleAlarmBean (1) (Ereignisquelle) public class SimpleAlarmBean implements Runnable { Thread t; static final int WAIT_MS = 10000; //alarm occures all 10 sec. Vector listeners; //registered listeners //default constructor public SimpleTimerBean() { listeners = new java.util.vector(); t = new java.lang.thread (this); t.start(); } //registration and deregistration of the listeners public synchronized void addalarmlistener(alarmlistener l) { this.listeners.addelement(l); } public synchronized void removealarmlistener(alarmlistener l) { this.listeners.removeelement(l); } //...

Beispiel - SimpleAlarmBean (2) //... protected void firealarmevent() { if (listeners == null) return; Vector targets=(vector)listeners.clone(); AlarmEvent ev=new AlarmEvent(this,System.currentTimeMillis()); for (int i =0; i < targets.size(); i++) { AlarmListener target=(alarmlistener)targets.elementat(i); target.alarmoccured(ev); } } public void run() { while (t!= null ) { try { t.sleep(wait_ms); firealarmevent(); } catch (Exception ex) { ex.printstacktrace(); } } } } //end of class SimpleAlarmBean

JavaBeans - Grundlagen JavaBeans Einführung und Definition Events über den grundlegenden Kommunikationsmechanismus Properties über virtuelle Variable Serialization über Zustand und Persistenz Packaging über das Verpacken von JavaBeans

Eigenschaften (Properties) Properties oder Eigenschaften sind diskrete, benannte Attribute eines JavaBeans, welche das Aussehen oder das Verhalten eines Beans verändern können. Beispiel: label Property eines GUI Knopfes, welches die Beschriftung darstellt Auf Properties wird immer über Methoden zugegriffen Meistens werden Properties auch gespeichert Properties können zur Run Time und zur Design Time gesetzt werden

Simple Properties Bean Design Pattern Grundlegende Signatur von read / write Properties: public void set<name> ( <Type> value ); //simple setter public <Type> get<name> (); //simple getter z.b.: Simple Property label vom Typ String public void setlabel (String alabel); //simple setter public String getlabel (); //simple getter

JavaBeans - Grundlagen JavaBeans Einführung und Definition Events über den grundlegenden Kommunikationsmechanismus Properties über virtuelle Variable Serialization über Zustand und Persistenz Packaging über das Verpacken von JavaBeans

Serialization (1) Mechanismus zum Speichern (=Serialisieren) und zum Laden (=Deserialisieren) von Java Objekten Es werden Typinformation und Zustand eines Objektes auf einen beliebigen Ausgabestrom gespeichert API ist zu finden im Package java.io Serialisierbare Klassen implementieren java.io.serializable Unabhängig welcher Serialisierungsmechanismus benutzt wird java.io.serializable enthält keine Methoden Ist nur Typ zum Erkennen ja ich möchte serialisiert werden

Serialization (2) Gespeichert werden nur Instanzvariable Nicht gespeichert werden: transient und Klassenvaraible (static) Ganzer Objektgraph wird gespeichert Wichtige Stream Klassen zum Serialisieren von Objekten java.io.objectinputstream java.io.objectoutputstream Fast alle Klassen des JDK implementieren Serializable Ausnahmen: java.lang.object, java.lang.thread, etc.

JavaBeans - Grundlagen JavaBeans Einführung und Definition Events über den grundlegenden Kommunikationsmechanismus Properties über virtuelle Variable Serialization über Zustand und Persistenz Packaging über das Verpacken von JavaBeans

Packaging Problem: Ein JavaBean besteht in der Regel aus vielen Dateien Lösung: archivieren als JAR - Java Archive Anwendungsszenario Bean Entwickler packt die notwendigen Dateien in ein JAR Kunde kauft JAR (übers Netz) und importiert es in sein Builder Tool Builder Tool erkennt automatisch alle Beans und ändert die Palette Kunde verwendet die neuen Beans in seinem Builder Tool JAR Tool ist im JDK enthalten Beispiel: Zwei Dateien werden in das Archiv classes.jar gepackt jar cvfm Beans.jar manifest.mf Foo.class B.class

Inhalt eines JAR.class Dateien: Beans, Unterstützende Klassen etc..html Dateien: Dokumentation.avi,.au etc: sonstige Ressourcen, Videos, Bilder etc. Manifest.mf Datei Beschreibt welche Klassen ein Bean ist und welche nicht Beispiel: Manifest-Version: 1.0 Name: com/ibm/led/ledclock.class Java-Bean: True Digest-Algorithms: SHA MD5 SHA-Digest: XspvM2DfvGR7uap4+U7mpgY0p/o= MD5-Digest: jlabnolaisrcy9vba80a0w== Name: com/ibm/led/alarmevent.class Digest-Algorithms: SHA MD5

JavaBeans - Grundlagen FRAGEN? Wir sehen uns im WS00/01