Ü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 34 (Klassen / Objekte): 25 Punkte
Implementieren Sie eine eigene Klasse MyString
mit folgendem Protokoll:
Wählen Sie eine geeignete Datenstruktur zur internen Repräsentation! Achtung: Sie dürfen natürlich NICHT die Klasse String aus der JDK-Klassenbibliothek benutzen!public class MyString {
// initialisiert einen leeren String
public MyString();
// initialisiert den String mit dem übergebenen Charakter-Array
public MyString(char[] value);
// sogenannter Copy-Konstruktor (dupliziert übergebenen String)
public MyString(MyString string);
// liefert die Anzahl an Charaktern des Strings
public int length();
// vergleicht den String lexikalisch mit dem übergebenen String;
// liefert -1 (falls lexikalisch kleiner), 0 (falls gleich), 1 (falls größer)
public int compareTo(MyString string);
// hängt den übergebenen String hinten an den String an
public void append(MyString string);
// hängt den übergebenen String vor den String
public void prepend(MyString string);
// liefert ein Duplikat des Strings
public MyString duplicate();
// gibt String auf Bildschirm aus
public void print();
// erzeugt neuen String durch das Hintereinanderhängen der beiden
// übergebenen Charakter-Arrys
public static MyString concat(char[] string1, char[] string2);
}
Aufgabe 35 (Vererbung): 25 Punkte
Kopieren Sie sich die von mir entwickelte Klasse Set, die den Datentyp Menge implementiert.
Sie finden die Klasse auf dem ARBI-Cluster unter /user/fb10/dibo/java/Set.java oder auf der Java-Hompage
www-is.informatik.uni-oldenburg.de/~dibo/teaching/java9798 bei der Software.
Nutzen Sie die Klasse Set (durch das
Prinzip der Vererbung) zur Implementierung einer Klasse List
mit folgendem Protokoll:
Überlegen Sie genau: Welche Methoden können Sie erben, welche müssen überschrieben werden und welche sind ganz neu zu implementieren?// Die Klasse "List" repraesentiert einen Datentyp "Liste".
// Die Elemente der Liste sind dabei vom Datentyp "int".
// Im Unterschied zu einer Menge darf ein Element auch mehrmals in
// einer Liste auftreten!
public class List extends Set {
// initialisiert eine (leere) Liste der maximalen Groesse size
public List(int size);
// Copy-Konstruktor (dupliziert uebergebene Liste)
public List(List list);
// ueberprueft, ob value Element der Liste ist
public boolean isElement(int value);
// liefert Anzahl an Elementen in der Liste
public int getNumberOfElements();
// fuegt element an die Liste an, falls noch Platz vorhanden ist
// (in einer Liste darf ein Wert mehrmals auftreten!)
public void add(int element);
// traegt element als erstes in die Liste ein;
// die anderen Elemente werden dementsprechend verschoben
// (in einer Liste darf ein Wert mehrmals auftreten!)
public void prepend(int element);
// entfernt alle Elemente mit Wert element aus der Liste,
// falls es solche Elemente in der Liste gibt
public void remove(int element);
// gibt Liste aus
public void print();
}
Aufgabe 36 (Objektorientierte Modellierung / Polymorphie): 25 Punkte
Schauen Sie sich die objektorientierte Implementierung des Reversi-Spiels an, die Sie unter /user/fb10/dibo/java/oo-modellierung/reversi-2 auf dem ARBI-Cluster und auf der Java-Hompage als tar-File (reversi-2.tar) bei der Software finden (www-is.informatik.uni-oldenburg.de/~dibo/teaching/java9798). Versuchen Sie, die Implementierung zu verstehen, und erläutern Sie die grundlegende Idee der Modellierung!
Führen Sie für diese Implementierung des Reversi-Spiels nachträglich eine objektorientierte Modellierung gemäß der in der Vorlesung besprochenen 9 Phasen durch (siehe auch Übungsblatt 10)!
Aufgabe 37 (Objektorientierte Modellierung / Polymorphie / Reversi): 25 Punkte
Die im folgenden angegebenen Klassen finden Sie im ARBI-Cluster im Verzeichnis /user/fb10/dibo/java/dibo/reversi.
Diesmal besteht die Aufgabe darin, Ihre bisherigen Arbeiten am Reversi-Spiel so anzupassen, daß nicht nur Mensch gegen Mensch sondern auch Menschen gegen Programme und Programme gegen Programme spielen können. Dazu müssen Sie ein paar Konventionen einhalten.
Kopieren Sie sich zunächst die Datei MeinProgramm.java (und nur die!) in eines Ihrer Verzeichnisse und nennen Sie sie gegebenenfalls um (z.B. KaisProgramm.java). Schauen Sie sich die Klasse MeinProgramm an. Sie wurde von der Klasse Player abgeleitet. Schauen Sie sich auch die Klasse Player an. Sie müssen nun die folgenden geerbten Methoden überschreiben. Die Methoden haben dabei folgende Semantik:
import dibo.reversi.Turn;
import dibo.reversi.Player;
/user/fb10/dibo/java/dibo/reversi/bin/reversi <Spieler A> <Spieler B>
Handelt es sich bei einem der Spieler um den Namen einer Player-Klasse in dem Verzeichnis, in dem Sie sich gerade befinden (bspw. KaisProgramm (s.o.)), dann spielt Ihr Programm. Ansonsten wird angenommen, daß es sich um einen Menschen handelt.
Beispiele:
Angenommen, es gibt genau eine Klasse namens KaisProgramm, die von der Klasse Player abgeleitet wurde, und die sich in einer Datei namens KaisProgramm.java im aktuellen Verzeichnis befindet. Dann haben folgende Aufrufe folgende Wirkungen:
Ein Mensch namens Kurt spielt als Spieler Weiß gegen einen Menschen namens Hans.
Ein Mensch namens Kurt spielt als Spieler Weiß gegen Ihr Programm namens KaisProgramm.
Ihr Programm KaisProgramm spielt als Spieler Weiß gegen einen Menschen namens Hans.
Ihr Programm KaisProgramm spielt als Spieler Weiß gegen sich selbst.
/user/fb10/dibo/java/dibo/reversi/bin/reversi ich DibosProgram0