MVC.

Slides:



Advertisements
Ähnliche Präsentationen
programmiert April-Juni 2003 von Knut Riechmann
Advertisements

Objektorientierte Programmierung
Ein Beispiel in Java.
6.3 Ereignisbasierte Systeme Ereignis (event) : eine Ereignis-Quelle (event source, publisher) generiert Benachrichtigung (event notification), an der.
Praktikum Systementwicklung
Java: Programmierung grafischer Oberflächen
Java: Programmierung grafischer Oberflächen
Java: Dynamische Datentypen
Einführung in die Programmierung von 3D-Grafiken Basis ist Java3D
Einfache Komponenten in SWING
AUFGABE 1: Ein Wagen (dargestellt durch ein Rechteck) soll sich von links nach rechts bewegen. Tipp: Timer benutzen AUFGABE 2: Zusätzlich zu Aufgabe.
Abstrakte Klassen.
IF-ELSE-IF-Ketten Weiter mit PP..
Grafische Benutzeroberfläche
Wie überwacht man Objekte im "Alltag" ?. Indem man "Wanzen" an diese anbringt.
Ein Beispiel in Java.
Klassenvariable. Da man für jede Kuh bzw. jede Henne auf dem Markt den gleichen Preis für ein Liter Milch, bzw. den gleichen Preis für ein Ei bekommt,
Konstruktoren.
Objekte werden als Adressen (Referenzen) übergeben. Dies führt manchmal zu unerwarteten Ergebnissen...
Assoziationen (Beziehungen). Zwischen Objekten kann es eine Beziehung geben.
Polymorphie (Vielgestaltigkeit)
Objekte und Arbeitsspeicher
Interface bzw. Schnittstelle anschaulich: Hüllenklasse
Benötigte Applets Startseite: in HTML-Format Applet auf der Startseite Das Applet, das auf der Startseite geladen wird, wird die vier Buttons und die eine.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 6 Model-View-Controler als Grundlage für Nutzerschnittstellen Sommersemester 2003 Lars Bernard.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 7 User Interfaces in Java Sommersemester 2003 Lars Bernard.
Institut für Kartographie und Geoinformation Prof.-Dr. Lutz Plümer, Dr. Gerhard Gröger, Dipl.-Ing. Dirk Dörschlag Einführung in die Programmierung mit.
Programmieren mit JAVA
DVG1 - Applets1 Applets. DVG1 - Applets2 Die Klasse Applet n Applets sind Grafikobjekte, die unter Steuerung eines anderen Programms (z.B. eines Browsers,
1DVG3 - anonyme Klassen Anonyme Klassen. DVG3 - anonyme Klassen 2 Syntax new BasisKlasse(Parameterliste) { Modifikationen und Erweiterungen der Basisklasse.
DVG Einführung in Java1 Einführung in JAVA.
SWING DVG Swing.
DVG Klassen und Objekte
SWING DVG Swing.
03 - Paint Das Zeichenprogramm EMMA Paint2 Aufgabenstellung Entwicklung eines ausschließlich in JAVA programmierten Graphikprogrammes. Vergleichsprodukte:
04 - Actions Actions Actions 2 Motivation In verschiedenen Swing-Komponenten werden ausgelöste Aktionen durch ActionListener behandelt. Häufig werden.
© 2002 Dr. Cavelius - Ley - Pohlig - Taulien Step by step zum JFrame 1 Zum JFrame Step by step by step by step by step by step by step by step by.
© 2005 Pohlig GK Informatik K Zum JFrame Step by step by step by step by step by step by step by step by.
© 2006 MPohlig Grundkurs Informatik mit Java 1 JFrame-Vorlage Step by step by step by step by step by step by step by step by.
© 2004 Pohlig - Taulien Swing Ereignissteuerung. © 2004 Pohlig - Taulien GK Informatik mit Java 2 Auf Button-Klick reagieren.
© 2005 Pohlig – Taulien: Die Matheamatik-GUI als Applet Come Together 1 April 2005 Was ist ein Applet Ein Applet ist ein Javaprogramm, das die VM benutzt,
Hänchen & Partner GmbH 1 Web-Anwendungen mit dem Jakarta Struts Framework 3.Juli 2003 Martin Burkhardt.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Sommersemester 2004 Jan Drewnak Entwicklung und Einsatz von Geosoftware I Praktikum Sitzung 6 Sitzung 6: Model-View-Controller als Grundlage.
Sommersemester 2004 Jan Drewnak Entwicklung und Einsatz von Geosoftware I Praktikum Sitzung 7 Sitzung 7: User Interfaces in Java.
Objektorientierte Modellierung
Universität zu Lübeck Institut für Informationssysteme Die Präsentationsschicht - mit Swing.
Erste Schritte mit Eclipse Neues Projekt erstellen (1)
AWT und JFC Abstract Windowing Toolkit
Applets Java für’s Web.
Java: Programmierung grafischer Oberflächen
Einführung / Geschichte Einführung / Geschichte Motivation Motivation Beispiel Beispiel Architektur / Komponenten Architektur / Komponenten Konfiguration.
CuP - Java Elfte Vorlesung Montag, 11. November 2002.
Mahmoud Zoabi Khaled Isa
Informatik – Programmierpraktikum Alexander Volodarski Gruppe 14
Aufgaben Version 1: Es soll eine Wetterstation mit folgenden zwei Anzeigen implementiert werden: Aktuelle Wetterbedingungen mit Temperatur und.
Lind 02/2005 Einführung in JAVA. Lind 02/2005 Beispiel: Mittelwert Es soll ein Programm erstellt werden, das den Mittelwert zweier reeller Zahlen berechnet.
Programmiervorkurs WS 2014/15 Methoden
© 2005 Pohlig Informatik Jg. 11 mfH Michael Pohlig 1 Zum JFrame Step by step by step by step by step by step by step by step by.
Java-Kurs Übung Benutzeroberflächen und Graphik Frames (Fenster)
Institut für Kartographie und Geoinformation Prof. Dr. L. Plümer, Dipl.-Ing. D. Dörschlag, Dr. G. Gröger Einführung in die Programmierung mit Java 13.
Funktionen. Aufgabe : Eingabe zweier Zahlen ---> Minimum bestimmen Dann nochmals Eingabe zweier Zahlen ---> Minimum bestimmen.
GUI Programmierung in Java Branimir Djordjevic. GUI - Wichtige Begriffe -  Die Swing-Bibliothek in Java stellt zum Beispiel die folgenden Windows zur.
Java Programme nur ein bisschen objektorientiert.
Grafische Benutzeroberflächen mit Swing (2) Christoph Broschinski, Alexander Sczyrba Jan Krüger
Vererbung in Java. public abstract class Form { protected int breite; protected int hoehe; protected String farbe; /** * Erzeuge eine Form der Breite.
Wie überwacht man Objekte im "Alltag" ?
Konstruktoren.
Es gibt Klassen, die mit der Entwicklungsumgebung ausgeliefert werden
Informatik Softwareentwicklung – 4.3 Entwurfsmuster
 Präsentation transkript:

MVC

MVC (engl: Model-View-Controller, deutsch: Modell-Präsentation-Steuerung) ist ein Entwurfsmuster zur Strukturierung von Software, das eine spätere Änderung erleichtert und eine Wiederverwendbarkeit der einzelnen Komponenten ermöglicht.

Wenn z.B. die Daten in der Klasse View anders dargestellt werden sollen, muß nur die Klasse View, aber nicht die Klasse Controller und die Klasse Model geändert (angepaßt) werden.

Zuständigkeiten:

Model: Enthält die darzustellenden Daten und die zugehörigen Methoden. Model ist von View und Controller unabhängig.

View: stellt die Daten des Models dar

Controller: nimmt die Anwendereingaben (z. B Controller: nimmt die Anwendereingaben (z.B. Mausklick auf Button "+") entgegen und verändert dementsprechend die Daten (Summenbildung) des Modells (mit Hilfe der Methoden des Models). Im Controller steckt die Logik der Reaktion auf die Eingabe.

WICHTIG: die Aufteilung der Aufgaben von M, V und C sind nicht 100% eindeutig geregelt und deshalb etwas "interpretierbar". Das gibt Anlaß zu Diskussionen. Siehe Internet-Diskussionen, wie z.B: http://www.flashforum.de/forum/softwarearchitektur-und-entwurfsmuster/wieder-einmal-mvc-222602.html

Controller Ereignis View Model Ereignis damit das Ereignis eingefangen werden kann, muß aus dem Cotroller eine Wanze gemacht werden. damit das Ereignis eingefangen werden kann, muß aus der View eine Wanze gemacht werden. Schwarze, durchgezogene Linien bedeuten Assoziationen, rote, gestrichelte Linien bedeuten Events (Ereignisse).

E A V E(ingabe) V(erarbeitung) A(usgabe) Tastatur / Maus Controller View Model A V Schwarze, durchgezogene Linien bedeuten Assoziationen, rote, gestrichelte Linien bedeuten Events (Ereignisse).

Bevor es hier weiter abstrakt zugeht, soll MVC an einem Beispiel erklärt werden:

AUFGABE: Erstellen Sie einen Taschenrechner, der genau ein Textfeld hat und der nur addieren kann. Er soll genau die 2 Buttons = und + haben. Implementieren Sie u.a. die Klassen Controller, …

View, Model, wobei in Model die mathematischen Berechnungen, in View die GUI und im Controller die Steuerung gemacht werden. Hier das UML ...

TRController - trView : TRView - trModel : TRModel TRView - trModel : TRModel TRModel - speicherwert : double schwarzer Pfeil: Assoziation roter, gestrichelter geschwungener Pfeil: zeigt vom Ereignis (fire) zur Wanze (Lauscher)

TRController - trView : TRView - trModel : TRModel TRView - trModel : TRModel TRModel - speicherwert : double Anwender feuert (z.B. durch Eingabe) in der View. Einfangende Methode (der Wanze) im Controller verändert Daten im Model Model feuert (weil Daten im Model geändert wurden). Einfangende Methode (der Wanze) in der View veranlaßt Bildschirmausgabe.

TRController - trView : TRView - trModel : TRModel TRView - trModel : TRModel TRModel - speicherwert : double Durch das Klicken eines Buttons (= oder +) in der View wird "gefeuert". Dadurch werden in der einfangenden Methode des Controllers die Daten (das Attribut "speicherwert") in Empfang genommen und ins Modell weitergleitet (und dort verarbeitet). Diese Änderung veranlaßt das Model zu feuern. Dadurch wird in der einfangenden Methode der View die Daten (das Attribut "speicherwert") des Models ausgelesen und auf dem Bildschirm ausgegeben.

TRController - trView : TRView - trModel : TRModel TRView - trModel : TRModel TRModel - speicherwert : double Wie siehe eine Kette der Informationsverarbeitung aus , d.h: Wer feuert, welche Wanzen treten dann in Aktion und auf welche Daten greifen diese dann zu?

TRController - trView : TRView - trModel : TRModel TRView - trModel : TRModel TRModel - speicherwert : double Button wird betätigt --> Feuer Einfangende Methode des Controllers verändert die Daten ("speicherwert") des Model, also ... --> Feuer Einfangende Methode der View greift auf die Daten ("speicherwert") des Model zu (für Bildschirmausgabe).

Implementieren Sie - soweit dies mit Ihrem bisherigen Wissen möglich ist - M, V und C des obigen Taschenrechners.

package taschenrechnermvc15; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Observable; import java.util.Observer; import javax.swing.*;

public class StartklasseTaschenrechnerMVC15 { public static void main(String[] args) { TRController trController = new TRController(); TRView trView = new TRView(); TRModel trModel = new TRModel(); // Verlinken von M, V und C trController.setTrModel(trModel); trController.setTrView(trView); trView.setTrModel(trModel); // "Prozeße" starten trModel.WanzeAnbringen(trView); trView.WanzeAnbringen(trController); }

class TRModel extends Observable { private double speicherwert; public TRModel() { speicherwert=0; } public double getSpeicherwert(){ return speicherwert;

public void setSpeicherwert(double wert){ speicherwert=wert; // Dem Model das Feuern ermöglichen setChanged(); notifyObservers(); } public void addiereDazu(double wert) { speicherwert=speicherwert+wert; public void WanzeAnbringen(TRView trView) { this.addObserver(trView); Falls eine andere View an das Model angebracht werden soll, müsste diese Methode geändert werden, d,h. die Klasse Model müsste geändert werden. Um dies zu vermeiden, wäre z.B. folgendes sinnvoll:

public void setSpeicherwert(double wert){ speicherwert=wert; // Dem Model das Feuern ermöglichen setChanged(); notifyObservers(); } public void addiereDazu(double wert) { speicherwert=speicherwert+wert; public void WanzeAnbringen(Observer obs) { this.addObserver(obs);

Bemerkung: Der Typ TRView sollte weder für Attribute noch für lokale Variablen oder Parameter in der Model-Klasse auftauchen. Hintergrund ist der, dass das Model theoretisch ohne Vorhandensein irgendwelcher View-Klassen compiliert werden können soll.

class TRView extends JFrame implements Observer { private TRModel trModel; private JButton buttonPlus; private JButton buttonGleich; private JTextField tfdZahl; public TRView(){ buttonsAnbringen(); } public TRModel getTrModel() { return trModel; public void setTrModel(TRModel trModel) { this.trModel = trModel;

public String getJTextField() { return tfdZahl.getText(); } public void setJTextField(String str) { this.tfdZahl.setText(str); public void buttonsAnbringen() { buttonPlus = new JButton("+"); buttonGleich = new JButton("="); tfdZahl = new JTextField("hier Zahl eingeben", 30);

// Beim Anklicken dieses Buttons wird ein Ereignis- // objekt geworfen, das durch den String "btn+" // identifiziert wird. buttonPlus.setActionCommand("btn+"); // siehe oben... buttonGleich.setActionCommand("btn="); getContentPane().add(buttonPlus, BorderLayout.EAST); getContentPane().add(buttonGleich, BorderLayout.WEST); getContentPane().add(tfdZahl, BorderLayout.CENTER); this.setSize(200, 100); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); }

public void WanzeAnbringen(TRController buttonPlus.addActionListener(tRController); buttonGleich.addActionListener(tRController); } // wird automatisch aufgerufen (ereigniseinfangende // Methode), wenn in TRModel ein Ereignisobjekt // geworfen wird. public void update(Observable m, Object o) { if (m == trModel) { setJTextField(String.valueOf (trModel.getSpeicherwert()));

class TRController implements ActionListener{ private TRView trView; private TRModel trModel; public TRController() { } public TRView getTRView() { return trView; public TRView getTrView() { public void setTrView(TRView trView) { this.trView = trView;

public TRModel getTrModel() { return trModel; } public void setTrModel(TRModel trModel) { this.trModel = trModel; // wird automatisch aufgerufen // (ereigniseinfangende Methode), // wenn in TRView ein Ereignisobjekt geworfen // wird (Button angeklickt). // siehe nächste Folie

public void actionPerformed(ActionEvent ae){ String str; str=ae.getActionCommand(); // Ereignis wird identifiziert if(str.equals("btn+")){ double wert = Double.valueOf(trView.getJTextField()); trModel.setSpeicherwert(wert); } if(str.equals("btn=")){ trModel.addiereDazu(wert);

AUFGABE: Ergänzen Sie den Taschenrechner um die Funktionen eines handelsüblichen Taschenrechners.