Das Model/View/Controller Paradigma

Ähnliche Dokumente
Abgabe: keine Pflichtabgabe (vor 12 Uhr) Aufgabe 10.1 (P) Vererbung Gegeben seien folgende Java-Klassen:

Theorie zu Übung 8 Implementierung in Java

Objektorientierte und Funktionale Programmierung SS 2014

Graphical User Interfaces

Einstieg in die Informatik mit Java

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

Abstrakte Klassen, Interfaces

Model-View-Controller

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

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 12. Listen. Listen 1

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

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

Informatik II Übung 06. Benjamin Hepp 5 April 2017

Textbausteine. C# WPF-Framework Model-View-Viewmodel-Architektur Blog-Client-Applikation

Programmierkurs Java

8.6 Visualisierung der Sortieralgorithmen

Sommersemester Implementierung III: GUI und Verhalten (Teil 2)

II.4.5 Generische Datentypen - 1 -

II.4.2 Abstrakte Klassen und Interfaces - 1 -

Programmieren 2 Java Überblick

Java Einführung Abstrakte Klassen und Interfaces

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

4. Objektorientierte Programmierung mit C++

Design Patterns 2. Model-View-Controller in der Praxis

Objektorientierte Programmierung

Handbuch für die Erweiterbarkeit

Das Model View Controller (MVC) Konzept

II.4.4 Exceptions - 1 -

Programmieren in Java -Eingangstest-

Graphische Benutzungsoberflächen

Programmiermethodik 3. Klausur Lösung

GUI Programmierung in Java

Einführung in die Informatik II

Der Ball kann angezeigt werden: anzeigen( ) {... } Der Ball kann z.b. seine Größe verändern: groesseaendern(int veraenderung) {... } usw.

Sommersemester Implementierung I: Struktur

Exkurs: ANONYME KLASSEN. Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm

FAKULTÄT FÜR INFORMATIK

GUI Programmierung mit JAVA Swing

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Interfaces

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

6. Objektorientiertes Design

Informatik II (D-ITET) Übungsstunde 6

Programmierkurs C++ Abstrakte Klassen und Methoden

12 Abstrakte Klassen, finale Klassen und Interfaces

Prof. Dr. Wolfgang Schramm. Vorlesung. Techniken der Programmentwicklung. Exkurs: Anonyme Klassen

Programmieren in Java

2. Vererbung und Kapselung

Ersetzbarkeit und Verhalten

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

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 7. Grafische Benutzeroberflächen

1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte)

Abschnitt 20: Ein Grundprinzip der Software-Architektur

Gran Turismo Cars - WS 11/12

4. Hierarchische Datenstrukturen in OO-Systemen

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

Naviki GPS-Anwendungsentwicklung für Mobiltelefone

Weitere Beispiele. Beispiel CD-Spieler: Exemplare eines abstrakten Konzepts. 7. Schnittstellen. Schnittstelle: Syntax

Softwaretechnologie Wintersemester 2009/2010 Dr. Günter Kniesel, Pascal Bihler

Institut für Programmierung und Reaktive Systeme. GUIs mit Swing. Markus Reschke

Grundkonzepte java.util.list

Client-Server-Beziehungen

Objektorientierte Programmierung Studiengang Medieninformatik

Klausur Grundlagen der Programmierung

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

Überblick. Überblick. Abstrakte Klassen - rein virtuelle Funktionen Beispiele

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

Probeklausur: Programmierung WS04/05

EAD II Übung 5. Graphische Benutzungsoberfläche mit BlueJ

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 7. Grafische Benutzeroberflächen 1

Kapitel 5: Interfaces

Java - Webapplikationen

Klausur Software-Entwicklung März 01

Java I Vorlesung Collections

Überschreiben von Methoden

Applets. Applets. Applets. Applet: Java-Programm Eingebettet in einer HTML-Seite Ausführung von einem Java-fähigen Web-Browser oder sog.

Model-View-ViewModel (MVVM)

Kapitel 4: Klassen und Unterklassen

Objektorientierte Software-Entwicklung

Vererbung. Generalisierung und Spezialisierung Vererbung und Polymorphismus

Transkript:

Model/View/Controller Das Model/View/Controller Paradigma Christian Knauer Trennung von Daten, Ansicht und Funktion ermöglicht z.b. mehrere Ansichten desselben Datensatzes wird meist als Model-Delegate realisiert Daten Model View Ansicht Controller Funktionalität 1 2 Model/View/Controller Model/View/Controller Probleme: Die Konsistenz der verschiedenenansichten muss gewährleistet sein Mehrereverschiedene Ansichten des gleichen Models müssenaktualisiert werden es müssenklar getrennteverantwortlichkeiten für die Darstellung (look), Interaktion (feel), etc. festgelegt werden 3 4 Model Vollständige, gekapselte Darstellung des Objektes/der Daten, das/die von der Anwendung bearbeitet wird/werden (z.b. ein Spreadsheet) Stellt gewisse Dienstleistungen (services) zur Verfügung, um die Daten zu manipulieren (z.b. Neuberechnung, Abspeichern) Verantwortlich für die Durchführung von Berechnungen View Zeigt eine spezielle Ansicht des Model-Objektes/der Model-Daten (z.b. Balkendiagramm) Verantwortlich für die Präsentation 5 6 1

Controller Model/View/Controller Schema Reagiert auf Benutzereingaben und verwendet Informationen aus dem View um das Model-Objekt/die Model-Daten zu modifizieren Verantwortlich für die Interaktion 7 8 Trennung der Bestandteile Views müssen erzeugt oder geändert werden können, ohne das Model zu beeinflussen Das Model kennt keine Details über mögliche Views bzw. Controller oder die Möglichkeiten mit denen es interaktiv verändert werden kann Model/View/Controller in Swing Üblicherweise werden Views und Controller in Swing mit Hilfe von Components und Listenern implementiert Sowohl die Views, als auch die Controller sinddamitvom Swing API abhängig Man sollte unbedingt das Model und die Services die es zur Verfügung stellt so implementieren, dass es vomswing API unabhängig ist (das Model fungiert als eine Art Virtuelle Maschine oder Kernel der Anwendung) 9 10 Beispiel M/V/C: 2D Zeichenprogramm Model: Beschreibung der Zeichnung Liste der gezeichneten Elemente Typ (Punkt, Strecke, Polygon, ) Position in der Zeichnung Attribute (Farbe, Füllmuster, ) Undo Informationen, etc View: (Graphische) Darstellung der Zeichnung Liste der Darstellugen der Elemente der Zeichnung Typ, globale Attribute Position in der Zeichnung lokale Attribute (Highlighting, ausblenden, ) verschiedene Darstellungen: textuell, graphisch Controller: Manipulation der Zeichnung oft gekoppelt mit einem View (Interaktion) Modellierung der Zeichnung { private HashMap elementmodels; die Klasse DrawingModel stellt ein Modell der Zeichnung dar elementmodelsenthält die Elemente der Zeichnung 11 12 2

Modellierung der Elemente in der Zeichnung Modellierung der Elemente in der Zeichnung abstract public class ElementModel { private Integer id; private Position position; private ElementModelAttributes attributes; public class CircleModel extends ElementModel { private double radius; die (abstrakte) Klasse ElementModel modelliert die Elemente der Zeichnung jedes Element hat eine eindeutige id das Modell eines Elements speichert seine positionin der Zeichnung sowie zusätzliche attributes (z.b. Farbe, Füllmuster, etc.) konkrete Elemente der Zeichnung (z.b. Kreise) werden durch Klassen dargestellt, die ElementModel erweitern diese Klassen speichern Informationen über die Geometrie der jeweiligen Elemente (z.b. Radius eines Kreises) 13 14 Darstellung der Zeichnung Eigenschaften einer Darstellung public class DrawingView extends JComponent { private HashMap elementviews; private ViewAttributes viewattributes; public class ViewAttributes { private Position origin; private double zoom; die Klasse DrawingModel stellt eine Ansicht der Zeichnung dar elementviews enthält die Ansichten der Elemente der Zeichnung jede Ansicht hat eigene viewattributes ViewAttributes geben z.b. an, mit welchem Vergrösserungsfaktordie Zeichnung dargestellt werden soll 15 16 Darstellung der Elemente in der Zeichnung Zeichnen der Elemente in der Zeichnung abstract public class ElementView { private Integer id; private Position position; public void paint(graphics g, ViewAttributes v); die (abstrakte) Klasse ElementView modelliert die Ansicht der Elemente der Zeichnung jedes Ansicht eines Elements hat eine eindeutige id, die mit der id des dargestellten Elements übereinstimmt die Ansicht eines Modells eines Elements speichert seine position in der Zeichnung die Ansicht eines Elements kann mittels paint (abstrakt) gezeichnet werden public class CircleView extends ElementView { private double radius; public void paint (Graphics g, ViewAttributes v) { Darstellungen von konkrete Elemente der Zeichnung (z.b. Kreise) werden durch Klassen dargestellt, die ViewModel erweitern diese Klassen speichern Informationen über die Geometrie der jeweiligen Elemente (z.b. Radius eines Kreises) sie implementieren die paint Methode 17 18 3

Kommunikation Model/View: Listener Kommunikation Model/View: Announcer public interface public void elementmodelchanged(elementmodelchangedevent e); public class DrawingView extends JComponent implements die verschiedenen Darstellungen der Zeichnung werden durch Aufruf ihrer Methode elementmodelchanged() von Modifikationen des Modells der Zeichnung benachrichtigt public interface DrawingModelChangeAnnouncer { public void adddrawingmodelchangelistener( DrawingModelChangeListener l); public void removedrawingmodelchangelistener( DrawingModelChangeListener l); public void announceelementmodelchanged( ElementModelChangedEvent e); dazu müssen sie sich bei dem Modell registrieren, das sie über Modifikationen benachrichtigen soll das Interface DrawingModelChangeAnnouncer definiert die entsprechende Schnittstelle 19 20 Kommunikation Model/View: Announcer Kommunikation Model/View: Ereignisse implements DrawingModelChangeAnnouncer { public class ElementModelChangedEvent { private Integer eventid; private Integer changedmodelid; private Position newposition; die Klasse DrawingModel implementiert dieses Interface beim Aufruf der Methode elementmodelchanged()einer Darstellung der Zeichnung wird ein ElementModelChangedEventübergeben dieser beinhaltet Informationen über die Art der Modifikation (löschen, hinzufügen oder ändern eines Elements), über das modifizierte Element, sowie weitere Angaben über die entsprechende Aktion (z.b. die neue Position des Objektes) 21 22 Implementierung Kommunikation Modell View Implementierung Kommunikation Model View ^ public void adddrawingmodelchangelistener( listeners.add(l); public void removedrawingmodelchangelistener( listeners.remove(l); 23 public void announceelementmodelchanged( ElementModelChangedEvent e) { for (Iterator iter = listeners.iterator(); iter.hasnext();) { DrawingModelChangeListener listener = (DrawingModelChangeListener) iter.next(); listener.elementmodelchanged(e); 24 4

Implementierung Kommunikation Model View Implementierung Kommunikation Model View public class DrawingView extends JComponent implements // Eine View verarbeitet Nachrichten von dem Modell public void elementmodelchanged(elementmodelchangedevent e) { updateview(e); repaint(); public class DrawingView { private HashMap elementviews; public void updateview(elementmodelchangedevent e) { ElementView ev = e.getelementview(); if (e.geteventid() == REMOVE) { elementviews.remove(ev.getid()); else { elementviews.put(ev.getid(),ev); 25 26 Zeichnen des Views Zeichnen der Elemente in der Zeichnung public class DrawingView extends JComponent { private Vector elementviews; private ViewAttributes viewattributes; public void paint(graphics g) { synchronized(elementviews) { for (Iterator It = elementviews().iterator(); It.hasNext();) { ElementView elementview = (ElementView) It.next(); elementview.paint(g, viewattributes); public class CircleView extends ElementView { private double radius; public void paint (Graphics g, ViewAttributes vattr) { Position vieworigin = vattr.getorigin(); double viewzoom = vattr.getzoom(); Position localpos = transform (position, vieworigin, viewzoom); double localradius = radius * viewzoom; g.setcolor(attributes.getcolor()); g.filloval(localpos.getx(), localpol.gety(), localradius, localradius); 27 28 Modifikation der Zeichnung Kommunikation Model/Controller: Announcer public class DrawingController { private HashMap elementcontrollers; public class DrawingController implements DrawingModelChangeAnnouncer { 29 30 5

Darstellung der Elemente in der Steuerung Kommunikation Model/Controller: Listener public class ElementController { private Integer id; private Position position; private ElementControllerAttributes attributes; 31 32 Implementierung Kommunikation Modell Controller Implementierung Kommunikation Model Controller public class DrawingController implements DrawingModelChangeAnnouncer { public class DrawingController implements DrawingModelChangeAnnouncer { public void adddrawingmodelchangelistener( listeners.add(l); public void removedrawingmodelchangelistener( listeners.remove(l); public void announceelementmodelchanged( ElementModelChangedEvent e) { for (Iterator iter = listeners.iterator(); iter.hasnext();) { DrawingModelChangeListener listener = (DrawingModelChangeListener) iter.next(); listener.elementmodelchanged(e); 33 34 Implementierung Kommunikation Model Controller Implementierung Kommunikation Model Controller public void updatemodel(elementmodel em) { // Das Modell verarbeitet Nachrichten von einem Controller public void elementmodelchange (ElementModelChangedEvent e) { updatemodel(e); announceelementmodelchanged(e); { private HashMap elementmodels; public void updatemodel(elementmodelchangedevent e) { ElementModel em = e.getelementmodel(); if (e.geteventid() == REMOVE) { elementmodels.remove(em.getid()); else { elementmodels.put(em.getid(),em); 35 36 6

Implementierung Kommunikation Model Controller public class DrawingController extends JComponent implements MouseListener, DrawingModelChangeAnouncer { public void mousepressed(mouseevent me) { Position pos = new Position (me.getx(), me.gety()); ElementController ec = new ElementController(pos,); ElementModelChangedEvent e = new ElementModelChangedEvent(ec); announceelementmodelchanged(e) 37 7