Übungen zur Lehrveranstaltung
"Programmierkurs Java"
WS 1999/2000
FB Informatik
D. Boles
Übungsblatt 12
Ausgabe: 26.01.2000
Aufgabe 42 (Klassen): 25 Punkte
Schauen Sie sich die Klasse
BinTree an. Sie finden die Klasse auf der Hompage zur Vorlesung oder auf dem ARBI-Cluster in der Datei /user/fb10/dibo/java/BinTree.java. Kopieren Sie die Klasse in Ihr Verzeichnis und führen Sie die Klasse aus (java BinTree). Erläutern Sie Ihrem Tutor, was die einzelnen Methoden der Klasse bewirken und wie sie dies tun. Testen Sie, ob Sie die Klasse verstanden haben, dadurch, daß Sie die main-Funktion modifizieren.Aufgabe 43 (Klassenhierarchien): 25 Punkte
Schnappen Sie sich ein Biologiebuch und entwerfen Sie eine Klassenhierarchie für die Tierwelt. Die Klassenhierarchie sollte mindestens 20 Klassen bzw. Interfaces enthalten. Berücksichtigen Sie u.a. folgende Phänomene:
• Tiere können unterschiedlicher Art sein (Säugetiere, Vögel, Reptilien, ...)
• Tiere können unterschiedliche Lebensräume haben (Land, Wasser, Luft, ... (auch Kombinationen!))
• Tiere können unterschiedliche Fortbewegungsarten haben (Laufen, Schwimmen, Fliegen, ... (auch Kombinationen!))
• Tiere können unterschiedliche Fortpflanzungsmethoden besitzen
• Tiere können unterschiedliche Ernährungsmethoden besitzen (Fleischfresser, Pflanzenfresser, Allesfresser)
Begründen Sie Ihre Entscheidungen! Begründen Sie jeweils, weshalb Sie sich für Klassen, abstrakte Klassen, Interfaces bzw. Aggregation entschieden haben! Ordnen Sie den Klassen/Interfaces geeignete Methoden mit geeigneten Parametern zu!
Hinweise:
• Es gibt keine eindeutige Lösung!
• Sie brauchen die Methoden nicht zu implementieren!
• Stellen Sie die Klassenhierarchie auch graphisch dar (besserer Überblick!)
Aufgabe 44 (Polymorphie): 25 Punkte
Schauen Sie sich zunächst folgendes Hauptprogramm an:
public class SprachenTest {
public static void main(String[] args) {
Franzoesisch f = new Franzoesisch("je");
Deutsch d = new Deutsch("bin");
Englisch e = new Englisch("happy");
Deutsch satz1 = new Deutsch(f);
satz1.append(d);
satz1.append(e);
Englisch satz2 = new Englisch(f);
satz2.append(d);
satz2.append(e);
Franzoesisch satz3 = new Franzoesisch(f);
satz3.append(d);
satz3.append(e);
Deutsch satz4 = new Deutsch(e);
satz4.append(d);
satz4.append(f);
System.out.println(satz1);
// Ausgabe: "ich bin gluecklich"
System.out.println(satz2);
// Ausgabe: "i am happy"
System.out.println(satz3);
// Ausgabe: "je suis heureux"
System.out.println(satz4);
// Ausgabe: "gluecklich bin ich"
}
}
Implementieren Sie geeignete Klassen, so daß das Hauptprogramm die vorgegebenen Ausgaben liefert. Der Wortschatz sowie die notwendige Übersetzung sei dabei auf die drei vorkommenden Begriffe beschränkt. Realisieren Sie die Klassen so, daß bspw. eine weitere Klasse
Hessisch hinzugefügt und im Hauptprogramm benutzt werden kann, ohne daß die anderen existierenden Klassen geändert werden müssen. Nutzen Sie dazu insbesondere die Möglichkeiten der Polymorphie!Aufgabe 45 (Metamorphose-Spiel): 25 Punkte
Diesmal tun wir etwas für unseren Computergegner. Unser Programm bekommt beigebracht, wie sich "gute" und "schlechte" Stellungen unterscheiden.
Erweitern Sie dazu diejenige Ihrer Klassen, die ein Metamorphose-Spielbrett implementiert, um eine Methode
public int bewerteStellung(). Diese Methode soll einen Stellungswert liefern, welche die Stellung durch bloßes "Hinsehen" bewertet. Der Wert soll positiv sein, wenn Spieler A besser steht (je höher desto besser steht Spieler A), und negativ, wenn Spieler B besser steht (je niedriger desto besser steht Spieler B), und 0 für eine ausgeglichene Stellung. Hier ist Ihre Phantasie gefordert! Im Test gegen andere Programme (nächster Übungszettel) wird sich dann zeigen, wie gut Ihre Bewertung wirklich ist.Achtung: Bewerten Sie wirklich nur aktuelle Stellungen! In Ihre Bewertungsfunktion soll auf keinen Fall die Analyse nachfolgender Züge mit eingehen!