OOP Material Grundlagen dynamische Attribute und Methoden Slots Module Ueberladen Vererbung UML Callback MVC Beispiele
Pfad: Startseite / Fächer / Informatik / Python / OOP / MVC
Autor: mk
23.10.2010 17:47:05
3349
MVC

"M is for Model, V is for View, C is for Controller and together this framework works better for you."

MVC Film Video auf youtube www.railsenvy.com, mvc_song.mp3, mvc1.txt, mvc2.txt, mvc4.txt

MVC-Song

Das MVC-Muster sollte besser ein MVC-Muster heißen, da es verschiedene Interpretationen gibt. Eine Ausprägung beschreibt James Dempsey in seinem MVC-Song, der in youtube zu finden ist. Folgende Links sind eine Hilfe bei der Übersetzung.

Theodor Rau, MSS11, Abitur 2012 hat eine schöne Übersetzung erstellt.

Einführendes Beispiel

Es soll ein Programm geschrieben werden, das mit Hilfe einer grafischen Benutzungsoberfläche die mehrmalige Berechnung des ggTs ermöglicht. Die GUI könnte etwa folgendermaßen aussehen:

ggt-GUI

MVC-Schema

Ein Programm mit grafischer Oberfläche soll so konzipiert sein, dass es arbeitsteilig im Team entwickelt werden kann und ein hohes Maß an Wiederverwertbarkeit besitzt. Eine strikte Trennung des Fachkonzepts (Model) von der grafischen Präsentation (View) erfüllt diese Vorgaben. Im Idealfall wissen Model und View nichts voneinander. Die notwendigen Verbindungen werden nur von einem drittem Bestandteil, dem Controller, ausgeführt. Der Controller braucht dazu eine präzise Beschreibung der Schnittstellen von Model und View.

MVC-Schema

Definition

Die Menge aller öffentlichen Signaturen einer Klasse gehört zur Schnittstelle der Klasse. Zusätzlich enthält eine Schnittstelle semantische Festlegungen. Diese werden oft informell in Kommentaren oder durch selbsterklärende Methodennamen geliefert.

Grob gesagt: Eine Schnittstelle einer Klasse enthält alles, was ein Nutzer über die Klasse wissen muss.

Klassendiagramm

Im folgenden Diagramm werden zur Vereinfachung nur die Schnittstellen dargestellt.

Klassendiagramm ggt1.class.violet

Quelltext

einfache Realisierung ggt1.py, ggt2.py

Zweites Beispiel: Das Ziegenproblem

Problemstellung

Planung des Programms

View

Es muss eine Eingabemöglichkeit für die Türnummer (eTuer) geben und einen Button bWaehlen, der die Eingabe auslöst. Die Anzahl der Spiele und der gewonnenen Spiele und eventuell weitere Meldungen sollen angezeigt (lMeldung) werden.

Die View-Klasse kann weitgehend vom ggT-Beispiel übernommen werden (Copy&Paste-Warnung?).

Ziege 1 ziege1.py

Model

Aufgaben

Ist in ziege2.py der Controller 'skinny' genug?

Teste Model aus ziege2.py, indem du auf der Shell 1000 Spiele mit der Wechseltaktik durchführst. Was ist zu erwarten?

Man kann ungestört mit den Klassen aus ziege2.py hantieren, wenn man die Erzeugung des Controllers auskommentiert.

Ziegentest

Man sieht, dass man mit Model ohne den 'Ballast' View viele Experimente in kurzer Zeit durchführen kann. Ein weiterer Vorteil der MVC-Architektur.

Aufgabe

Schreibe basierend auf das chuck-a-luck-model eine MVC-Realisierung des Spiels mit einer - einfachen - grafischen Oberfläche.

cal0.py, cal1.py

Aufgabe

'Spukschloss' - Dr. Bernd Kokavecz, museum0.py, museum1.py

Links

mvc1.txt, mvc4.txt