Übungen zur Lehrveranstaltung
"Programmierkurs Java"
WS 2000/2001

FB Informatik
D. Boles
Übungsblatt 11
Ausgabe: 10.01.2001
Aufgabe 37 (Vererbung): 30 Punkte
Schauen Sie sich die Klasse
Vector an, die Sie auf dem ARBI-Cluster unter /user/fb10/dibo/java/Vector.java oder auf der Homepage zur Vorlesung finden. Die Klasse Vector implementiert eine Datenstruktur zum Speichern von Objekten, die falls notwendig wächst. Nutzen Sie die Klasse Vector (durch das Prinzip der Vererbung) zur Implementierung einer Klasse Stack mit folgendem Protokoll:/**
* A Last-In-First-Out(LIFO) stack of objects.
*/
public class Stack extends Vector {
/**
* Pushes an item onto the stack.
* @param item the item to be pushed on.
*/
public Object push(Object item);
/**
* Pops an item off the stack.
*/
public Object pop();
/**
* Peeks at the top of the stack.
*/
public Object peek();
/**
* Returns true if the stack is empty.
*/
public boolean empty();
/**
* Sees if an object is on the stack.
* @param o the desired object
* @return the distance from the top, or -1 if it is not found.
*/
public int search(Object o);
}
Überlegen Sie genau: Welche Methoden können Sie erben, welche müssen überschrieben werden und welche sind ganz neu zu implementieren?
Aufgabe 38 (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:
Gehen Sie dabei nach folgendem Schema vor:
Bei der objektorientierte Modellierung (soweit sie im Rahmen dieser
Vorlesung angesprochen werden kann; genaueres siehe in Vorlesung
"Software-Engineering") sind folgende Schritte durchzuführen:
(1) Problembeschreibung:
In der Problembeschreibung wird in Form einer
textuellen Beschreibung das zu modellierende Problem
exakt beschrieben.
(2) Identifikation von Objekten:
Mit Hilfe der Problembeschreibung werden Objekte
identifiziert.
(3) Identifikation von Beziehungen (Assoziationen) zwischen Objekten
Mit Hilfe der Problembeschreibung werden Beziehungen zwischen
Objekten identifiziert.
(4) Festlegung von Klassen:
Mit Hilfe der Problembeschreibung, der Identifikation der
Objekte und der Identifikation der
Assoziationen werden Klassen festgelegt.
(5) Festlegung von Attributen der einzelnen Objekte/Klassen
Mit Hilfe der Problembeschreibung, der Identifikation der
Objekte und der Identifikation der
Assoziationen werden Attribute der einzelnen
Objekte/Klassen festgelegt.
(6) Festlegung von Methoden der einzelnen Objekte/Klassen
Mit Hilfe der Problembeschreibung, der Identifikation der
Klassen und Objekte und der Identifikation der
Assoziationen werden Methoden der einzelnen
Objekte festgelegt.
(7) Die Klassen werden durch weitere (nützliche) Attribute und
Methoden ergänzt. Hier wird die sogenannte Klassendeklaration
vorgenommen, bei der alle Methoden der Klasse zwar angeführt
aber noch nicht implementiert werden.
(eine richtige Klassendeklaration gibt es in Java (leider) nicht!)
(8) Implementierung und Dokumentation
(Dokumentation folgt später)
(9) (Test)-Programme
Aufgabe 39 (Objektorientierte Modellierung / Vererbung): 10 Punkte
Schauen Sie sich die objektorientierte Implementierung des PAROB-Spiels an, die Sie unter
/user/fb10/dibo/java/ParobSpiel.java auf dem ARBI-Cluster und auf der Homepage zur Vorlesung finden. Versuchen Sie, die Implementierung zu verstehen, und erläutern Sie die grundlegende Idee der Modellierung!Aufgabe 40 (OO-Modellierung / Polymorphie / PAROB): 30 Punkte
Die im folgenden angegebenen Klassen finden Sie im ARBI-Cluster im Verzeichnis /user/fb10/dibo/java/dibo/parob. (Wenn Sie zuhause spielen wollen, können Sie sich das Spielprogramm über die Homepage zur Vorlesung laden. Sie finden es auch auf dem ARBI-Cluster unter /user/fb10/dibo/java/parob.tar. Entpacken Sie die Datei, und lesen Sie sich die README-Datei durch.)
Diesmal besteht die Aufgabe darin, Ihre bisherigen Arbeiten am PAROB-Spiel so anzupassen, dass 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 ParobSpieler.java und ParobSpielzug.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 ParobSpieler abgeleitet. Sie müssen nun die folgenden geerbten Methoden überschreiben. Die Methoden haben dabei folgende Semantik:
Hinweise:
import dibo.parob.ParobSpielzug;
import dibo.parob.ParobSpieler;
/user/fb10/dibo/java/dibo/parob/bin/parob <Spieler A> <Spieler B>
/user/fb10/dibo/java/dibo/parob/bin/gparob <Spieler A> <Spieler B>
Handelt es sich bei einem der Spieler um den Namen einer Klasse, die von
ParobSpieler abgeleitet ist, und zwar in dem Verzeichnis, in dem Sie sich gerade befinden (bspw. KaisProgramm (s.o.)), dann spielt Ihr Programm. Ansonsten wird angenommen, dass es sich um einen Menschen handelt.Beispiele:
Angenommen, es gibt genau eine Klasse namens
KaisProgramm, die von der Klasse ParobSpieler 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/parob/bin/parob Kurt Hans
Ein Mensch namens Kurt spielt als Spieler Weiß gegen einen Menschen namens Hans.
/user/fb10/dibo/java/dibo/parob/bin/parob Kurt KaisProgramm
Ein Mensch namens Kurt spielt als Spieler Weiß gegen Ihr Programm namens
KaisProgramm./user/fb10/dibo/java/dibo/parob/bin/parob KaisProgramm Hans
Ihr Programm
KaisProgramm spielt als Spieler Weiß gegen einen Menschen namens Hans./user/fb10/dibo/java/dibo/parob/bin/parob KaisProgramm KaisProgramm
Ihr Programm
KaisProgramm spielt als Spieler Weiß gegen sich selbst./user/fb10/dibo/java/dibo/parob/bin/parob ich dibo.programme.GoDibo1