Übungen zur Lehrveranstaltung

"Programmierkurs Java"

WS 1997/98

FB Informatik

D. Boles


Übungsblatt 11

Ausgabe: 14.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 34 (Klassen / Objekte): 25 Punkte

Implementieren Sie eine eigene Klasse MyString mit folgendem Protokoll:

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);

}

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!

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:

// 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();

}

Überlegen Sie genau: Welche Methoden können Sie erben, welche müssen überschrieben werden und welche sind ganz neu zu implementieren?

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:

Hinweise: