Übungen zur Lehrveranstaltung
"Programmierkurs Java"
WS 1999/2000
FB Informatik
D. Boles
Übungsblatt 11
Ausgabe: 19.01.2000
Aufgabe 38 (Vererbung): 30 Punkte
Schauen Sie sich die von mir entwickelte Klasse
Set an, die den Datentyp Menge implementiert.Sie finden die Klasse auf dem ARBI-Cluster unter
/user/fb10/dibo/java/Set.java oder auf der Hompage zur Vorlesung. 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);
// clone-Methode (dupliziert die Liste)
public Object clone();
// equals-Methode (ueberprueft, ob dieselben Objekte (Wertegleichheit)
// (in derselben Reihenfolge!) in den beiden Listen gespeichert sind)
public boolean equals(Object list);
// konvertiert die Liste in einen String
public String toString();
// ueberprueft, ob element Element der Liste ist
public boolean isElement(Object element);
// 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(Object 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(Object element);
// entfernt alle Elemente, die wertegleich zu element sind, aus der Liste,
// falls es solche Elemente in der Liste gibt
public void remove(Object element);
}
Überlegen Sie genau: Welche Methoden können Sie erben, welche müssen überschrieben werden und welche sind ganz neu zu implementieren?
Aufgabe 39 (Objektorientierte Modellierung): 30 Punkte
Modellieren Sie auf eine objektorientierte Art und Weise die Hamster-Programmierumgebung. Dabei sollen folgende Unterschiede gegenüber der Original-Hamsterprogrammierumgebung existieren:
Implementieren Sie Ihr Modell prototypisch.
Aufgabe 40 (Objektorientierte Modellierung / Vererbung): 10 Punkte
Schauen Sie sich die objektorientierte Implementierung des Metamorphose-Spiels an, die Sie unter
/user/fb10/dibo/java/Metamorphose.java auf dem ARBI-Cluster und auf der Homepage zur Vorlesung finden (Metamorphose.java ). Versuchen Sie, die Implementierung (insbesondere die Klasse MetamorphoseProgramm) zu verstehen, und erläutern Sie die grundlegende Idee der Modellierung!
Aufgabe 41 (Objektorientierte Modellierung / Polymorphie / Metamorphose): 30 Punkte
Die im folgenden angegebenen Klassen finden Sie im ARBI-Cluster im Verzeichnis
/user/fb10/dibo/java/dibo/metamorphose.Diesmal besteht die Aufgabe darin, Ihre bisherigen Arbeiten am Metamorphose-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.
Schauen Sie sich zunächst die Dateien
MetamorphoseSpieler.java und MetamorphoseSpielzug.java an. Kopieren Sie sich danach die Datei MeinProgramm.java (und nur die!) in eines Ihrer Verzeichnisse und nennen Sie die Datei gegebenenfalls um (z.B. KaisProgramm.java). Schauen Sie sich die Klasse MeinProgramm an. Sie wurde von der Klasse MetamorphoseSpieler abgeleitet. Sie müssen nun die folgenden geerbten Methoden überschreiben. Die Methoden haben dabei folgende Semantik:Hinweise:
import dibo.metamorphose.MetamorphoseSpielzug;
import dibo.metamorphose.MetamorphoseSpieler;
/user/fb10/dibo/java/dibo/metamorphose/bin/metamorphose <Spieler A> <Spieler B>
Handelt es sich bei einem der Spieler um den Namen einer Klasse, die von
MetamorphoseSpieler abgeleitet ist, und zwar 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 MetamorphoseSpieler abgeleitet wurde, und die sich in einer Datei namens KaisProgramm.java im aktuellen Verzeichnis befindet. Dann haben folgende Aufrufe folgende Wirkungen:/user/fb10/dibo/java/dibo/metamorphose/bin/metamorphose Kurt Hans
Ein Mensch namens Kurt spielt als Spieler Weiß gegen einen Menschen namens Hans.
/user/fb10/dibo/java/dibo/metamorphose/bin/metamorphose Kurt KaisProgramm
Ein Mensch namens Kurt spielt als Spieler Weiß gegen Ihr Programm namens
KaisProgramm./user/fb10/dibo/java/dibo/metamorphose/bin/metamorphose KaisProgramm Hans
Ihr Programm
KaisProgramm spielt als Spieler Weiß gegen einen Menschen namens Hans./user/fb10/dibo/java/dibo/metamorphose/bin/metamorphose KaisProgramm KaisProgramm
Ihr Programm
KaisProgramm spielt als Spieler Weiß gegen sich selbst./user/fb10/dibo/java/dibo/metamorphose/bin/metamorphose ich dibo.programme.GoDibo1