PNS Wahlpflichtfach Informatik Projekt: Uhrzeit Seite 1 1 Modellierung einer Uhr Aufgabe: Es soll ein Modell für eine Digitaluhr erstellt werden, die Stunden und Minuten im Format hh:mm repräsentiert. Ziel: Wir wollen die Uhrzeit sowohl grafisch als auch in einem Textfenster ausgeben können. Dazu muss das Modell unserer Uhr strikt von der Anzeige getrennt werden. Dazu modellieren wir zunächst eine Uhr, die uns nur die nötigen Methoden, die eine Uhr besitzen sollte, zur Verfügung stellt. Diese können wir bereits in der Bluej-Umgebung testen. In einem zweiten Schritt implementieren wir dann eine grafische und Text-basierte Anzeige. Beide dienen im Wesentlichen nur der Anzeige eines (Zeit-)Textes. 1. Schritt: abstrakte Modellierung einer Uhr Wir kümmern uns zunächst überhaupt nicht um eine Anzeige der Uhrzeit. Uns interessiert nur, was eine Uhr eigentlich können müsste. Da eine automatische Zeitsynchronisation aufwendig ist, wollen wir (zunächst) die Zeit jeweils manuell takten. Ein Takt soll die Uhrzeit um eine Minute vorstellen. Woraus besteht eine Digitaluhr? Was ist für unsere Implementierung wichtig? Gibt es dabei Dinge (Objekte), die gleich oder ähnlich funktionieren ( man muss das Rad nicht zweimal erfinden )? Welchen Wertebereich habt die Stunden-/Minutenanzeige? Was wollen wir mit der Uhr machen (welche Methoden benötigen wir?) Welche Konsequenzen ergeben sich aus diesen Fragen für unsere Uhr? 2. Schritt: Implementierung unterschiedlicher konkreter Uhren Sobald wir ein abstraktes Uhrenmodell besitzen, können wir die Uhrzeit auf unterschiedliche Art ausgeben. Wir beschränken uns auf eine einfache Textausgabe in einem Textfenster und eine grafische Ausgabe auf der uns bekannten Leinwand. Man könnte später die Uhrzeit auch über das Internet auf einer html-seite oder einem Handy ausgeben lassen.
PNS Wahlpflichtfach Informatik Projekt: Uhrzeit Seite 2 1.1 Modell einer abstrakten Uhr Eine Uhr besitzt je zwei Ziffern für die Stunden- und Minutenanzeige. Beide Anzeigen (Stunden, Minuten) funktionieren ähnlich, arbeiten aber mit unterschiedlichen Wertebereichen. Sinnvollerweise implementiert man zunächst eine Klasse NummernAnzeige, die eine zweistellige Zahl von 0 bis zu einer maximalen Zahl limit darstellt. Mit Blick auf die Uhr soll diese Klasse eine Methode erhoehe erhalten, die beim Erreichen des Limits wieder bei 0 beginnt. 1.1.1 Die Klasse NummernAnzeige Damit ergibt sich das Gerippe einer Klasse Nummernanzeige : public class NummernAnzeige { private int wert; private int limit; // Konstruktor mit Standardwert 0 und dem maximalen Wert max public Nummernanzeige(int max) {... // ------- Methoden ------- // Setzt den Wert der Anzeige auf einen neuen Wert public void setzewert(int neu) {... // Gibt den Wert der Anzeige als Zahl public int gibwert() {... // Gibt den Wert der Anzeige als String (ggf. mit führender Null) public String gibanzeige() {... // Erhöht den Wert um 1. Falls wert = limit ist, wird wert=0 gesetzt public void erhoehe() {... Wie muss der Aufruf für eine Stunden- bzw. Minutenanzeige aussehen? Implementiere diese Klasse und teste deine Methoden. Lade dir hierzu das Projekt Uhr.zip unter pns-berlin.de herunter und erstelle in diesem Projekt die Klasse Nummernanzeige. Die in diesem Projekt vorhandenen Klassen brauchst Du für dieses Beispiel noch nicht.
PNS Wahlpflichtfach Informatik Projekt: Uhrzeit Seite 3 1.1.2 Die Klasse Uhr Nun können wir uns an die Implementierung der Uhr machen. Wir wissen bereits, dass die Uhr aus zwei Attributen der Klasse Nummernanzeige besteht, die wir nun nur noch mit einigen Methoden versehen müssen. public class Uhr { private NummernAnzeige stunde; private NummernAnzeige minute; // Konstruktor mit Standarduhrzeit,,00:00 public Uhr() {... // ------- Methoden ------- // Liefert die aktuelle Uhrzeit im Format,,hh:mm public String gibuhrzeit() {... // Gibt den Wert der Stunde bzw. Minute als Zahl public int gibstunde() {... public int gibminute() {... // Setzt die Stunde bzw. Minute auf einen neuen Wert public void setzestunde() {... public void setzeminute() {... // Die Uhr wird (manuell) um eine Minute vorgestellt. public void taktsignalgeben() {... Implementiere diese Klasse und teste deine Methoden. Ergänze die Klasse Uhr um einen zweiten Konstruktor, der das Setzen einer Anfangsuhrzeit erlaubt. Dazu sollen die Stunden und Minuten als Zahl mit angegeben werden.
PNS Wahlpflichtfach Informatik Projekt: Uhrzeit Seite 4 1.2 Anzeigen der Uhrzeit Endlich kommen wir nun zur Anzeige der Uhrzeit. Wir beschäftigen uns zunächst mit einer einfachen Ausgabe der Uhrzeit in einem Textfenster. Dabei erfolgt jede Ausgabe in einer neuen Zeile. Die Uhrzeit scrollt also nach unten. Das ist nicht schön, aber dafür einfach :-); Hierzu erstellen wir die Klasse TextUhr, die eine Uhr als Attribut besitzt. Für die Anzeige benötigen wir eine Methode zeigeuhrzeit, die die aktuellen Zeit ausgibt. Hierzu kennt Java den Befehl System.out.println(). Innerhalb der runden Klammern wird angegeben, was geschrieben werden soll. Dabei kann es sich um eine Aufzählung von Strings, Zahlen usw. handeln, die mit einem Plus-Zeichen verbunden werden. Beispiele: int alter = 16; System.out.println("Hello world"); System.out.println("Hello" + "world"); System.out.println("Otto ist "+alter+" Jahre alt"); // Hello world // Hello world // Otto ist 16 Jahre alt Damit ergibt sich folgendes Gerüst für die Klasse TextUhr. Für die Simulation wird eine Methode warte benötigt, die im Quelltext vollständig angegeben ist. Sie erwartet eine Zeitangabe in Millisekunden. public class TextUhr { // Attribut private Uhr uhr; // Konstruktor mit Standarduhrzeit "00:00" public TextUhr() {... // gibt die aktuelle Uhrzeit in einem Textfenster aus. public void zeigeuhrzeit() {... // stellt die Uhr um eine Minute vor und gibt die neue Uhrzeit aus public void taktsignalgeben() {... // Die Uhr wird 100 mal um eine Minute vorgestellt. // Dabei wird jedes mal für einen kurzen Moment gewartet (ca. 50 ms) public void simulation() {... // Einen Moment (in Millisekunden) warten public void warte(int millisekunden) { try { Thread.sleep(millisekunden); catch (Exception e) { // Exception ignorieren Implementiere die Klasse TextUhr und teste sie. Ergänze die Klasse um einen Konstruktor zur Angabe der Startuhrzeit.
PNS Wahlpflichtfach Informatik Projekt: Uhrzeit Seite 5 1.3 Grafische Anzeigen der Uhrzeit Zum Schluss kommen wir zu einer grafischen Anzeige der Uhrzeit. Damit wir Text auf der Leinwand ausgeben können, benötigen wir eine (komplexe) Klasse Text, die ähnlich wie Kreis, Quadrat usw. benutzt wird. Diese Klasse benötigt neben einem Attribut uhr weitere Attribute für die grafische Anzeige: ausgabe... Typ Text zur Textausgabe kreis1, kreis2... Kreise zur Erzeugung eines Ringes Die übrigen Methoden entsprechen den Methoden der Klasse TextUhr, müssen aber hier natürlich an die Grafikausgabe angepasst werden. public class GrafikUhr { // Attribut private Uhr uhr; private Kreis kreis1; private Kreis kreis2; private Text ausgabe; // Konstruktor mit Standarduhrzeit "00:00" // Es wird eine Uhr mit einem schwarzen Ring und // roten Ziffern im Innern erstellt. public GrafikUhr() {... // gibt die aktuelle Uhrzeit in einem Textfenster aus. public void zeigeuhrzeit() {... // stellt die Uhr um eine Minute vor und gibt die neue Uhrzeit aus public void taktsignalgeben() {... // Die Uhr wird 100 mal um eine Minute vorgestellt. // Dabei wird jedes mal für einen kurzen Moment gewartet (ca. 50 ms) public void simulation() {... // Einen Moment (in Millisekunden) warten public void warte(int millisekunden) { try { Thread.sleep(millisekunden); catch (Exception e) { // Exception ignorieren Implementiere die Klasse GrafikUhr und teste sie. Ergänze die Klasse um einen Konstruktor zur Angabe der Startuhrzeit.