Ü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