Verteilte Systeme Entwurfsmuster

Ähnliche Dokumente
Lukas Klich. Projektgruppe SHUTTLE. Seminar: Entwurfsmuster Lukas Klich/Projektgruppe SHUTTLE Seite: 1. Entwurfsmuster

Design Patterns II. Der Design Muster Katalog. Prof. Dr. Nikolaus Wulff

Entwurfsmuster Martin Fesser 00IN

Objektorientierte und Funktionale Programmierung SS 2014

Überblick FBC SNW Zusammenfassung. Entwurfsmuster. Eine Einführung. Botond Draskoczy. Marcus Vitruvius Pollio

Entwurfsmuster in Java

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

Entwurfsprinzip. Entwurfsprinzip

Verhaltensmuster. Entwurfsmuster - Design Patterns. HAW Hamburg Fakultät Technik und Informatik Department Informations- und Elektrotechnik

Objektorientierteund FunktionaleProgrammierung

Entwurfsmuster (Design Patterns)

Praxisbuch Objektorientierung

Einführung in die Informatik II

Entwurfsmuster. Die Entwurfsmuster Observer, State und Singleton am Beispiel einer Digital-Uhr

Entwurfsmuster. Marc Monecke

Objektorientierte Programmierung

Structural Patterns. B. Sc. Andreas Meißner

Design Patterns. (Software-Architektur) Prof. Dr. Oliver Braun. Letzte Änderung: :12. Design Patterns 1/26

Entwurfsmuster. Tao Zhang Technische Universität München Lehrstuhl für Angewandete Softwaretechnik

Matthias Geirhos. Entwurfsmuster. Das umfassende Handbuch. Rheinwerk. Computing

Einführung in die Programmierung für NF MI. Übung 11

Einführung in die Programmierung für NF. Übung

Entwurfsmuster (Design Pattern) ETIS SS05

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

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

Software-Entwurfsmuster (weitere) A01 OOP. Software-Entwurfsmuster (weitere)

Erzeugungsmuster. Kapselung der Objekt-Erzeugung

Decorator Pattern. Analyse- und Design-Pattern CAS SWE FS14. Roland Müller Samuel Schärer

Software Engineering. 7. Entwurfsmuster

Programmieren in Java

Analyse und Modellierung von Informationssystemen

Tutorium Softwaretechnik I

Analyse und Modellierung von Informationssystemen

Objektorientierte Programmierung (OOP)

Entwurfsmuster - Iterator

Vererbung. Generalisierung und Spezialisierung Vererbung und Polymorphismus

Kapitel 13. Abstrakte Methoden und Interfaces. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Inhalt. Design patterns Kernbereiche Creational patterns Factory method Abstract Factory Builder Structural patterns Adapter Facade Decorator

Objektorientierte Programmierung Studiengang Medieninformatik

Software-Architektur Design Patterns

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

Bekannte Lösungen für bekannte Probleme benutzen. Entwurf auf höherer Abstraktionsebene als bei Programmiersprachen

Einführung in die objektorientierte Programmierung

Model-View-Controller

Algorithmen und Datenstrukturen

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

Programmieren II. Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz Institut für Angewandte Informatik

Software Engineering II (IB) Design Patterns

Software Engineering II (IB) Design Patterns

Th. Letschert OOP 2 2. Geheimnisprinzip und Sichtbarkeitsbeziehungen

Einstieg in die Informatik mit Java

Objektorientierte Programmierung Studiengang Medieninformatik

Software-Entwurfsmuster

Objektorientierte Programmierung III

Software Engineering. 10. Entwurfsmuster II. Franz-Josef Elmer, Universität Basel, HS 2015

Design Pattern. Motivation, Beispiel Definition "Das" Buch der Gang of Four Ausführliches Beispiel: Facade Beispiele. Aufgabe

Wahlpflichtfach Design Pattern

Model-View-Controller

Programmieren II. Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz Institut für Angewandte Informatik

Vererbung, Polymorphie

II.4.5 Generische Datentypen - 1 -

Design Patterns. 3. Juni 2015

::Zweck. Sicherstellung, dass nur eine Instanz einer bestimmten Klasse existiert

Design Patterns I. Observer, Listener & MVC

Factory Method Pattern

Programmieren I. Überblick Objektorientierung Heusch 12 Ratz 7. Institut für Angewandte Informatik

Behavioral Patterns. Seminar Software-Entwurf WS 04/05. Przemyslaw Dul

Daniel Warneke Ein Vortrag im Rahmen des Proseminars Software Pioneers

Konzepte der Programmiersprachen

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Programmieren 1 09 Vererbung und Polymorphie

Factory Method (Virtual Constructor)

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

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

Abstrakte Klassen, Interfaces

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

Entwurfsmuster. Tutorium 7 iloveswt.de Fabian I. Miltenberger INSTITUT FÜR PROGRAMMSTRUKTUREN UND DATENORGANISATION (IPD)

Einstieg in die Informatik mit Java

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Konstantin Prokudin 10. Juni 2011

Einführung in die Programmiersprache Java II

Informatik II Übung 06. Benjamin Hepp 5 April 2017

Ein Entwurfsmuster der GoF. vorgestellt von. Sigrid Weil 16. Januar 2008

Einführung in die Programmierung für NF. Übung

ASPECT-ORIENTED DESIGN PATTERNS

Klassen und ihre Beziehungen III: Mehrfache Vererbung, Rollen, Schnittstellen und Pakete

3. Entwurfsmuster zur Entkopplung von Modulen

Vorlesung Datenstrukturen

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure

Observer Chain of Responsibility Mediator

Universität Bremen. Entwurfsmuster. Thomas Röfer. Wettbewerb Motivation Erzeugende Muster Strukturelle Muster Verhaltensmuster

Begriffe 1 (Wiederholung)

Programmierkurs Java

Programmiermethodik 3. Klausur Lösung

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete. II.4.2 Abstrakte Klassen und Interfaces - 1 -

JUnit a Cook s Tour. Framework in Java Automatisierter Ablauf von Testfällen Testläufe kombinieren. Unterlagen als PDF auf der Übungsseite!

Vermittler (Mediator) Sabine Müller - Sven Richter - Jens Wagenbreth 03IN2-P-D

JavaScript objektorientiert

Analyse und Modellierung von Informationssystemen

Transkript:

Verteilte Systeme Entwurfsmuster 09.02.11 - Folie 1

Erfolgreiche Architekturen... Die Cheops-Pyramide Erbaut: 2551 bis 2528 v. Chr. Das Reichstagsgebäude Erbaut: 1884 1894 Die Glaskuppel Erbaut: 1995 1999 Quelle: Vorlesung von Herrn Ratz 09.02.11 - Folie 2

und weniger erfolgreiche Der Schiefe Turm zu Pisa Erbaut: 12. Jahrhundert Der Untergrund erwies sich als nicht tragfähig genug für den Turm. Die Knickpyramide Erbaut: 2570 2480 v.chr Die Steigung der unteren Pyramide erwies sich als zu steil. Um ein Abrutschen zu verhinden wurde der obere Teil deutlich flacher gebaut. Quelle: Vorlesung von Herrn Ratz 09.02.11 - Folie 3

Die objektorientierte Denkweise Kapselung Abstraktion Vererbung Polymorphie 09.02.11 - Folie 4

Kapselung von Daten lockdb() lockdb() Daten Schnittstelle unlockdb() unlockdb() checkauth() checkauth() Daten Schnittstelle checkinput() checkinput() savedata() savedata() Objektorientierung bietet die Möglichkeit, die Daten von ihren Verwendern durch eine Schnittstelle zu entkoppeln, da der Direktzugriff auf fremde Daten unterbunden werden kann. Die Zugriffsschnittstelle besteht aus ausführbaren Methoden. Somit kann sichergestellt werden, dass benötigte Prüfungen und Kontrollen nicht umgangen werden. 09.02.11 - Folie 5

Kapselung von Daten Wenn Sie nicht in Unterhosen durch die Straßen laufen würden, warum sollten es dann Ihre Daten tun? 09.02.11 - Folie 6

Abstraktion Bildung von Klassenhierarchien durch Erkennung von ist ein-beziehungen Bär Säugetier Ein Hund ist ein Säugetier Löwe Hund Quelle: Vorlesung von Herrn Ratz Vogel Pinguin 09.02.11 - Folie 7

Vererbung Merkmale und Verhalten in der allgemeinsten Klasse festlegen Unterklassen erben diese dann Lebewesen Nahrung aufnehmen Tier Schlafen Wirbeltier Säugen Säugetier Bär Löwe Hund Quelle: Vorlesung von Herrn Ratz Vogel Pinguin 09.02.11 - Folie 8

Polymorphie Verhalten in Unterklassen individuell überschreiben Namensgleiche Vorgänge mit unterschiedlichen Ausprägungen Lebewesen Tier Nahrung aufnehmen (Fressen) Wirbeltier Schlafen Säugetier Bär Löwe Hund Quelle: Vorlesung von Herrn Ratz Vogel Pinguin 09.02.11 - Folie 9

Beziehungen zwischen Klassen Ist X ein Y? Ist die eine Klasse ein Spezialfall der anderen? Oder ist die eine Klasse eine Verallgemeinerung der anderen? Beispiel: Ein Hund ist ein Wirbeltier oder ein Auto ist ein Transportmittel Hat X ein Y? Besitzt ein Objekt ein anderes Objekt (Komposition)? Beispiel: Ein Auto hat Räder, aber ein Auto ist kein Rad und ein Rad ist auch kein Auto Benutzt X ein Y? Benötigt ein Objekt ein anderes Objekt, um seine Aufgabe zu erfüllen? Beispiel: Ein Auto benutzt eine Straße. Es ist aber keine Straße und es besitzt auch keine. (Die Straße wird ja von mehreren Autos benutzt) Quelle: Vorlesung von Herrn Ratz 09.02.11 - Folie 10

Beispiel: Entenhausen public abstract class Ente { abstract public String quaken(); public void schwimmen() {... } } public class Stockente extends Ente { public String quaken() { return "Quak!"; } } public class Gummiente extends Ente { public String quaken() { return "Quietsch!" } public void schwimmen() {... } } Implementieren der abstrakten Methode Überschreiben der geerbten Methode 09.02.11 - Folie 11

Kleine Änderung... Führen wir schnell eine kleine Änderung durch... public abstract class Ente { abstract public String quaken(); public void schwimmen() { // Alle Enten schwimmen gleich } } public void fliegen() { // Natürlich können Enten fliegen } Wir haben eine Methode hinzugefügt 09.02.11 - Folie 12

Hey, hast du das gesehen? Fliegende Gummienten... 09.02.11 - Folie 13

Entwurfsregel Nr. 1 Ein guter Entwurf ist ein guter Entwurf ist ein guter Entwurf. Arbeiten Sie ihn daher sorgfältig aus! 09.02.11 - Folie 14

Entwurfsregel Nr. 2 Seien Sie sich bewusst, welche Verantwortlichkeiten in Ihren Programmen herrschen. Beispielsweise: Anlegen und Suchen von Datensätzen Anzeige der Daten, Benutzerführung Validierung von Benutzereingaben Berechtigungsprüfungen Fachliche Berechnungen und Prüfungen Datenaustausch übers Netzwerk 09.02.11 - Folie 15

Entwurfsregel Nr. 3 Teile und Herrsche: Vermischen Sie niemals zwei Verantwortlichkeiten in einer Klasse 09.02.11 - Folie 16

Darauf sollten Sie achten Kapseln Sie, was sich verändert in einer eigenen Klasse Minimiert die Anpassung bestehender Methoden Denn es ist einfacher, eine Methode um einen Aufruf zu erweitern, als um einen neuen Algorithmus Jede Klasse sollte für Erweiterungen offen aber gegen Veränderungen gesperrt sein Neue Methoden hinzuzufügen ist in Ordnung Änderungen an alten Methoden sind allerdings zu vermeiden Ziel: Möglichst keine Änderungen an bestehendem Quellcode 09.02.11 - Folie 17

Noch mehr Entwurfsprinzipien Hinsichtlich zukünftiger Erweiterungen: Kapseln Sie, was sich verändert (in je einer eigenen Klasse) Eine Klasse sollte nur einen Grund für Änderungen haben Klassen sollten für Erweiterungen offen aber gegen Veränderungen gesperrt sein (Offen/Geschlossen-Prinzip) Hinsichtlich dem Zusammenspiel der Objekte: Programmieren Sie gegen Schnittstellen und Abstraktionen, aber nicht gegen konkrete Implementierungen Ziehen Sie Komposition der Vererbung vor Quelle: Entwurfsmuster von Kopf bis Fuß 09.02.11 - Folie 18

Noch mehr Entwurfsprinzipien Vermeiden Sie zu enge Bindungen (zwischen den Klassen) Erzeugen Sie interagierende Objekte mit lockerer Kopplung Quelle: Entwurfsmuster von Kopf bis Fuß 09.02.11 - Folie 19

Noch mehr Entwurfsprinzipien Sprechen Sie nur mit Ihren Freunden Don't call us, we'll call you! (Hollywood-Prinzip) Quelle: Entwurfsmuster von Kopf bis Fuß 09.02.11 - Folie 20

Heuristik vs. Entwurfsmuster Einfache Heuristiken Praxiserprobte Verhaltensweisen als allgemeine Richtlinie Verallgemeinerung der langjährig gesammelten Erfahrung Lassen sich oft in wenigen Sätzen beschreiben Werden häufig unbewusst eingesetzt (Vgl. Entwurfsregeln) Entwurfsmuster Allgemeine Lösungen für wiederkehrende Aufgaben Ausführlich dokumentierte Feinentwürfe echter Probleme Werden in Musterkatalogen dokumentiert und publiziert Angelehnt an Patterns in der Architektur (z.b. 6 Foot Balcony) 09.02.11 - Folie 21

Beispiel: Heuristiken Separation of Concerns Sorgen Sie für eine klare Trennung der Zuständigkeiten. Jedes Anwendungsmodul sollte nur eine Aufgabe haben. Information Hiding Modules Ein Modul sollte alle Details seiner Implementierung vor seinen Aufrufern verbergen. Die öffentliche Schnittstelle des Moduls sollte daher so wenig Parameter wie möglich besitzen. 09.02.11 - Folie 22

Beispiel: Entwurfsmuster Quelle: Entwurfsmuster von Kopf bis Fuß 09.02.11 - Folie 23

Inhalte eines Entwurfsmusters Name Jedes Muster besitzt einen eindeutigen Namen Zweck, Motivation Kurzbeschreibung des Problems und Erläuterung desselben an einem Beispiel Anwendbarkeit Aufzählung, wann das Muster sinnvoll ist und wann es besser nicht verwendet werden sollte Verwandte Muster Verweise auf ähnliche oder häufig zusammen genutzte Muster Struktur, Teilnehmer Graphische Darstellung und Beschreibung aller Klassen und Objekte Interaktion, Konsequenzen Zusammenarbeit der Teilnehmer und Auswirkungen auf den Entwurf Beispielcode Ausführliche Diskussion anhand einer Beispielimplementierung Bekannte Verwendungen Beispiele für den erfolgreichen Einsatz des Musters 09.02.11 - Folie 24

The Gang of Four... Quelle: Entwurfsmuster von Kopf bis Fuß 09.02.11 - Folie 25

Objektbasiert Klassenbasiert und ihre Muster Erzeugungsmuster Strukturmuster Verhaltensmuster Fabrikmethode Fabrikmethode Adapter Adapter (Nur (Nur mit mit Mehrfachvererbung) Mehrfachvererbung) Interpreter Interpreter Schablonenmethode Schablonenmethode Abstrakte Abstrakte Fabrik Fabrik Erbauer Erbauer Prototyp Prototyp Singleton Singleton Adapter Adapter (Objektbasiert) (Objektbasiert) Brücke Brücke Dekorierer Dekorierer Fasade Fasade Fliegengewicht Fliegengewicht Kompositum Kompositum Proxy Proxy Befehl Befehl Beobachter Beobachter Besucher Besucher Iterator Iterator Memento Memento Strategie Strategie Vermittler Vermittler Zustand Zustand Zuständigkeitskette Zuständigkeitskette 09.02.11 - Folie 26

POSA/Siemens-Patterns Bekannte Muster aus folgenden Bereichen: Idiome Unterste Abstraktionsebene Sprachspezifisch Zum Beispiel Smart Pointer Idiom (C++) Entwurfsmuster Vergleichbar mit den GoF-Mustern Aber weniger umfangreich Architekturmuster Der eigentliche Mehrwert von POSA Zum Beispiel MVC oder Layer-Pattern 09.02.11 - Folie 27

Java EE-Patterns Patterns Patterns für für Java Java Enterprise Enterprise Von Von Sun/Oracle Sun/Oracle und und der der Community Community Nach Nach Schichten Schichten gruppiert gruppiert 09.02.11 - Folie 28

Vorteile von Design Patterns Spielen Sie Schach? Dann kennen Sie sicher den Unterschied zwischen einer Kurzeinführung, die erklärt, wie die einzelnen Figuren ziehen, und einem Lehrbuch, das zeigt, wie man gewinnt. "Entwurfsmuster" ist das Buch, das zeigt, wie man mit objektorientierter Programmierung (OOP) gewinnt. Es gibt viele Programmiersprachen, und noch mehr Bücher, die sie beschreiben und die auch die OOP erklären. Aber was fange ich mit den Objekten an? Kapriziere ich mich auf Vererbung und leite alles und jedes von "Thing" ab - und halse mir dabei bucklige Verwandschaften und kaum zu durchschauende Seiteneffekte ein? Erstelle ich "eierlegende Wollmilchmonster" oder beschränken sich meine Objekte auf nur leicht verkomplizierte Datentypen, die ich dann doch wieder, im Grunde prozedural, versuche miteinander zur Zusammenarbeit zu bewegen? Wenn ich weiß, wie die Schachfiguren ziehen, so hat mir noch keiner gesagt, warum das Pferdchen am Rand ungünstig steht, was eine italienische Eröffnung ist oder wie man eine Königsfestung angreift. Die Muster fehlen. -- Kundenrezession auf Amazon zum GoF-Buch Entwurfsmuster 09.02.11 - Folie 29

Vorteile von Design Patterns Entwurfsmuster Bieten erprobte Lösungsansätze Ermöglichen dadurch bessere Entwürfe Erhöhen somit auch die Codequalität Können jedoch beliebig angepasst werden Bieten dennoch ein gemeinsames Vokabular Verbessern somit die Kommunikation unter Entwicklern Finden sich überall in den Java APIs Werden entdeckt und nicht erfunden Sollten jedoch sparsam eingesetzt werden 09.02.11 - Folie 30

Beispiel: Vokabular Ohne Design Patterns: Mit Design Patterns: (Unvollständig, Verwirrend, Zeit verschwendend) (Kurz, Präzise, Vollständig) Also, ich habe da diese Radioklasse erstellt. Sie behält alle Objekte im Auge, die ihr lauschen, und jedes mal, wenn ein neues Stückchen Information ankommt, benachrichtigt sie jeden dieser Zuhörer. Toll daran ist, dass die Zuhörer sich jederzeit an das Radio anschließen können und sich auch selbst wieder entfernen können. Und die Radioklasse selbst weiß gar nichts über die Zuhörer; jedes Objekt, das das richtige Interface implementiert, kann sich registrieren. Observer Quelle: Entwurfsmuster von Kopf bis Fuß 09.02.11 - Folie 31

Notation: Klassendiagramme AbstractPerson String getname() setname(string name) int getage() String name int ageinyears public abstract class AbstractPerson { private String name; private int ageinyears; public String getname() {... } public void setname(string name) {... } public int getage() {... } } public class PersonWithAddress extends AbstractPerson { private Address myaddress; public Address getaddress() {... } public void setaddress(address a) {... } PersonWithAddress Address getaddress() SetAddress(Address a) Address myaddress } Address String street int housenumber int postcode String country Klassendiagramme zeigen die Klassen und ihre Beziehungen untereinander. Der offene Pfeil beschreibt die Vererbung, der geschlossene Pfeil eine Referenz (Komposition). 09.02.11 - Folie 32

Notation: Objektdiagramme knownhitchikers persons[] someperson address name ageinyears = "Arthur Dent" = 42 anotherperson name ageinyears Objektdiagramme zeigen die Programmstruktur im Hauptspeicher, während das Programm ausgeführt wird. Sie zeigen anhand eines Beispiels, welche Daten die Objekt besitzen und auf welche Objekte sie Referenzen haben. address street housenumber postcode country = "Erzbergerstr." = 123 = 76131 = "DE" = "Ford Perfect" = 37 09.02.11 - Folie 33

Unser erstes Muster 09.02.11 - Folie 34

Muster: Fassade Zweck Vereinfachung einer sehr komplexen Schnittstelle Mehrere, komplizierte Objekte vor dem Aufrufer verstecken Motivation Eine Heimkinoanlage besteht aus sehr vielen Komponenten Einen Film anzuschauen ist daher viel zu kompliziert! Blueray-Player Automatische Leinwand Surround-Anlage Endstufe und Boxen Radio-Tuner Popcorn-Maschine Dimmbare Beleuchtung 09.02.11 - Folie 35

this.popcorn.poweron(); this.popcorn.poweron(); this.popcorn.begin(); this.popcorn.begin(); this.lights.dim(0.33); this.lights.dim(0.33); this.screen.pulldown(); this.screen.pulldown(); this.beamer.switchon(); this.beamer.switchon(); this.beamer.setmode(dvd); this.beamer.setmode(dvd); this.beamer.setmode(wide_scr); this.beamer.setmode(wide_scr);...... Quelle: Entwurfsmuster von Kopf bis Fuß 09.02.11 - Folie 36

Muster: Fassade public public class class HeimkinoFassade HeimkinoFassade {{ public public void void blurayspielen() blurayspielen() {{ this.popcorn.poweron(); this.popcorn.poweron(); this.popcorn.begin(); this.popcorn.begin(); Zuschauer (Client) Die komplizierten Vorgänge stecken nun in der Fassade. Heimkino-Fassade public fernsehen() public blurayspielen() Blurayplayer }} }} this.lights.dim(0.33); this.lights.dim(0.33); this.screen.pulldown(); this.screen.pulldown();...... Dolbyanlage Leinwand Popcorn-Maschine Subwoofer Beleuchtung Satelitenboxen Endstufe Ziemlich komplexes Heimkinosystem 09.02.11 - Folie 37

Muster: Singleton Zweck Sicherstellen, dass es von einer Klasse nur ein Objekt gibt Zentrale Objekte nicht in globalen Variablen ablegen Kontrollieren, ob ein Objekt erzeugt werden darf oder nicht Motivation Eine große Anwendung soll verschiedene Aktionen protokollieren Das Protokoll wird an vielen Stellen im Programm fortgeschrieben Zum Schreiben des Protokolls existiert eine spezielle Klasse Da es nur ein Protokoll gibt, kann es aber nur ein Objekt geben 09.02.11 - Folie 38

Muster: Singleton usermanagement authorizationchecks Innerhalb der gesamten Anwendung existiert nur ein Objekt, welches genutzt wird, um Einträge ins Anwendungsprotokoll zu schreiben. Durch das Singleton-Muster wird sichergestellt, dass es niemals zwei solche Objekte geben kann. loancalculator... applicationlog String[] logentries log log == ApplicationLog.getInstance(); ApplicationLog.getInstance(); log.warning("invalid log.warning("invalid username!"); username!"); 09.02.11 - Folie 39

Muster: Singleton Nicht Nicht threadsichere threadsichere Variante: Variante: Singleton public public class class Singleton Singleton {{ private private static static Singleton Singleton instance; instance; private private Singleton() Singleton() {{...... }} public static Singleton getinstance() private Singleton() public public Singleton Singleton getinstance() getinstance() {{ if if (Singleton.instance (Singleton.instance == == null) null) {{ Singleton.instance Singleton.instance == new new Singleton(); Singleton(); }} private static Singleton instance Dadurch dass der Konstruktor private ist, können außerhalb der Klasse keine Objekte von ihr erzeugt werden. Um ein Objekt zu erhalten muss immer getinstance() aufgerufen werden. }} }} return return Singleton.instance; Singleton.instance; log log == ApplicationLog.getInstance(); ApplicationLog.getInstance(); log.warning("invalid log.warning("invalid username!"); username!"); 09.02.11 - Folie 40

Muster: Singleton Threadsichere Threadsichere Variante: Variante: Singleton public static Singleton getinstance() private Singleton() private static Singleton instance In der Methode getinstance() können beliebige, weitere Prüfungen untergebracht werden. Zum Beispiel können hier Berechtigungen geprüft werden, ob ein Objekt überhaupt erzeugt werden darf. public public class class Singleton Singleton {{ private private static static Singleton Singleton instance; instance; private private Singleton() Singleton() {{...... }} public public Singleton Singleton getinstance() getinstance() {{ synchronized(singleton.class) synchronized(singleton.class) {{ if if (Singleton.instance (Singleton.instance == == null) null) {{ Singleton.instance Singleton.instance == new new Singleton(); Singleton(); }} }} return return Singleton.instance; Singleton.instance; }} }} 09.02.11 - Folie 41

Muster: Proxy Zweck Zugriffe auf ein Objekt durch einen Stellvertreter kontrollieren Anwendungsbeispiele Aufruf von Methoden auf einem entfernten Computer (RMI) Möglichst späte Erzeugung von speicherintensiven Objekten Methodenaufrufe mit Berechtigungsprüfungen versehen Motivation Eine Textverarbeitung erlaubt es, Bilder im Text zu verwenden Die Ladezeit eines Dokuments soll sehr schnell sein Jedes Bild soll daher erst geladen werden, wenn es benötigt wird Anstelle eines ungeladenen Bilds soll ein Platzhalter erscheinen 09.02.11 - Folie 42

Quelle: Entwurfsmuster von Kopf bis Fuß 09.02.11 - Folie 43

Muster: Proxy Quelle: Entwurfsmuster von Kopf bis Fuß 09.02.11 - Folie 44

Muster: Proxy Quelle: Entwurfsmuster von Kopf bis Fuß 09.02.11 - Folie 45

Muster: Proxy textdokument bildproxy Grafik abbildung echtesbild Eine abstrakte Klasse oder ein Interface definiert die Schnittstelle, mit der die Clients arbeiten. public machirgendwas() public machwasanderes() Sehr lange Ladezeit Client Subjekt public machirgendwas() public machwasanderes() EchtesSubjekt echtesbild Die Clients merken gar nicht, dass sie mit einem Stellvertreter und nicht mit dem echten Objekt arbeiten. Stellvertreter public machirgendwas() public machwasanderes() Subjekt echtessubjekt 09.02.11 - Folie 46

Muster: Proxy public public interface interface Grafik Grafik {{ int int getwidth(); getwidth(); int int getheight(); getheight(); void void draw(); draw(); }} public public class class EchteGrafik EchteGrafik implements implements Grafik Grafik {{...... }} public public class class GrafikProxy GrafikProxy implements implements Grafik Grafik {{ Grafik Grafik echtegrafik; echtegrafik; public public int int getwidth() getwidth() {{ if if (this.echtegrafik (this.echtegrafik == == null) null) {{ return return 100; 100; }} else else {{ return return this.echtegrafik.getwidth(); this.echtegrafik.getwidth(); }} }} }} public public void void draw() draw() {{ if if (this.echtegrafik (this.echtegrafik == == null) null) {{ this.echtegrafik this.echtegrafik == new new EchteGrafik(); EchteGrafik(); }}...... }} 09.02.11 - Folie 47

Muster: Beobachter/Observer Zweck: Benachrichtigung, wenn sich ein Wert ändert Definition einer 1:n-Beziehung zwischen mehreren Objekten Mehrere abhängige Objekte beobachten ein anderes Objekt Ändert sich das Objekt, werden alle Beobachter benachrichtigt Beobachter können zur Laufzeit hinzugefügt oder entfernt werden Motivation: Tabellenkalkulation Abbildung: GOF-Buch 09.02.11 - Folie 48

Muster: Beobachter/Observer Subjekt public attach(observer obs) public detach(observer obs) public notifyobservers() Beobachter public update() Ein Subjekt kann beliebig viele Beobachter haben. TabellenArbeitsblatt public attach(observer obs) public detach(observer obs) public notifyobservers() Observer[] observers TabellenDarstellung public update() DiagrammDarstellung public update() Dank der abstrakten Basisklassen oder Interfaces kennen sich die Klassen für das Arbeitsblatt und die Darstellungen nicht! 09.02.11 - Folie 49

Muster: Beobachter/Observer public public interface interface Subject Subject {{ void void attach(observer attach(observer obs); obs); void void detach(observer detach(observer obs); obs); void void notifyobservers(); notifyobservers(); }} public public interface interface Observer Observer {{ void void update(); update(); }} public public class class Worksheet Worksheet implements implements Subject Subject private private ArrayList<Observer> ArrayList<Observer> observers observers new new ArrayList<Observer>(); ArrayList<Observer>(); {{ == public public void void attach(observer attach(observer obs) obs) {{ this.observers.add(obs); this.observers.add(obs); }} public public void void detach(observer detach(observer obs) obs) {{ this.observers.remove(obs); this.observers.remove(obs); }} public public void void notifyobservers() notifyobservers() {{ for for (Observer (Observer observer observer :: this.observers) this.observers) {{ observer.update(); observer.update(); }} }} }} // // Sonstige Sonstige Methoden Methoden eines eines Arbeitsblatts Arbeitsblatts 09.02.11 - Folie 50

Model-View-Controller Zweck Saubere Gliederung einer graphischen Anwendung Keine Abhängigkeiten vom Backend zur Benutzungsoberfläche Über das MVC-Muster Sehr viel älter als das Musterbuch der Viererbande Beinhaltet aber viele Muster davon (je nach Variation) 09.02.11 - Folie 51

Model-View-Controller Funktioniert wie ein Doppelkeks: Viewobjekte zeichnen die Programmoberfläche Modelobjekte erbringen die eigentliche Funktionalität Der Controller sitzt dazwischen und hält beide zusammen Mögliche Variationen: Austauschbare Controller für dieselbe View Ein Controller, der mehrere Views steuert Zusammenarbeitende oder geschachtelte Controller 09.02.11 - Folie 52

Model-View-Controller In diesem einfachen Beispiel erlauben wir der View, direkt auf das Model zuzugreifen, um den Controller so einfach wie möglich zu halten. CdPlayerController public cdplayerchanged() Der Controller beobachtet das Modelobjekt und aktualisiert das Programmfenster, wenn eine Änderung eintritt. CdPlayerWindow window CdPlayer player Ein komplexen Fällen kann es aber auch sinnvoll sein, den Zugriff auf das Model nur über den Controller zu gestatten. CdPlayerWindow CdPlayer protected onejectbuttonclicked() protected onplaybuttonclicked() protected onstopbuttonclicked() public eject() public play() public stop() public setcurrenttitle(string title) public setplaytime(string time) public addobserver(observer obs) public delobserver(observer obs) public notifyobservers() CdPlayer player 09.02.11 - Folie 53

Enthaltene Entwurfsmuster Observer / Beobachter Controller und View können Beobachter des Models sein. Mediator Wenn die View nicht direkt auf das Model zugreifen darf, ist der Controller ein Mediator, da er sämtliche Anfragen zwischen Model und View vermittelt. Kompositum In vielen Frameworks werden Controller in Teil/GanzesBeziehungen geschachtelt, wenn ein Fenster Subscreens, Tabreiter usw. enthält. Zuständigkeitskette Wenn mehrere Controller zusammenarbeiten, wird eine Anfrage vom Benutzer an alle Controller weitergeleitet, bis sie von einem bearbeitet wird. 09.02.11 - Folie 54

Webanwendungen und MVC Controller View Model HTML Front Servlet (Dispatcher) JSP Servlet Backend Beans 09.02.11 - Folie 55

Verteilte Systeme und MVC Präsentationsschicht Clientprozess Anwendungslogik greift zu auf ApplikationsServer Datenhaltungsschicht greift zu auf Datenbank nicht immer 09.02.11 - Folie 56

Interessante Links und Bücher http://c2.com/doc/oopsla87.html Einer der ersten Artikel zu Entwurfsmustern von Beck & Cunningham http://wwwswt.informatik.uni-rostock.de/deutsch/infothek/entwurfsmuster/ patterns/index.html Deutsche Beschreibung der meisten GoF-Entwurfsmuster mit Beispieldiagrammen http://www.patterndepot.com/put/8/javapatterns.htm Online verfügbares Buch über die GoF-Entwurfsmuster (Englisch) Finden Sie auch auf Moodle http://www.cs.helsinki.fi/u/salaakso/patterns/ User Interface Design Patterns Adam Bien, J2EE Patterns (2002), Addison-Wesley, ISBN: 3-8273-1903-X Nicht mehr auf der Höhe der Zeit, hilft aber das aktuelle Java EE zu verstehen Freeman & Freeman, Entwurfsmuster von Kopf bis Fuß, O'Reilly, ISBN: 3-89721-421-0 Must Read für alle Javaentwickler! 09.02.11 - Folie 57