Übungen zur Lehrveranstaltung
"Programmierkurs Java"
WS 1997/98
FB Informatik
D. Boles
Hinweise: Zur Lösung der Aufgaben dürfen nur Konzepte benutzt werden, die in der Vorlesung schon behandelt worden sind.
Benutzen Sie zur Eingabe und Ausgabe jeweils die Funktionen, die Sie auf dem ARBI-Cluster im Verzeichnis /user/fb10/dibo/java/dibo (siehe Datei Terminal.README) finden.
Aufgabe 38 (Klassen): 25 Punkte
Schauen Sie sich die Klasse BinTree an. Sie finden die Klasse auf der Java-Hompage unter der Software 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 39 (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:
Hinweise:
Aufgabe 40 (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 des Polymorphismus!
Aufgabe 41 (Reversi-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 Reversi-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!
Einige Tips zur Bewertungsfunktion: