MVC. MVC (engl: Model-View- Controller, deutsch: Modell- Präsentation-Steuerung) ist ein...

33
MVC

Transcript of MVC. MVC (engl: Model-View- Controller, deutsch: Modell- Präsentation-Steuerung) ist ein...

Page 1: MVC. MVC (engl: Model-View- Controller, deutsch: Modell- Präsentation-Steuerung) ist ein Entwurfsmuster zur Strukturierung von Software, das eine spätere.

MVC

Page 2: MVC. MVC (engl: Model-View- Controller, deutsch: Modell- Präsentation-Steuerung) ist ein Entwurfsmuster zur Strukturierung von Software, das eine spätere.

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.

Page 3: MVC. MVC (engl: Model-View- Controller, deutsch: Modell- Präsentation-Steuerung) ist ein Entwurfsmuster zur Strukturierung von Software, das eine spätere.

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.

Page 4: MVC. MVC (engl: Model-View- Controller, deutsch: Modell- Präsentation-Steuerung) ist ein Entwurfsmuster zur Strukturierung von Software, das eine spätere.

Zuständigkeiten:

Page 5: MVC. MVC (engl: Model-View- Controller, deutsch: Modell- Präsentation-Steuerung) ist ein Entwurfsmuster zur Strukturierung von Software, das eine spätere.

Model:Enthält die darzustellenden Daten und die zugehörigen Methoden.

Model ist von View und Controller unabhängig.

Page 6: MVC. MVC (engl: Model-View- Controller, deutsch: Modell- Präsentation-Steuerung) ist ein Entwurfsmuster zur Strukturierung von Software, das eine spätere.

View:stellt die Daten des Models dar

Page 7: MVC. MVC (engl: Model-View- Controller, deutsch: Modell- Präsentation-Steuerung) ist ein Entwurfsmuster zur Strukturierung von Software, das eine spätere.

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.

Page 9: MVC. MVC (engl: Model-View- Controller, deutsch: Modell- Präsentation-Steuerung) ist ein Entwurfsmuster zur Strukturierung von Software, das eine spätere.

Controller

View Model

Schwarze, durchgezogene Linien bedeuten Assoziationen,rote, gestrichelte Linien bedeuten Events (Ereignisse).

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.

Ereignis

Ereignis

Page 10: MVC. MVC (engl: Model-View- Controller, deutsch: Modell- Präsentation-Steuerung) ist ein Entwurfsmuster zur Strukturierung von Software, das eine spätere.

Controller

View Model

Schwarze, durchgezogene Linien bedeuten Assoziationen,rote, gestrichelte Linien bedeuten Events (Ereignisse).

Tastatur / Maus

E

VA

E(ingabe) V(erarbeitung) A(usgabe)

Page 11: MVC. MVC (engl: Model-View- Controller, deutsch: Modell- Präsentation-Steuerung) ist ein Entwurfsmuster zur Strukturierung von Software, das eine spätere.

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

Page 12: MVC. MVC (engl: Model-View- Controller, deutsch: Modell- Präsentation-Steuerung) ist ein Entwurfsmuster zur Strukturierung von Software, das eine spätere.

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, …

Page 13: MVC. MVC (engl: Model-View- Controller, deutsch: Modell- Präsentation-Steuerung) ist ein Entwurfsmuster zur Strukturierung von Software, das eine spätere.

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

Page 14: MVC. MVC (engl: Model-View- Controller, deutsch: Modell- Präsentation-Steuerung) ist ein Entwurfsmuster zur Strukturierung von Software, das eine spätere.

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)

Page 15: MVC. MVC (engl: Model-View- Controller, deutsch: Modell- Präsentation-Steuerung) ist ein Entwurfsmuster zur Strukturierung von Software, das eine spätere.

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

Page 16: MVC. MVC (engl: Model-View- Controller, deutsch: Modell- Präsentation-Steuerung) ist ein Entwurfsmuster zur Strukturierung von Software, das eine spätere.

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.

Page 17: MVC. MVC (engl: Model-View- Controller, deutsch: Modell- Präsentation-Steuerung) ist ein Entwurfsmuster zur Strukturierung von Software, das eine spätere.

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?

Page 18: MVC. MVC (engl: Model-View- Controller, deutsch: Modell- Präsentation-Steuerung) ist ein Entwurfsmuster zur Strukturierung von Software, das eine spätere.

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).

Page 19: MVC. MVC (engl: Model-View- Controller, deutsch: Modell- Präsentation-Steuerung) ist ein Entwurfsmuster zur Strukturierung von Software, das eine spätere.

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

Page 20: MVC. MVC (engl: Model-View- Controller, deutsch: Modell- Präsentation-Steuerung) ist ein Entwurfsmuster zur Strukturierung von Software, das eine spätere.

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.*;

Page 21: MVC. MVC (engl: Model-View- Controller, deutsch: Modell- Präsentation-Steuerung) ist ein Entwurfsmuster zur Strukturierung von Software, das eine spätere.

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); }}

Page 22: MVC. MVC (engl: Model-View- Controller, deutsch: Modell- Präsentation-Steuerung) ist ein Entwurfsmuster zur Strukturierung von Software, das eine spätere.

class TRModel extends Observable { private double speicherwert;

public TRModel() { speicherwert=0; } public double getSpeicherwert(){ return speicherwert; }

Page 23: MVC. MVC (engl: Model-View- Controller, deutsch: Modell- Präsentation-Steuerung) ist ein Entwurfsmuster zur Strukturierung von Software, das eine spätere.

public void setSpeicherwert(double wert){ speicherwert=wert; // Dem Model das Feuern ermöglichen setChanged(); notifyObservers(); }

public void addiereDazu(double wert) { speicherwert=speicherwert+wert; // Dem Model das Feuern ermöglichen setChanged(); notifyObservers(); } 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:

Page 24: MVC. MVC (engl: Model-View- Controller, deutsch: Modell- Präsentation-Steuerung) ist ein Entwurfsmuster zur Strukturierung von Software, das eine spätere.

public void setSpeicherwert(double wert){ speicherwert=wert; // Dem Model das Feuern ermöglichen setChanged(); notifyObservers(); }

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

Page 25: MVC. MVC (engl: Model-View- Controller, deutsch: Modell- Präsentation-Steuerung) ist ein Entwurfsmuster zur Strukturierung von Software, das eine spätere.

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.

Page 26: MVC. MVC (engl: Model-View- Controller, deutsch: Modell- Präsentation-Steuerung) ist ein Entwurfsmuster zur Strukturierung von Software, das eine spätere.

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; }

Page 27: MVC. MVC (engl: Model-View- Controller, deutsch: Modell- Präsentation-Steuerung) ist ein Entwurfsmuster zur Strukturierung von Software, das eine spätere.

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);

Page 28: MVC. MVC (engl: Model-View- Controller, deutsch: Modell- Präsentation-Steuerung) ist ein Entwurfsmuster zur Strukturierung von Software, das eine spätere.

// 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); }

Page 29: MVC. MVC (engl: Model-View- Controller, deutsch: Modell- Präsentation-Steuerung) ist ein Entwurfsmuster zur Strukturierung von Software, das eine spätere.

public void WanzeAnbringen(TRController 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())); } }}

Page 30: MVC. MVC (engl: Model-View- Controller, deutsch: Modell- Präsentation-Steuerung) ist ein Entwurfsmuster zur Strukturierung von Software, das eine spätere.

class TRController implements ActionListener{ private TRView trView; private TRModel trModel;

public TRController() { }

public TRView getTRView() { return trView; }

public TRView getTrView() { return trView; }

public void setTrView(TRView trView) { this.trView = trView; }

Page 31: MVC. MVC (engl: Model-View- Controller, deutsch: Modell- Präsentation-Steuerung) ist ein Entwurfsmuster zur Strukturierung von Software, das eine spätere.

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

Page 32: MVC. MVC (engl: Model-View- Controller, deutsch: Modell- Präsentation-Steuerung) ist ein Entwurfsmuster zur Strukturierung von Software, das eine spätere.

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=")){ double wert = Double.valueOf(trView.getJTextField()); trModel.addiereDazu(wert); } }}

Page 33: MVC. MVC (engl: Model-View- Controller, deutsch: Modell- Präsentation-Steuerung) ist ein Entwurfsmuster zur Strukturierung von Software, das eine spätere.

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