Aus Das deutschsprachige Scratch-Wiki
Model View Controller ist ein Muster zur Unterteilung einer Software in separate Komponenten namens Datenmodell (engl. model), Präsentation (engl. view) und Programmsteuerung (engl. controller).
Sinn dahinter ist die Programmlogik von der Darstellung und dem Eingabemodell zu trennen, sodass das Programm leicht angepasst und auf andere Architekturen portiert werden kann.
Ein Model View Controller-Ansatz in Scratch erfordert einiges an Mehrarbeit, dafür ist das Programm dann aber leichter auf andere Architekturen portierbar.
Datenmodell und Präsentation
Normalerweise sind in Scratch die Darstellung und das Datenmodell miteinander verwoben. So wird zum Beispiel die Position einer Figur normalerweise in
(x-Position
und
(y-Position)
gespeichert.
Das ist aber gleichzeitig der Speicher für die tatsächliche Position der Figur. Dies ist zumeist kein Problem. wenn aber eine Figur am Rand bewegt wird, kann es sein dass
ändere x um (10)
die Variable
(x-Position
nicht verändert (abhängig davon ob die Figur schon im Rand ist). Werden Datenmodell und Präsentation hingegen getrennt, wäre die Position der Figur im Datenmodell eine Variable
(xpos)
und der Befehl
ändere [xpos v] um (10)
würde die Variable immer verändern. Erst wenn die Figur dann auf die entsprechende Position gesetzt wird,
setze x auf (xpos)
werden Aspekte wie der Bühnenrand berücksichtigt.
Dazu müssten Informationen zu Hindernissen ebenfalls in separaten Daten gespeichert werden. Das ist insgesamt mühsam, erlaub aber das Umsetzen einen Scratch-Spiels auf einer anderen Plattform.
Programmsteuerung
Auch bei der Trennung der Programmsteuerung ist etwas Mehrarbeit nötig. So sollten Blöcke zur Eingabe nicht mehr direkt mit der Programmlogik vermischt werden.
Beispiel zur Umsetzung eines Model View Controller-Ansatzes
Wir nehmen als Ausgangsprogramm die klassische Steuerung einer Figur:
Wenn Taste [beliebiges v] gedrückt wird falls <Taste (Pfeil nach oben v) gedrückt>, dann ändere y um (5) ende falls <Taste (Pfeil nach unten v) gedrückt>, dann ändere y um (-5) ende falls <Taste (Pfeil nach rechts v) gedrückt>, dann ändere x um (5) ende falls <Taste (Pfeil nach links v) gedrückt>, dann ändere x um (-5) ende
wie folgt umzuschreiben:
Datenmodell
Wenn ich [update v] empfange falls <(nach oben)=(1)>, dann ändere [ypos v] um (5) ende falls <(nach unten)=(1)>, dann ändere [ypos v] um (-5) ende falls <(nach rechts)=(1)>, dann ändere [xpos v] um (5) ende falls <(nach links)=(1)>, dann ändere [xpos v] um (-5) ende
Präsentation
Wenn ich [draw v] empfange setze x auf (xpos) setze y auf (ypos) ende
Programmsteuerung
Wenn ich [control v] empfange setze [nach oben v] auf (0) setze [nach unten v] auf (0) setze [nach links v] auf (0) setze [nach rechts v] auf (0) falls <Taste (Pfeil nach oben v) gedrückt>, dann setze [nach oben v] auf (1) ende falls <Taste (Pfeil nach unten v) gedrückt>, dann setze [nach unten v] auf (1) ende falls <Taste (Pfeil nach rechts v) gedrückt>, dann setze [nach links v] auf (1) ende falls <Taste (Pfeil nach links v) gedrückt>, dann setze [nach rechts v] auf (1) ende ende
Die Zusammensetzung aller drei Teile ist recht einfach:
wiederhole fortlaufend sende (control v) an alle und warte sende (update v) an alle und warte sende (draw v) an alle und warte ende
Vorteile des Model View Controller-Ansatzes
Der große Vorteil ist dass eine Änderung der Eingabemethode (zum Beispiel andere Tasten oder Steuerung durch Maus) nur den Teil Programmsteuerung betrifft. Gleiches gilt bei der Änderung der Präsentation. Außerdem können größere Projekte so leicht in die einzelnen Teile aufgeteilt und von verschiedenen Scratcherinnen und Scratchern bearbeitet werden.