Übungen zur Lehrveranstaltung

"Programmierkurs Java"

WS 1997/98

FB Informatik

D. Boles


Übungsblatt 12

Ausgabe: 21.01.1998

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:

Begründen Sie Ihre Entscheidungen! Begründen Sie jeweils, weshalb Sie sich für Klassen, abstrakte Klassen bzw. Interfaces entschieden haben! Ordnen Sie den Klassen/Interfaces geeignete Methoden mit geeigneten Parametern zu!

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: