Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


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

1 MVC

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

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

4 Zuständigkeiten:

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

6 View: stellt die Daten des Models dar

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

8 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: entwurfsmuster/wieder-einmal-mvc html entwurfsmuster/wieder-einmal-mvc html

9 Controller ViewModel 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

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

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

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

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

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

15 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

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

17 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?

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

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

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

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

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

23 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:

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

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

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

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

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

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

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

31 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

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

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


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

Ähnliche Präsentationen


Google-Anzeigen