Aufgabe 3: Containerobjekt
Erweitern Sie Ihr Programm um eine neue Java-Datei mit dem
Namen
NumberContainer.java, die die Definition einer Klasse
NumberContainer enthält. Die Klasse soll über vier
public-Klassenvariablen verfügen, die Speicherplätze für max. drei
zu sortierende int-Werte bieten.
In der vierten Variable wird die Anzahl der in der Klasse
tatsächlich gespeicherten Zahlenwerte
abgelegt.
class NumberContainer {
public int ...
NumberContainer() {
// Alle Klassenvariablen mit 0 initialisieren
}
NumberContainer(int num1, int num2) {
// Klassenvariablen mit num1 und num2
// initialisieren
}
NumberContainer(int num1, int num2, int num3) {
// Klassenvariablen mit num1 bis num3 initialisieren
}
}
Statten Sie ihre Klasse mit drei überladenen Konstruktoren aus, mit denen sich bei
der Instanzierung der Klasse 0, 2 oder 3 umzudrehende Zahlenwerte übergeben
lassen. Werden bei der Instanzierung keine Werte übergeben, so initialisiert der
zugehörende Konstruktor alle Variablen mit dem Wert 0.
Eine Instanz dieser Klasse stellt nun im Hauptprogramm
das
Objekt dar, mit dem die umzudrehenden Zahlen an eine
passend definierte reverse-Methode übergeben
werden können.
Fügen Sie Ihrer Array-Klasse diese neue Variante
der
Methode reverse hinzu, bei der die
Zahlen mit Hilfe eines NumberContainer-Objekts
an die
Methode übergeben werden. Die Methode liest zunächst die Anzahl der
zu
verarbeitenden Zahlenwerte aus und behandelt dann den passenden
der zwei
möglichen Fälle (2 oder 3 übergebene Zahlen). Die
Zahlenwerte
werden nach dem Umdrehen in
das NumberContainer-Objekt
zurückgeschrieben und nicht
mit println() auf die Konsole
ausgegeben. Ausgegeben
werden Sie im Hauptprogramm
und zu diesem Zweck aus dem Objekt ausgelesen.
Testen Sie die unterschiedlichen Varianten der Methode wieder in Ihrem
Hauptprogramm durch Übergeben von zwei verschiedenen NumberContainer-Objekten, die mit einigen Zahlenwerten initialisiert wurden. Geben Sie die Zahlenwerte aus den NumberContainer-Objekten
jeweils nach dem Aufruf der Methode reverse in das Ausgabefenster aus.
Wird ein Objekt an eine Methode übergeben, so
geschieht dies
genauso durch
call by value, wie bei primitiven Datentypen. Der
Datenwert
wird also kopiert. Bei einem primitiven
Datentyp, wie
z. B. int, ist dies ein Zahlenwert. Bei
einem Objekt
ist dies die Adresse des Objekts im
Hauptspeicher.
Über diese
Adresse ist es möglich, auf das Objekt
zuzugreifen und in dessen
öffentlich zugängliche
Klassenvariablen zu schreiben sowie
öffentlich zugängliche Methoden aufzurufen.
Bei Objekten haben wir
also trotz des call by value-Prinzips die Möglichkeit,
das
Objekt abzuändern bzw. dieses in einen neuen Zustand zu
versetzen.
Aufgabe 4: Containerobjekt als Rückgabewert
Objekte können nicht nur als Parameterwert
übergeben, sondern auch als Rückgabewert von einer Methode
geliefert werden. Dies können wir nutzen, um das
NumberContainer-Objekt, in welchem die zu sortierenden
Zahlenwerte an die Methode übergeben werden, unverändert zu lassen. Anstatt die
umgedrehten Zahlen in dieses Objekt zu schreiben, können wir in der Methode
ein neues NumberContainer-Objekt anlegen, dieses mit
den Werten füllen und eine
Referenz auf dieses Objekt an das Hauptprogramm zurückgeben.
Erweitern Sie Ihre Array-Klasse um die
Methode
static NumberContainer reverseReturn(NumberContainer n).
Diese
leistet dasselbe wie die Methode aus der vorigen
Aufgabe. Im
Unterschied zu dieser werden die
umgedrehten Zahlenwerte in einem neuen
NumberContainer-Objekt gespeichert, welches im Rumpf der
Methode
erzeugt und einer Variable, z. B. mit dem
Namen newnc,
zugewiesen wird.
Der Wert der Variable, der einer
Referenz auf das Objekt entspricht, wird dann
mit return
an das Hauptprogramm
geliefert und dort wieder in einer passenden Variable
abgelegt.
Rufen Sie die neue Methode in ihrem Hauptprogramm mit
einem NumberContainer, der ein paar
Zahlenwerte enthält, auf. Lesen Sie dann die
umgedrehten Zahlenwerte aus dem zurückgegebenen Objekt
aus und geben Sie
diese in der üblichen Weise in das Ausgabefenster aus.
Aufgabe 5: Glühbirnen vergleichen
Erweitern Sie die LightBulb-Klasse aus dem Fach
Programmieren 1, wie auf den
Vorlesungsfolien beschrieben, durch folgende Eigenschaften:
Eine Klassenvariable String colour, für die Farbe einer
Glühbirne.
Einen Konstruktor LightBulb(String
colour) zur Festlegung der Farbe.
Eine Methode String getColour() für das
Auslesen der Glühbirnenfarbe.
Eine Methode boolean equals(LightBulb lb): Diese wird
für den Vergleich zweier Glühbirnen auf Grundlage ihrer Farbe
eingesetzt und liefert true, wenn die Farben
identisch sind.
Schreiben Sie ein Hauptprogramm, in dem zwei Glühbirnen
gleicher Farbe erzeugt werden.
Vergleichen Sie zunächst mit == die
Referenzen der Glühbirnen miteinander und danach die Objekte
durch Aufruf der equals-Methoden. Der erste
Vergleich sollte false liefern und der
zweite true.
Geben Sie die Vergleichsergebnisse in das Ausgabefenster aus.
Farbe Glühbirne 1: rot
Farbe Glühbirne 2: rot
Gleiche Objekte: false
Objekte mit gleichen Eigenschaften: true