i

Den Timer im Codepad benutzen

Spielregeln

Die Spielregeln von Snap sind schnell erklärt: Zwei Spieler spielen gegeneinander und sollen nach einer zufälligen Zeit möglichst schnell einen Gegenstand, z.B. ein Bonbon schnappen. Das Startsignal wird akustisch und visuell von einem Timer gegeben. Die minimale und maximale Zeit, die der Timer wartet, können angegeben werden.

Benutzung des Timers

Um den Timer zu starten, nutzen wir ein sehr praktisches Feature in BlueJ, die Direkteingabe (in der englischen Version Codepad genannt). Dort kann man einzelne Befehle eingeben, um schnell und einfach einzelne Anweisungen auszuführen. Standardmäßig ist die Direkteingabe nicht aktiviert. Du kannst sie im Menü unter "Ansicht→Direkteingabe" bzw. "View→Show Codepad" oder durch Klick auf den Pfeil unten rechts öffnen.

Codepad öffnen

Aufgabe 1

Öffne das Projekt Snap (Entpacken nicht vergessen!), betrachte kurz den Quelltext der Klasse Timer und gib folgende Anweisungen in die Direkteingabe ein:

Codepad

Beschreibe genau welche Wirkung jede einzelne Zeile hat (Fachbegriffe!) (Hilfe: Falls Du Schwierigkeiten hast zu verstehen, was in den ersten beiden Zeilen passiert, dann ersetze gedanklich Timer durch int und new Timer durch 42.)

Spiele das Spiel!

Aufgabe 2

Teste das Verhalten des Timers, wenn Du den Minimalwert nun auf 20 Sekunden setzt oder wenn sowohl Minimal- als auch Maximalwert auf -5 Sekunden gesetzt werden.

Aufgabe 3

Das Problem, dass man unsinnige Werte für die Attribute festlegen kann, soll von folgender Methode gelöst werden:

void setGrenzen(int minimal, int maximal) {
    if(minimal >= 0 && minimal <= maximal) {
        min = minimal;
        max = maximal;
    }
}

Auch wenn Du noch keine if-Anweisungen kennen gelernt hast, wirst Du die Funktionsweise bestimmt verstehen. Beschreibe die Funktionsweise der Methode. Ergänze die Methode in der Klasse Timer und teste das Verhalten in der Direkteingabe. Warum ist das Problem trotzdem nicht gelöst?

Attribute schützen

Durch die Einführung der set-Methode kann man das erwünschte Verhalten erreichen, z.B. dass negative Werte ignoriert werden. Aber trotzdem hat man die Möglichkeit den oben dargestellen Code im Codepad oder einem Programm auszuführen. Man müsste also die Attribute min und max vor unerwünschtem Zugriff schützen. Dies erreicht man in Java, indem man den Zugriffsmodifikator private voranstellt. Der Konstruktor soll von außerhalb der Klasse ausführbar sein, weshalb er mit public als öffentlich zugreifbar markiert wird. Sonst könnte man kein Timer-Objekt erzeugen. Das Starten des Timers soll ebenfalls außerhalb der Klasse möglich sein. Man erreicht dies durch:

class Timer
{
    private int min;
    private int max;

    public Timer() {
	...
    }

    public void starten() {
	...
    }
}

Der Zugriffsmodifikator public bewirkt für uns hier keine Veränderung. Diese wirkt sich nur aus, wenn man an größeren Projekten arbeitet. (Genauer: Wenn der eigene Code in Paketen organisiert wird, was wir allerdings nicht machen werden. Siehe z.B. die offiziellen Java-Tutorials)

Aufgabe 4 - Privater Zugriff

Probiere das selbst einmal aus, indem Du den direkten Zugriff auf das Attribut verbietest und dann im Codepad den Zugriff darauf dennoch versuchst.

Aufgabe 5 - Private Attribute abfragen

Wenn man die Attribute min und max als private deklariert, können sie außerhalb der Klasse auch nicht mehr gelesen werden. Um dies zu ermöglichen, benötigt man eine Methode, die den Wert zurückgibt. Üblicherweise beginnt der Name dieser Methode mit get und endet mit dem Namen des Attributs, z.B. getMin() oder getMax().

Erweitere die Klasse Timer um eine Methode int getMin(), die den Wert von min zurückgibt und eine entsprechende Methode für das Maximum.

Suche

v
7.1.1.3.1
inf-schule.de/oop/java/klassen/kapselung/timertesten
inf-schule.de/7.1.1.3.1
inf-schule.de/@/page/4fLOhrfPpH7Kezmq

Rückmeldung geben