In dieser Übung werden wir das Kompositionskonzept vertiefen.
Aufgabe 1: Komposition: Schrank
Ein Schrank beinhalte 4 Schubladen, in die als Inhalt Gegenstände gelegt werden können
Schreiben Sie die folgenden Klassen:
- Eine Klasse
Schublade für das Ablegen von
Gegenständen. Schubladen besitzen einen Namen, der bei ihrer Herstellung
angegeben wird. Daneben besitzen sie die folgenden Methoden:
void hineinlegen(String inhalt): Diese dient dazu, die Bezeichnung der Gegenstände anzugeben, die in der Schublade liegen.
void inhalt(): Diese dient dazu, den Namen
der Schublade und die Bezeichnung der Gegenstände in das Ausgabefenster
auszugeben, die in der Schublade liegen.
- Eine Klasse
Schrank für das Aufnehmen von vier Schubladen.
Neben den vier Schubladen verfügt die Klasse Schrank über die folgende Methode:
void inhalt(): Diese dient dazu, den Inhalt
der vier Schubladen in das Ausgabefenster auszugeben. Sie nutzt dazu die
passende Methode der Klasse Schublade.
Schreiben Sie auch ein Hauptprogramm, in dem ein Schrank
angelegt und mit Inhalt befüllt und dessen Inhalt in das Ausgabefenster
ausgegeben wird, sodass beispielsweise die folgende Programmausgabe
erscheint:
Schrankinhalt:
Schublade 1: Wichtige Papiere
Schublade 2: Kleinodien
Schublade 3: Krimskrams
Schublade 4: Vergessener Krimskrams
Aufgabe 2: Kundenverwaltung
Bei der Verwaltung von Kunden fallen unterschiedliche Daten an, die in
unterschiedlichen Klassen organisiert werden können. Hierzu gehören der
Name und die Adresse eines Kunden sowie die von ihm/ihr zurückliegend
gekauften Waren.
Schreiben Sie die folgenden Klassen:
-
Eine Klasse Adresse für das Abspeichern eines
Straßennamens, einer Hausnummer und eines Orts in separaten
Klassenvariablen. Die Daten werden mit Hilfe eines Konstruktors
verarbeitet. Die Klasse soll diese Daten ebenfalls als Zeichenkette
ausgeben können. Dies soll mit Hilfe einer public String toString()-Methode analog zur Beispielausgabe unten geschehen.
-
Eine Klasse Name für das Abspeichern eines Vor- und
Nachnamens in separaten Klassenvariablen und Ausgabe dieser
Informationen mittels String toString()-Methode.
-
Eine Klasse Ware für das Abspeichern eines
Artikelnamens, eines Preises sowie des Kaufdatums in separaten
Klassenvariablen und Ausgabe dieser Informationen mittels String
toString()-Methode. Die Warendaten werden jeweils als
Zeichenketten gespeichert.
-
Eine Klasse Kunde. Diese besitzt einen Konstruktor Kunde(String
kundennr) mit einem Parameter für die Kundennummer. Daneben
besitzt die Klasse die folgenden Methoden:
-
public void neuerName(String vorname, String
nachname)
Die Methode nimmt einen neuen Kundennamen entgegen und legt diesen in
einem internen Namensobjekt ab, welches zu diesem Zweck mit new erzeugt wird.
-
public void neueAdresse(String str, int nr, String
ort) Die Methode nimmt einen Straßennamen nebst
zugehörender Nummer sowie einen Ortsnamen entgegen und legt
diese Daten in einem neu erzeugten internen Adressobjekt ab.
-
public void neueWare(String bezeichnung, String
preis, String datum) Die Methode nimmt die
angegebenen Warendaten entgegen, speichert diese in einem neuen
Warenobjekt und fügt dieses einem internen Feld der bisher
gekauften Waren hinzu. Das Feld bietet Platz für 20 gekaufte
Waren. Ist es voll, so wird es von vorne neu mit Waren
beschrieben, wobei die zuerst geschriebenen Waren überschrieben
werden.
-
Mit Hilfe einer String toString()-Methode können
alle zu einem Kunden aufgezeichneten Daten als Zeichenkette
ausgegeben werden. Die Methode nutzt zu diesem Zweck die in den internen Objekten bereits verfügbaren toString()-Methoden, um Codeduplikation zu vermeiden.
Schreiben Sie ein Hauptprogramm, in welchem Sie die Daten eines Kunden
und die von ihm/ihr gekauften Waren erfassen und ausgeben.
Beispielausgabe:
NP-15081769-FR:
Napoleon Bonaparte
Longwood House 1, St. Helena
Gekaufte Produkte:
Courvoisier Cognac, 25.72, 15.02.1818
Eau de Gloire, 75.50, 05.07.1818
Tabac à Priser, 17.85, 15.04.1819
In der ersten Zeile steht die Kundennummer, in der zweiten der
Kundenvor- und -nachname. In der dritten Zeile die Adresse, bestehend
aus Straßenname, Hausnummer und Ort. Danach folgt eine Liste der bislang
gekauften Produkte.
Wie schon an anderer Stelle erwähnt, gehört die von Ihnen implementierte Methode toString() zu den automatischen
Methoden. Sofern diese Methode in einer Klasse
existiert, wird sie automatisch vom Laufzeitsystem aufgerufen, wenn eine
Zeichenkettendarstellung eines Objekts
erforderlich ist. Verwenden Sie deswegen in den
Ausgabeanweisungen bitte nur den Objektnamen ohne expliziten
Methodenaufruf.
Erweitern Sie Ihre Lösung dann in der Weise, dass die Klasse Kunde zusätzlich über eine private innere Klasse Kontoverbindung verfügt, in der die Kontonummer sowie der Bank Identifier Code (BIC) des Kunden als Zeichenketten gespeichert werden.
-
Das Speichern dieser Daten geschieht beim Instanzieren der inneren Klasse durch den Konstruktor.
-
Um diese Daten einzulesen, erhält die Klasse Kunde die zusätzliche Methode
public void neueKontoverbindung(String nr, String bic)
Die Methode erzeugt ein neues privates Objekt der inneren Klasse und übergibt die Daten dabei dem Konstruktor.
Erweitern Sie die String toString()-Methode des Kunden, sodass jetzt zusätzlich die Kontoverbindung im Hauptprogramm ausgegeben wird:
NP-15081769-FR:
Napoleon Bonaparte
Longwood House 1, St. Helena
Gekaufte Produkte:
Courvoisier Cognac, 25.72, 15.02.1818
Eau de Gloire, 75.50, 05.07.1818
Tabac à Priser, 17.85, 15.04.1819
Kontonr.: 000001, BIC: BDFEFR31XXX
- Versuchen Sie im Hauptprogramm die Kontoinformationen direkt
auszulesen. Dies sollte selbst dann nicht möglich sein, wenn das
zugehörende Kontoobjekt per
public öffentlich zugänglich gemacht wurde.
Aufgabe 3: Flugzeug bauen
Komponieren Sie ein Flugzeug bestehend aus den Klassen Tragfläche,
Triebwerk, Rumpf, Seitenleitwerk, Höhenleitwerk und Fahrgestell.

Abb. 2: Flugzeugbestandteile
Das Flugzeug bestehe aus den Leitwerken und dem Rumpf. Der Rumpf aus
dem Fahrgestell und zwei Tragflächen. Zu jeder Tragfläche gehöre ein
Triebwerk.

Abb. 3: Komposition der Klassen für das Flugzeug
Triebwerke lassen sich starten und stoppen. Flugzeuge können starten
und landen. Fahrgestelle können ein- und ausfahren.
Die Klassen besitzen die folgenden Konstruktoren und Methoden:
- Flugzeug:
Flugzeug()
starten()
landen()
- Seitenleitwerk:
Seitenleitwerk()
- Höhenleitwerk:
Höhenleitwerk()
- Rumpf:
Rumpf()
- Fahrgestell:
Fahrgestell()
einfahren()
ausfahren()
- Tragfläche:
Tragfläche(String name)
- Triebwerk:
Triebwerk(String name)
starten()
stoppen()
Erstellen Sie ein Flugzeug aus diesen Baugruppen und lassen Sie es
einen kurzen Testflug absolvieren. Ihr Programm soll während der
Erstellung der einzelnen Bauteile und während des Testflugs folgende
Meldungen ausgeben:
Fahrgestell erzeugt
Linkes Triebwerk erzeugt
Linke Tragflaeche erzeugt
Rechtes Triebwerk erzeugt
Rechte Tragflaeche erzeugt
Rumpf erzeugt
Seitenleitwerk erzeugt
Hoehenleitwerk erzeugt
Flugzeug erzeugt
Linkes Triebwerk gestartet
Rechtes Triebwerk gestartet
Flugzeug gestartet
Fahrgestell eingefahren
Fahrgestell ausgefahren
Flugzeug gelandet
Linkes Triebwerk gestoppt
Rechtes Triebwerk gestoppt