Übungsaufgaben zum Thema Vererbung

In dieser Übung werden wir das Vererbungskonzept vertiefen.

Aufgabe 1: Medienbibliothek

In der Vorlesung wurde das Beispiel zu einer Medienbibliothek erläutert. Dieses besteht zur Zeit aus der Oberklasse Medium, die die Unterklasse Audio besitzt. Zusätzlich sind die Unterklassen Video und Book vorgesehen, aber bislang noch nicht implementiert. Holen Sie dies nach. In der Klasse Video sollen zusätzlich zu den Informationen in der Klasse Medium noch der Name der Person abgespeichert werden, die bei dem Video die Regie inne hatte. In der Klasse Book entsprechend der Name derjenigen Person, die das Buch geschrieben hat.

Probieren Sie die neu definierten Unterklassen aus, in dem Sie das Hauptprogramm aus dem Vorlesungsbeispiel um Objekte dieser Klassen erweitern.

Aufgabe 2: Okongo I

Am Fluss "Okongo" sitzen ein Schimpanse und ein Gorilla jeweils unter einer Bananenpalme.

  1. Affen essen Bananen und kreischen. Außerdem haben sie einen Namen. Definieren Sie eine Klasse Affe, die dieses Verhalten implementiert. Geben Sie in den Methodenrümpfen jeweils eine kurze Erläuterung zur Aufgabe der Methode auf die Konsole aus. Vernachlässigen Sie Methodenparameter.

  2. Schimpansen hangeln sich gerne von Ast zu Ast, wohingegen Gorillas mit den Fäusten auf ihrer Brust trommeln. Definieren Sie Klassen für diese erweiterten Verhaltensmuster von Affen. Berücksichtigen Sie auch hier Namen. Geben Sie wieder in den Methodenrümpfen kurze Erläuterungen zur Aufgabe der Methode auf die Konsole aus. Vernachlässigen Sie Methodenparameter. Nutzen Sie alle sich bietenden Möglichkeiten, Redundanz in Form von Codeduplikation zu vermeiden.

  3. Schreiben Sie ein Hauptprogramm, in dem ein Schimpanse mit Namen tschita und ein Gorilla mit Namen george jeweils kreischen und eine Banane essen. Danach trommelt george auf seiner Brust und tschita hangelt sich in die Bäume.

Programmausgabe:

Tschita kreischt
Tschita isst eine Banane
Tschita hangelt
George kreischt
George isst eine Banane
George trommelt

Lösen Sie die Aufgabe durch Anwendung des Erweiterungsprinzips.

Aufgabe 3: Okongo II

Am Fluss "Okongo" sitzen ein Affe unbekannter Rasse, ein Schimpanse und ein Gorilla jeweils unter einer Bananenpalme.

  1. Normalerweise sitzen Affen nur herum. Alternativ essen sie Bananen. Außerdem haben sie einen Namen. Definieren Sie eine Klasse Affe, die diese beiden Verhaltensweisen implementiert. Geben Sie in den Methodenrümpfen jeweils eine kurze Erläuterung zur Aufgabe der Methode auf die Konsole aus. Vernachlässigen Sie Methodenparameter.

  2. Anstatt herumzusitzen, hangeln sich Schimpansen gerne von Ast zu Ast, wohingegen Gorillas mit den Fäusten auf ihrer Brust trommeln. Definieren Sie Klassen für diese abweichenden Verhaltensmuster von Affen. Berücksichtigen Sie auch hier Namen. Geben Sie wieder in den Methodenrümpfen eine kurze Erläuterung zur Aufgabe der Methode auf die Konsole aus. Vernachlässigen Sie Methodenparameter. Nutzen Sie alle sich bietenden Möglichkeiten, Redundanz in Form von Codeduplikation zu vermeiden.

  3. Schreiben Sie ein Hauptprogramm, in dem der Affe ursus, der Schimpanse tschita und der Gorilla george ihrer normalen Tätigkeit nachgehen und zusätzlich eine Banane essen.

Programmausgabe:

Ursus sitzt herum
Ursus isst eine Banane
Tschita hangelt
Tschita isst eine Banane
George trommelt
George isst eine Banane

Lösen Sie die Aufgabe durch Anwendung des Ersetzungsprinzips.

Aufgabe 4: Buchladen

Erstellen Sie eine Klassenhierarchie zur Erfassung von Büchern.

  1. In der Hierarchie gibt es eine Oberklasse Buch, in der sich Informationen über den Autor, den Titel und die ISBN-Nummer eines Buches ablegen lassen.

    Die Klasse stellt einen Konstruktor zur Verfügung, mit dem sich diese Daten bei der Erstellung einer Klasseninstanz als Zeichenketten erfassen lassen.

    Für den Fall, dass keine ISBN-Nummer vorhanden ist, existiert ein zweiter Konstruktor. Dieser besitzt keinen Parameter für die ISBN-Nummer. Anstatt dessen wird im Konstruktorrumpf der Vorgabewert "n. v." (= "nicht vorhanden") für die ISBN-Nummer eingetragen. Dieser Konstruktor erlaubt die Speicherung von z. B. historischen Werken, die vor der Einführung der ISBN-Nummer verfasst wurden.

    Die Klasse soll ebenfalls die automatische Methode String toString() für die Ausgabe der gespeicherten Informationen besitzen. Siehe die Beispielausgabe unten, zu deren inhaltlichen Aufbau.
    Zur Erinnerung: Wenn die Methode String toString() in einem Objekt existiert, wird diese automatisch vom Laufzeitsystem aufgerufen, wenn eine Zeichenkettendarstellung des Objekts erforderlich ist (siehe hierzu auch die Übungsaufgabe "Kundenverwaltung" auf dem letzten Übungsblatt).

  2. Die Oberklasse Buch besitzt eine Unterklasse Sachbuch, die es erlaubt, zusätzlich das Fachgebiet (Informatik, Kunstgeschichte, Medizin usw.), dem das Buch zuzuordnen ist, abzuspeichern. Auch diese Klasse bietet einen Konstruktor zur Erfassung der Buchdaten, bei der Erstellung einer Klasseninstanz. Um Redundanz zu vermeiden, basiert dieser jedoch auf dem Konstruktor der Oberklasse. Dies gilt auch für die Ausgabe der Buchdaten, die unter Ausnutzung der korrespondierenden Methode der Oberklasse stattfindet.

  3. Buch besitzt eine weitere Unterklasse: Roman. Roman erlaubt es, das Genre (Liebesroman, Abenteuerroman usw.), dem das Buch zuzurechnen ist, abzuspeichern. Auch für diese Klasse existiert ein Konstruktor für die Datenerfassung und eine Methode für die Datenausgabe, die jeweils die korrespondierenden Methoden der Oberklasse nutzen.

  4. Zur Vereinfachung und Standardisierung der Dateneingabe ist es sinnvoll, Buchklassen einzuführen, die spezielle, häufig auftretende Sachbucharten repräsentieren. Für diese Bücher wird das Fachgebiet bei der Erstellung einer Instanz automatisch eingetragen. Implementieren Sie exemplarisch die Klasse Medizinbuch, für die Erfassung medizinischer Fachliteratur. Hier ist der voreingestellte Wert "Medizin". Auch diese Klasse besitzt einen Konstruktor für die Datenerfassung und eine Methode zur Datenausgabe. Implementieren Sie die Klasse in möglichst effizienter Weise, unter Ausnutzung vorhandener Klassen der Klassenhierarchie.

  5. Schreiben Sie zum Testen Ihrer Klassenhierarchie ein Hauptprogramm. Speichern Sie im Programm mindestens die folgenden Bücher ab und geben Sie deren Daten nachfolgend auf die Konsole aus:

    • R. Descartes: "Meditationen", keine ISBN-Nummer vorhanden
    • J. W. v. Goethe: "Die Leiden des jungen Werther", keine ISBN-Nummer vorhanden
    • H. P. Gumm und M. Sommer: "Einführung in die Informatik", ISBN: 3-486-25635-1
    • W. Pschyrembel: "Klinisches Wörterbuch", ISBN: 3-11-010881-255

    Diese sollten die folgende Ausgabe liefern:

    Autor: R. Descartes, Titel: Meditationen, ISBN: n. v.
    Autor: J. W. v. Goethe, Titel: Die Leiden des jungen Werther, 
     ISBN: n. v., Genre: Liebesroman
    Autor: H. P. Gumm und M. Sommer, Titel: Einführung in die Informatik, 
     ISBN: 3-486-25635-1, Fachgebiet: Informatik
    Autor: W. Pschyrembel, Titel: Klinisches Wörterbuch, 
     ISBN: 3-11-010881-255, Fachgebiet: Medizin