Ü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