Einführung Inhaltsverzeichnis 2. Darstellung von Variablen und Werten

4. Uhr mit MVC

Beim Entwurf der MVC-Struktur müssen wir die Aufgaben auf die drei Klassen verteilen:

Model verwaltet die aktuelle Zeit, die Taktfrequenz und die Information, ob die Uhr gerade läuft oder steht. View (für die digitale Darstellung) enthält die Anzeige der Zeit (auf einem JLabel)  sowie die drei Knöpfe Ein, Aus und Um. Control verwaltet die Ereignisse: das Ticken einmal pro Sekunde sowie die Lauscher (listener) für die Knopfdrücke.

Beim Entwurf der Schnittstellen müssen wir überlegen, wer braucht was von wem (und wann), um seine Arbeit erledigen zu können.

Model braucht nichts, es ist autonom. View braucht nach jeder Veränderung die aktuelle Zeit sowie die Taktfrequenz von Model. Control muss Model nach dem Tick benachrichtigen können, sowie darüber, ob die Uhr angehalten oder gestartet wurde. Control muss am Anfang die Lauscher für die Knöpfe an View übergeben, sie immer nach der Veränderung der Zeit (nach einem Tick) benachrichtigen (damit sie die Anzeige aktualisiert), sowie über Knopfdrücke, damit sie die Knöpfe sperrt (disable) bzw. erlaubt (enable).

Uhr mit MVC

Wenn wir diese Import-Anforderungen invertieren, bekommen wir folgende Exports:

Model exportiert die aktuelle Uhrzeit und die Frequenz an View, empfängt das Ticken sowie die drei Tastendrücke von Control. Die ersten beiden verändern den Zustand von Model nicht, sie liefern nur Information; daher heißen sie Informatoren und werden in Java als Funktionen ("getter", mit einem Präfix get im Namen) programmiert. Das Empfangen von Ereignissen kann den Zustand von Model verändern; daher heißen sie Mutatoren und werden typischerweise als Prozeduren (void-Methoden) programmiert.

View empfängt von Control die Nachricht, wann sie die Zeitanzeige aktualisieren (tick()) sowie die Knopfe zu verbieten bzw. erlauben (bei start() und stopp()) soll. Diese sind alle Mutatoren:

public interface IModel { // IModel.java

   static class Uhrzeit { … } // wie oben im KreisUhr

   void tick();

   void start();

   void stopp();

   void umschalten();

   Uhrzeit getUhrzeit();

   long getFrequenz(); }

public interface IView { // IView.java

   void start();

   void stopp();

   void tick(); }

Wie oben erläutert, braucht Control keine Schnittstelle.

Gemeinsames Control für alle Views

Einführung Inhaltsverzeichnis 2. Darstellung von Variablen und Werten


Version: 19. April 2012

© Prof. Solymosi, 20102 Beuth-Hochschule für Technik Berlin, Fachbereich VI (Informatik und Medien)

solymosibht-berlin.de