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