Objektorientierte Programmierung WS 2013/2014 - Aufgabenblatt 4
Prof. Dr. U. KastensInstitut für Informatik, Fakultät für Elektrotechnik, Informatik und Mathematik, Universität Paderborn
Ausgabe: 26.11.2013
Aufgabe 1 (Das Composite Pattern)
Auf Folie 208 der Vorlesung wird das Design Pattern "Composite" vorgestellt, mit dem zusammengesetzte rekursive Strukturen modelliert werden können. Dieses Entwurfsmuster soll für eine Datenstruktur für Dateisysteme angewandt werden:
- Ein Dateisystemeintrag ist entweder eine Datei oder ein Ordner. Er hat einen Namen.
- Ein Ordner kann beliebig viele Dateisystemeinträge enthalten.
import java.io.File; public class VerzeichnisBaum { private static DateiSystemEintrag durchlaufen (File f) { if (f.isDirectory()) { // es ist ein Ordner Ordner res = new Ordner(f.getName()); // der Ordnerinhalt als Array von Strings String[] ordnerinhalt = f.list(); // rekursives Durchlaufen des Ordnerinhaltes for (int i = 0; i < ordnerinhalt.length; i++) res.hinzufuegen(durchlaufen(new File(f.getPath() + "/" + ordnerinhalt [i]))); return res; } else { // es ist eine gewoehnliche Datei Datei res = new Datei(f.getName()); return res; } } public static void main (String argv []) { // Die Wurzel fuer unseren Verzeichnisbaum String wurzel = argv [0]; // Durchlaufen des gesamten Verzeichnisbaums DateiSystemEintrag e = durchlaufen(new File(wurzel)); // Ausgabe des Verzeichnisbaums e.druckeVerzeichnisBaum(""); // Der String-Parameter ist die Einrueckung } }Es liest einen Verzeichnisbaum eines Verzeichnisses, dessen Name auf der Kommandozeile übergeben wird, und produziert eine formatierte Auflistung des Inhaltes. Für den beigefügten TestOrdner liefert des Programm folgende Ausgabe:
TestOrdner Staedte Bielefeld Paderborn Laender Belgien Niederlande Luxemburg Fluesse Amerika Orinoko Mississippi Europa Saar
Die Quelldatei des Hauptprogramms und das TestOrdner-Verzeichnis findet sich in
Aufgabe 2 (Rollen)
Ein Beispiel für die Implementierung von Rollen durch Delegation an Rollenobjekte (siehe Folie 215) ist das folgende Spiel: Auf einer leeren Spielfläche bewegen sich zwei Bälle. Der blaue Ball spielt die Rolle der Maus, die von dem roten Ball, der die Rolle der Katze spielt, gejagt wird. Die Maus wird dabei vom Benutzer mit den Pfeiltasten gesteuert, die Katze wird vom Rechner gespielt.
blatt4/KatzUndMaus
- a)
-
Geben Sie für die beiden Aufrufe
ball1.moveSpielBall(); ball2.moveSpielBall();
aus der Klasse KatzUndMaus jeweils die Aufrufkette an. Eine Aufrufkette ist eine Folge von Methodenaufrufen, die von einem Aufruf ausgelöst werden. In unserem Fall betrachten wir nur Methoden aus den 6 Klassen unserer Anwendung und keine Bibliotheksklassen. - b)
-
Die vorliegende Ausprägung des Delegations-Schemas von
Folie 215 sieht wie folgt aus:
Zeigen Sie, dass sich dieses Schema auch für dynamisch wechselnde Rollen eignet. Nachdem die Katze die Maus vollständig gefressen hat (d.h. die beiden Bälle haben die gleiche Position) sollen die Rollen getauscht werden. Der Spielball mit der Katzenrolle wird zur Maus und umgekehrt. Die so mutierten Bälle kehren zu ihrer Anfangsposition zurück und das Spiel beginnt mit der neuen Rollenverteilung von vorne.
Aufgabe 3 (Spezialisierung)
Wir betrachten eine Spezialisierung der Bibliotheksklasse TreeMap:
import java.util.TreeMap; public class WordCount extends TreeMap<String, Integer> { public void countMe(String s) { // ergänzen } public void stat() { System.out.print(size() + " distinct words: "); System.out.println(this); } public static void main(String[] args) { WordCount wl = new WordCount(); for (String a : args) { wl.countMe(a.toUpperCase()); } wl.stat(); } }WordCount erhält eine Folge von Strings auf der Kommandozeile und soll zählen, wie viele verschiedene Wörter wie oft vorkommen.
Beispiel:
java WordCount To be or not to beliefert
4 distinct words: {BE=2, NOT=1, OR=1, TO=2}
- a)
- Ergänzen Sie die fehlende Methode countMe entsprechend.
- b)
- "Has-a statt Is-a": Transformieren Sie das Erben von TreeMap in eine TreeMap-Komponente in WordCount.
Generiert mit Camelot | Probleme mit Camelot? | Geändert am: 09.12.2013