Zustandsdiagramme

Beispiel: Stoppuhr

Funktionsbeschreibung als Text:

Nach dem Einschalten zeigt die Stoppuhr die Zeit 0 min 0 s, kurz: 00:00. Nach Drücken der Taste „s“ beginnt die Zeitmessung und die Uhr zeigt die abgelaufene Zeit an. Drückt man erneut die Taste „s“, so hält die Zeitmessung an, kann jedoch durch weiteren Druck auf „s“ fortgesetzt werden. Ein Druck auf die Taste „r“ bewirkt jederzeit, dass die Zeitmessung angehalten und die Uhr auf 00:00 zurückgesetzt wird.

Zustandsdiagramm

Umsetzung als Computerprogramm:

Wir modellieren die Uhr als Java-Klasse.

Im Attribut zustand speichern wir, in welchem Zustand sich das Programm gerade befindet (siehe grüne Zahlen im Zustandsdiagramm).

Für jede auslösende Aktion bekommt die Klasse eine Methode, deren Aufruf die Aktion auslöst.

Uhr u = new Uhr();
 
// Die Timer-Klasse führt die Methode run des Objekts u
// alle 1000 ms immer wieder aus:
Timer.repeat(u, 1000); 
 
 
public class Uhr implements Runnable {
 
   int zustand = 1;
   int sekunden = 0;
   int minuten = 0;
 
 
   public void drückeS() {
 
      if(zustand == 1) {
         zustand = 2;
         // Uhr starten
         return;
      }
 
      if(zustand == 2) {
 
         zustand = 3;
         // Zwischenstopp
         return;
 
      }
 
      if(zustand == 3) {
         zustand = 2;
         // wieder starten
         return;
      }
 
      ausgabe();
 
   }
 
   public void drückeR() {
 
      zustand = 1;
      // reset
      sekunden = 0;
      minuten = 0;
 
      ausgabe();
      return;
 
   }
 
   // Diese Methode wird alle 1000 ms immer wieder
   // von der Klasse Timer ausgeführt (siehe ganz oben!). 
   public void run() {
 
      if(zustand == 2) {
 
         sekunden++;
 
         if(sekunden == 60) {
            minuten++;
            sekunden = 0;
         }
 
      }
 
      ausgabe();
 
   }
 
   public void ausgabe() {
      System.clearScreen();
      println(minuten + " : " + sekunden);
   }
 
}

Aufgabe: Zwischenstopp-Taste

Die Stoppuhr erhält eine weitere Taste Z („Zwischenzeit“), mit der man die Anzeige anhalten kann, während die Uhr im Hintergrund weiterläuft. Erweitere sowohl das Zustandsdiagramm (mit Bleistift) als auch das Programm entsprechend!

Uhr u = new Uhr();
 
// Die Timer-Klasse führt die Methode run des Objekts u
// alle 1000 ms immer wieder aus:
Timer.repeat(u, 1000); 
 
 
public class Uhr implements Runnable {
 
   int zustand = 1;
   int sekunden = 0;
   int minuten = 0;
 
   public void drückeZ() {
 
      if(zustand == 2) {
         zustand = 4;
         return;
      }
 
      if(zustand == 4) {
         zustand = 2;
         return;
      }
 
      ausgabe();
 
   }
 
 
   public void drückeS() {
 
      if(zustand == 1) {
         zustand = 2;
         // Uhr starten
         return;
      }
 
      if(zustand == 2) {
 
         zustand = 3;
         // Zwischenstopp
         return;
 
      }
 
      if(zustand == 3) {
         zustand = 2;
         // wieder starten
         return;
      }
 
      if(zustand == 4) {
         zustand = 2;
         return;
      }
 
      ausgabe();
 
   }
 
   public void drückeR() {
 
      zustand = 1;
      // reset
      sekunden = 0;
      minuten = 0;
 
      ausgabe();
      return;
 
   }
 
   public void run() {
 
      if(zustand == 2 || zustand == 4) {
 
         sekunden++;
 
         if(sekunden == 60) {
            minuten++;
            sekunden = 0;
         }
 
      }
 
      ausgabe();
 
   }
 
   public void ausgabe() {
      if(zustand != 4) { 
         System.clearScreen();
         System.out.println(minuten + " : " + sekunden);
      }
   }
 
}
Drucken/exportieren
QR-Code
QR-Code schule:klassen:2019:10abc:zustandsdiagramme (erstellt für aktuelle Seite)