diff --git a/Nummernanzeige.java b/Nummernanzeige.java new file mode 100644 index 0000000..41e0c00 --- /dev/null +++ b/Nummernanzeige.java @@ -0,0 +1,74 @@ +/** + * Die Klasse Nummernanzeige repräsentiert Darstellungen von + * digitalen Werten, die von null bis zu einem vorgegebenen Limit + * reichen können. Das Limit wird definiert, wenn eine Nummernanzeige + * erzeugt wird. Die darstellbaren Werte reichen von null bis Limit-1. + * Wenn beispielsweise eine Nummernanzeige für die Sekunden einer + * digitalen Uhr verwendet werden soll, würde man ihr Limit auf 60 + * setzen, damit die dargestellten Werte von 0 bis 59 reichen. + * Wenn der Wert einer Nummernanzeige erhöht wird, wird bei Erreichen + * des Limits der Wert automatisch auf null zurückgesetzt. + * + * @author Michael Kölling und David J. Barnes + * @version 31.07.2011 + */ +public class Nummernanzeige +{ + private int limit; + private int wert; + + /** + * Konstruktor für Exemplare der Klasse Nummernanzeige. + * Setzt das Limit, bei dem die Anzeige zurückgesetzt wird. + */ + public Nummernanzeige(int anzeigeLimit) + { + limit = anzeigeLimit; + wert = 0; + } + + /** + * Liefere den aktuellen Wert als int. + */ + public int gibWert() + { + return wert; + } + + /** + * Liefere den Anzeigewert, also den Wert dieser Anzeige als + * einen String mit zwei Ziffern. Wenn der Wert der Anzeige + * kleiner als zehn ist, wird die Anzeige mit einer führenden + * null eingerückt. + */ + public String gibAnzeigewert() + { + if(wert < 10) { + return "0" + wert; + } + else { + return "" + wert; + } + } + + /** + * Setze den Wert der Anzeige auf den angegebenen 'ersatzwert'. + * Wenn der angegebene Wert unter null oder über dem Limit liegt, + * tue nichts. + */ + public void setzeWert(int ersatzwert) + { + if((ersatzwert >= 0) && (ersatzwert < limit)) { + wert = ersatzwert; + } + } + + /** + * Erhöhe den Wert um eins. Wenn das Limit erreicht ist, setze + * den Wert wieder auf null. + */ + public void erhoehen() + { + wert = (wert + 1) % limit; + } +} diff --git a/README.TXT b/README.TXT new file mode 100644 index 0000000..aa2330e --- /dev/null +++ b/README.TXT @@ -0,0 +1,23 @@ +Projekt: Zeitanzeige +Autoren: David Barnes und Michael Kölling + +Dieses Projekt ist Teil des Zusatzmaterials zum Buch + + Java lernen mit BlueJ - eine Einführung in die + objektorientierte Programmierung, 5. Auflage + David J. Barnes und Michael Kölling + Pearson Education Deutschland, 2012 + +Startpunkt: Erzeugen Sie ein Exemplar der Klasse Uhrenanzeige. +Untersuchen Sie es mit dem Objektinspektor und lassen Sie das Fenster +offen. Wenn Sie nun Operationen wie 'taktsignalGeben' oder 'setzeUhrzeit' +auf diesem Exemplar aufrufen, können sie im Inspektor-Fenster beobachten, +wie sich die Exemplarvariable 'zeitanzeige' verändert. + +Diese Exemplarvariable simuliert die Anzeige einer Uhr. Wenn dieses +Programm Teil einer richtigen Uhr wäre, dann würde statt dieser +Zeichenkette die echte, physische Ausgabe verändert werden. Alles +andere könnte aber ziemlich genauso aussehen. + +Hinweis: In diesem Projekt ist keine angemessene Fehlerbehandlung +implementiert. \ No newline at end of file diff --git a/Uhrenanzeige.java b/Uhrenanzeige.java new file mode 100644 index 0000000..ed31285 --- /dev/null +++ b/Uhrenanzeige.java @@ -0,0 +1,87 @@ + +/** + * Die Klassen Uhrenanzeige implementiert die Anzeige einer Digitaluhr. + * Die Anzeige zeigt Stunden und Minuten. Der Anzeigebereich reicht von + * 00:00 (Mitternacht) bis 23:59 (eine Minute vor Mitternacht). + * + * Eine Uhrenanzeige sollte minütlich "Taktsignale" (über die Operation + * "taktsignalGeben") erhalten, damit sie die Anzeige aktualisieren + * kann. Dies geschieht, wie man es bei einer Uhr erwartet: Die + * Stunden erhöhen sich, wenn das Minutenlimit einer Stunde erreicht + * ist. + * + * @author Michael Kölling und David J. Barnes + * @version 31.07.2011 + */ +public class Uhrenanzeige +{ + private Nummernanzeige stunden; + private Nummernanzeige minuten; + private String zeitanzeige; // simuliert die tatsächliche Anzeige + + /** + * Konstruktor für ein Exemplar von Uhrenanzeige. + * Mit diesem Konstruktor wird die Anzeige auf 00:00 initialisiert. + */ + public Uhrenanzeige() + { + stunden = new Nummernanzeige(24); + minuten = new Nummernanzeige(60); + anzeigeAktualisieren(); + } + + /** + * Konstruktor für ein Exemplar von Uhrenanzeige. + * Mit diesem Konstruktor wird die Anzeige auf den Wert + * initialisiert, der durch 'stunde' und 'minute' + * definiert ist. + */ + public Uhrenanzeige(int stunde, int minute) + { + stunden = new Nummernanzeige(24); + minuten = new Nummernanzeige(60); + setzeUhrzeit(stunde, minute); + } + + /** + * Diese Operation sollte einmal pro Minute aufgerufen werden - + * sie sorgt dafür, dass diese Uhrenanzeige um eine Minute + * weiter gestellt wird. + */ + public void taktsignalGeben() + { + minuten.erhoehen(); + if(minuten.gibWert() == 0) { // Limit wurde erreicht! + stunden.erhoehen(); + } + anzeigeAktualisieren(); + } + + /** + * Setze die Uhrzeit dieser Anzeige auf die gegebene 'stunde' und + * 'minute'. + */ + public void setzeUhrzeit(int stunde, int minute) + { + stunden.setzeWert(stunde); + minuten.setzeWert(minute); + anzeigeAktualisieren(); + } + + /** + * Liefere die aktuelle Uhrzeit dieser Uhrenanzeige im Format SS:MM. + */ + public String gibUhrzeit() + { + return zeitanzeige; + } + + /** + * Aktualisiere die interne Zeichenkette, die die Zeitanzeige h�lt. + */ + private void anzeigeAktualisieren() + { + zeitanzeige = stunden.gibAnzeigewert() + ":" + + minuten.gibAnzeigewert(); + } +} diff --git a/package.bluej b/package.bluej new file mode 100644 index 0000000..5054dfd --- /dev/null +++ b/package.bluej @@ -0,0 +1,41 @@ +#BlueJ package file +dependency1.from=Uhrenanzeige +dependency1.to=Nummernanzeige +dependency1.type=UsesDependency +package.editor.height=460 +package.editor.width=776 +package.editor.x=163 +package.editor.y=30 +package.numDependencies=1 +package.numTargets=2 +package.showExtends=true +package.showUses=true +project.charset=UTF-8 +readme.editor.height=526 +readme.editor.width=748 +readme.editor.x=0 +readme.editor.y=0 +target1.editor.height=797 +target1.editor.width=936 +target1.editor.x=693 +target1.editor.y=111 +target1.height=50 +target1.name=Nummernanzeige +target1.naviview.expanded=false +target1.showInterface=false +target1.type=ClassTarget +target1.width=120 +target1.x=190 +target1.y=100 +target2.editor.height=731 +target2.editor.width=764 +target2.editor.x=516 +target2.editor.y=22 +target2.height=50 +target2.name=Uhrenanzeige +target2.naviview.expanded=false +target2.showInterface=false +target2.type=ClassTarget +target2.width=100 +target2.x=70 +target2.y=40