Initial commit of the source files.

This commit is contained in:
Bernhard Tellenbach 2017-09-17 17:06:10 +02:00
parent 4b315c6ee8
commit bd00165af0
4 changed files with 225 additions and 0 deletions

74
Nummernanzeige.java Normal file
View File

@ -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;
}
}

23
README.TXT Normal file
View File

@ -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.

87
Uhrenanzeige.java Normal file
View File

@ -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<EFBFBD>lt.
*/
private void anzeigeAktualisieren()
{
zeitanzeige = stunden.gibAnzeigewert() + ":"
+ minuten.gibAnzeigewert();
}
}

41
package.bluej Normal file
View File

@ -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