Programmierpraktikum eXtreme Programming 2005 Thema: Pattern II : “Anpassbare Kommunikation“ Morad Harrach SS 05 PP_XP
Gliederung 1.MVC (Model View Controller) - Pattern 2.Observer (Beobachter) – Pattern 3.Command (Befehls) – Pattern 4.Mediator (Vermittler) – Pattern 5.Chain of Responsibility (Zuständigkeitskette)-Pattern Morad Harrach SS 05 PP_XP
1.MVC – Pattern Struktur Das Model-View-Controller-Muster (MVC) unterteilt eine interaktive Anwendung in drei Komponenten - Model: enthält die dauerhaften Daten einer Anwendung. Verwaltet Daten unabhängig von der Präsentation - View: die Darstellungsschicht präsentiert die Daten. Beinhaltet die visuellen Elemente (Fenster, Buttons, HTML, etc.). - Control: die Steuerungsschicht realisiert die eigentliche Arbeit. Sie steuert den Ablauf, ändert Modelldaten, entscheidet, welche View aufgerufen wird. Morad Harrach SS 05 PP_XP
1.MVC-Pattern Probleme bei der Anwendung des Musters: - Dieselbe Information wird in unterschiedlichsten Fenstern auf verschiedene Weise dargestellt, z.B. Balken- oder Kuchendiagramme. - Grafische Darstellung und Verhalten der Anwendung müssen Datenänderungen sofort widerspiegeln. - Unterstützung verschied. Standards für Erscheinungs- bild und Bedienmerkmale, ohne das dabei der funktionale Kern geändert werden muss. - Änderungen an der Benutzeroberfläche auch zur Laufzeit. Morad Harrach SS 05 PP_XP
1.MVC-Pattern Abbildung Quelle: http://java.sun.com/blueprints/patterns/MVC-detailed.html Morad Harrach SS 05 PP_XP
1.MVC-Pattern Interaktion Wenn ein Anwender das Model mit Hilfe der Steuerungs-komponente einer Ansicht ändert, sollten alle Views des Models diese Änderung anzeigen. Model benachrichtigt seine Views, sobald sich Daten ändern. Views entnehmen die neuen Daten und passen die an-gezeigte Information an. Morad Harrach SS 05 PP_XP
1.MVC-Pattern Anwendung Verwendung: zur Entwicklung Benutzeroberflächen für interaktive Anwendungen, z.B. Smalltalk-80-Umgebung Erstellung von Windows-Anwendungen in der Entwicklungs-umgebung von Visual C++ Vorteile: - mehrere Views desselben Modells. - austauschbare Views - Potential für Frameworks Nacheile: - größere Komplexität - ineffizienter Datenzugriff innerhalb der Views - etc. Morad Harrach SS 05 PP_XP
2.Observer-Pattern Zweck: Definiere eine 1-zu-n Abhängigkeit zwischen Objekten, so dass die Änderung des Zustandes eines Objektes zu einer Aktualisierung aller abhängigen Objekte führt. Problem: Das unabhängige Objekt soll die abhängigen Objekte bzgl. Veränderungen benachrichtigen, ohne Annahmen zu treffen, wer und wie viele dies sind (lose gekoppelt). Lösung: Ein oder mehrere Objekte („Observer“) möchten bei der Veränderung eines Objekts („Subject“) eine Methode ausführen, die auf den veränderten Zustand zugreifen kann. Die „Observer“ registrieren sich beim „Subject“. Morad Harrach SS 05 PP_XP
1.Observer-Pattern Abbildung Model-Objekt und drei View-Objekte Quelle: Design Patterns, Elements of Reusable Object Oriented Software Morad Harrach SS 05 PP_XP
2.Observer-Pattern Anwendung - Abstraktion mit zwei voneinander abhängigen Aspekten - wenn ein Aspekt von dem anderen abhängt - Kapselung der Aspekte in unterschiedlichen Objekten - unabhängig widerverwendbar - Kaskadierende Änderung - wenn die Änderung eines Objekts die Änderung anderer Objekte verlangt. - Ungewißheit über Anzahl der Objekte die geändert werden müssen. - Benachrichtigung unbekannter Objekte - ohne Annahmen über die zu benachrichtigenden Objekte - Vermeidung von eng gekoppelten Objekten. Morad Harrach SS 05 PP_XP
2.Observer-Pattern Struktur Quelle: Design Patterns, Elements of Reusable Object Oriented Software Morad Harrach SS 05 PP_XP
2.Observer-Pattern Struktur Subject - kennt seine Observer Observer - definiert update()- Schnittstelle ConcreteObserver - verwaltet Referenz auf das Subjekt - speichert Zustand der mit dem Subjekt zusammen passen soll. - implementiert update() um Zustand mit dem des Subjekts konsistent zu halten. Morad Harrach SS 05 PP_XP
2.Observer-Pattern Interaktion Beobachter werden durch Konkretes Subjekt benachrichtigt sobald sich der Zustand (Subjekt) ändert. Mit Hilfe von Anfragen an das Subjekt wird der jeweilige Zustand ermittelt. Subject: - Zustand ändert sich - benachrichtigt alle Konkreten Beobachter Concrete Observer: - befragt Subjekt nach Informationen - verwendet Informationen um seinen Zustand mit dem des Subjekts abzugleichen - update() Morad Harrach SS 05 PP_XP
3.Mediator-Pattern Zweck: Problem: Erzeuge ein Objekt, welches das Zusammenspiel einer Menge von Objekten in sich kapselt. Vermittler erreichen, das das Zusammenspiel der Objekte von ihnen unabhängig zu variieren. Problem: Viele Verbindungen zwischen Objekten Schwierigkeit das Verhalten des Systems auf bedeutsame Weise zu ändern, da Verhalten über so viele Objekte verstreut ist => viele Unterklassen. Unterschiedliche Dialogboxen besitzen unterschiedliche Abhängigkeiten. Morad Harrach SS 05 PP_XP
3.Mediator-Pattern Lösung: Separates Vermittlerobjekt kapseln. Vermittler ist für Kontrolle und Koordination der Interaktion innerhalb einer Gruppe von Objekten zuständig. Objekte kennen Vermittler und reduzieren dadurch Anzahl ihrer Verbindungen. Vermittler verhindert das Objekte Bezug zueinander nehmen. Morad Harrach SS 05 PP_XP
3.Mediator-Pattern Anwendung Eine Menge von Objekten vorliegt, die in komplexer Weiser miteinander zusammenarbeiten. Die Wiederverwendung eines Objektes schwierig ist, da es mit vielen anderen Objekten zusammenarbeitet. Ein auf mehrere Klassen verteiltes Verhalten angepaßt werden soll, ohne viele Unterklassen bilden zu müssen. Morad Harrach SS 05 PP_XP
3.Mediator-Pattern Struktur Quelle: Design Patterns, Elements of Reusable Object Oriented Software Morad Harrach SS 05 PP_XP
3.Mediator-Pattern Struktur Mediator (Vermittler): - Schnittstelle für die Interaktion mit KollegenObjekten. ConcreteMediator: - implementiert Gesamtverhalten durch Koordination der Kollegen- Objekte. Colleague – classes : - jede Kollegen-Klasse kennt ihre Mediator-Klasse. - jedes Kollegen-Objekt arbeitet mit Vermittler zusammen, statt mit Kollegen-Objekten. Morad Harrach SS 05 PP_XP
3.Mediator-Pattern Interaktion Interaktion - Kollegenobjekte senden und empfangen Anfragen von einem Vermittlerobjekt. - Der Vermittler implementiert das Gesamtverhalten durch das Weiterleiten der Anfragen zwischen den richtigen Kollegenobjekten. Morad Harrach SS 05 PP_XP
3.Mediator-Pattern Beispiel Motivation Programm mit verschiedenen Buttons, zwei Listboxes und einem Text Entry Field. Funktion des Programms - wähle einen Namen aus der ListBox aus, Name wird in das Text Entry Field kopiert, Copy-Button enabled. - bei Klick auf Copy, wird der Name in die rechte box kopiert, Clear enabled. - bei Klick auf Clear-Button, wird rechte box und text Entry Field gelöscht. Morad Harrach SS 05 PP_XP
3.Mediator-Pattern Beispiel Morad Harrach SS 05 PP_XP
3.Mediator-Pattern Beispiel Interaktionen anschaulich: Lösung: mit Mediator-Pattern: Morad Harrach SS 05 PP_XP
3.Mediator-Pattern Beispiel Mediator vereinfacht das System, ist einzige Klasse über alle anderen. Alle anderen Klassen werden als Kollegen bezeichnet. Jeder Kollege informiert den Mediator über neue Aktion. Mediator wird über alle Vorgänge informiert, die stattfinden. Morad Harrach SS 05 PP_XP
3.Mediator-Pattern Beispiel 1.Schritt: Erstelle Instanz vom Mediator und setzte diese in jede Klasse ein Mediator med = new Mediator(); kidList = new KidList( med); tx = new KTextField(med); Move = new MoveButton(this, med); Clear = new ClearButton(this, med); med.init(); 2.Schritt: Copy- und Clear-Button mit dem Mediator initialisieren Beispiel: für Copy-Button, Clear-Button analog Morad Harrach SS 05 PP_XP
3.Mediator-Pattern Beispiel public class CopyButton extends JButton implements Command { Mediator med; //copy of the Mediator public CopyButton(ActionListener fr, Mediator md) super("Copy"); //create the button addActionListener(fr); //add its listener med = md; //copy in Mediator instance med.registerMove(this); //register with the Mediator } public void Execute() { //execute the copy med.Copy(); Morad Harrach SS 05 PP_XP
3.Mediator-Pattern Beispiel 3.Schritt : Erstellen eine Klasse ListSelectionListener, erreichen über ein Klick jedes List Item bis zum Mediator dieser Klasse. Morad Harrach SS 05 PP_XP
3.Mediator-Pattern Beispiel public class KidList extends JawtList implements ListSelectionListener } KidData kdata; //reads the data from the file Mediator med; //copy of the mediator public KidList(Mediator md) { super(20); //create the JList kdata = new KidData ("50free.txt"); fillKidList(); //fill the list with names med = md; //save the mediator med.registerKidList(this); addListSelectionListener(this); public void valueChanged(ListSelectionEvent ls) { //if an item was selected pass on to mediator JList obj = (JList)ls.getSource(); if (obj.getSelectedIndex() >= 0) med.select(); } //---------------------------------- private void fillKidList() Enumeration ekid = kdata.elements(); while (ekid.hasMoreElements()) { Kid k =(Kid)ekid.nextElement(); add(k.getFrname()+" "+k.getLname()); Morad Harrach SS 05 PP_XP
3.Mediator-Pattern Beispiel Beispiel: für Text Field: public class KTextField extends JTextField { Mediator med; public KTextField(Mediator md) { super(10); med = md; med.registerText(this); } Morad Harrach SS 05 PP_XP
3.Mediator-Pattern Beispiel Mediator Klasse unterstützt Copy, Clear und ausgewählte Registermethoden für jeden Befehl. Beispiel : Mediator Klasse mit der Methode Copy public class Mediator { private ClearButton clearButton; private CopyButton copyButton; private KTextField ktext; private KidList klist; private PickedKidsList picked; public void Copy() { picked.add(ktext.getText()); //copy text clearButton.setEnabled(true); //enable Clear } Morad Harrach SS 05 PP_XP
3.Mediator-Beispiel Control Tower am Flughafen ist zentrale Punkt zur Kommunikation zwischen den Flugzeugen. Erlaubnisse zur Landung nur durch Conrol Tower. Mit der zentralen Kommunikation und Verwaltung der Erlaubnisse, stellt der Control Tower den Mediator dar. Morad Harrach SS 05 PP_XP
4.Command-Pattern Zweck - Befehle zu kapseln, die innerhalb eines Entwurfs transportiert werden müssen, in Objekte mit gleicher Schnittstelle. - Bietet Möglichkeit Befehle rückgängig zu machen, Operationen können in eine Queue gestellt werden. Problem - Verschiedene Benutzer wollen mit einer Anwendung auf verschiedene Art und Weise arbeiten. - Zusätzliche Dienste wie undo sollen für alle Operationen implementiert werden Morad Harrach SS 05 PP_XP
4.Command-Pattern Anwendung Objekte mit einer auszuführenden Aktion zu parametrieren, und zu einem späteren Zeitpunkt wieder aufzurufen (Callback Funktion). Anfragen zu unterschiedlichen Zeitpunkten zu spezi-fizieren, aufreihen und ausführen wollen. Operationen rückgängig zu machen (undo) oder wieder herzustellen (redo). Protokollieren von Änderungen, Bsp. im Falle eines Absturz des Systems (Logbuch). Komplexe Operationen zu strukturieren. Morad Harrach SS 05 PP_XP
4.Command-Pattern Struktur Quelle: Design Patterns, Elements of Reusable Object Oriented Software Morad Harrach SS 05 PP_XP
4.Command-Pattern Struktur Command: - definiert eine Schnittstelle zum Ausführen von Operationen. ConcreteCommand: - implementiert die Anbindung eines Empfängers an eine Aktion. Adressee: - weiß, wie die an die Ausführung einer Anfrage gebundenen Operationen auszuführen sind. Jede Klasse kann Empfänger sein. Invoker: - fordert Befehlsobjekt auf, Anfrage auszuführen. Client: - erzeugt ConcreteCommand Objekt und übergibt es dem Empfänger. Morad Harrach SS 05 PP_XP
4.Command-Pattern Interaktion Der Client erzeugt Befehlsobjekt einer konkreten Befehlsklasse und bestimmt ihren Empfänger. Invoker speichert das Befehlsobjekt der konkreten Klasse. Invoker löst Anfrage über execute()-Operation aus. Wenn Befehle rückgängig gemacht werden können, speichert das Befehlsobjekt vor Ausführen des Befehls den Zustand des Empfängers, um später wiederherstellen zu können. Das konkrete Befehlsobjekt ruft Operationen auf seinem Empfängerobjekt auf und setzt die Anfrage um. Morad Harrach SS 05 PP_XP
4.Command-Pattern Beispiel Motivation Erstellen eines einfachen Java UI, mit Menu Items, Buttons etc. , erlauben dem User Anweisungen an das Programm zu geben. Programm besteht aus den Menu Items: -File, Open and File, Exit und einem Button, der durch Klick den Hintergrund rot darstellt. Morad Harrach SS 05 PP_XP
4.Command-Pattern Beispiel Bei Beispiel mit wenig Menu Items and Buttons, funktioniert das gut. Problem: bei vielen Menu Items und Buttons => uneleganter Code. Lösung: Jedem Objekt seine Befehle direkt empfangen zu lassen Morad Harrach SS 05 PP_XP
4.Command-Beispiel Morad Harrach SS 05 PP_XP
5.Chain of Responsibility Zweck: Entkopplung von Sender und Empfänger einer Nachricht. Problem: Jenes Objekt das die Hilfsinformation bereit- stellt, jenem Objekt nicht bekannt ist, das die Hilfsanfrage anstößt. Lösung: Mehrere Objekte erhalten Möglichkeit eine Anfrage zu bearbeiten. Nachricht wird entlang einer Kette weitergegeben, bis sie bearbeitet wird. Morad Harrach SS 05 PP_XP
5.Chain of Responsibility Anwendung Mehrere Objekte eine Anfrage bearbeiten, welches Objekt ist nicht bekannt. Eine Anfrage an eines von mehreren Objekten zu senden, ohne den Empfänger anzugeben. Die Menge der Objekte, welche eine Anfrage bearbeiten sollen, dynamisch festgelegt wird. Morad Harrach SS 05 PP_XP
5.Chain of Responsibility Struktur Quelle: Design Patterns, Elements of Reusable Object Oriented Software Morad Harrach SS 05 PP_XP
5.Chain of Responsibility Struktur Client: - löst Anfrage bei einem ConcreteHandler – Objekt in der Kette aus. ConcreteHandler: - arbeitet Anfrage ab. - kann auf seinen Nachfolger zugreifen. - Möglichkeit zum bearbeiten der Anfrage, andernfalls wird Anfrage an Nachfolgeobjekt weitergereicht. Handler: - definiert Schnittstelle zur Bearbeitung von Schnittstellen. - beinhaltet Verbindung zum Nachfolgeobjekt. Morad Harrach SS 05 PP_XP
5.Chain of Responsibility Vorteile Reduzierte Kopplung - Sender muß Empfänger nicht kennen - lediglich Referenz auf das Nachfolgeobjekt Flexibilität - Kettenstruktur ist dynamisch erweiterbar und änderbar Keine Abarbeitungsgarantie - da kein impliziter Empfänger - Anfragen können verloren gehen Morad Harrach SS 05 PP_XP
5.Chain of Responsibility-Beispiel bn Ein Bankautomat verwendet einen einzigen Slot für alle Münzen. Wenn eine Münze eingeworfen wird entscheidet eine Kette, welches Rohr das richtige ist für jede Münze. Wenn ein Rohr eine Münze nicht an- nimmt, wird es solange weiterge- leitet bis ein Rohr die Münze an- nimmt. Morad Harrach SS 05 PP_XP
Literatur Entwurfsmuster, Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides. Addison-Wesley 1996 Patternorientierte Softwarearchitektur, Frank Buschmann, Regine Meunier, Hans Rohnert, Peter Sommerland, Michael Stal. Addison-Wesley 1998 Vorlesung SS 2002 Design Patterns The Design Patterns, James W.Cooper, Addison-Wesley 1998 http://java.sun.com/blueprints/patterns Morad Harrach SS 05 PP_XP