Objektorientierte Programmierung
LVA 185.162, VL 2.0, 2007 W

5. Übungsaufgabe

Themen:

Generizität und Iteratoren

Termine:

Ausgabe: 22.11.2007
reguläre Abgabe: 29.11.2007, 12:45 Uhr
nachträgliche Abgabe: 06.12.2007, 12:45 Uhr

Abgabeverzeichnis:

Aufgabe5

Programmaufruf:

java Test

Grundlage:

Skriptum bis Seite 97 und die Seiten 103 bis 107.

Aufgabe

Welche Aufgabe zu lösen ist:

Entwickeln Sie Java-Klassen entsprechend folgender Beschreibungen:

Jede Instanz der Klasse Tree soll einen Baum (Datenstruktur) mit eindeutig bestimmter Wurzel darstellen. Von jedem Knoten im Baum können beliebig viele Kanten ausgehen. Sowohl Knoten als auch Kanten tragen Bezeichnungen. Über Typparameter ist für Knoten und Kanten getrennt voneinander festlegbar, welche Typen die Bezeichnungen haben. Die Bezeichnungen brauchen nicht eindeutig zu sein, das heißt, es kann mehrere Knoten bzw. Kanten mit derselben Bezeichnung geben. Jeder Baum enthält mindestens einen Knoten (den Wurzelknoten), der im Konstruktor festgelegt wird. Methoden für folgende Aufgaben werden benötigt:

Außer diesen Methoden soll es keinerlei Möglichkeit geben, auf interne Details von Bäumen oder Teilbäumen zuzugreifen, auch nicht von Unterklassen aus oder zu Testzwecken.

Die Klasse ISTree soll ein Untertyp von Tree sein, wobei Bezeichnungen von Kanten vom Typ String und Bezeichnungen von Knoten vom Typ Integer sind. Neben den Methoden von Tree soll eine Methode unterstützt werden, die als Ergebnis die Summe (vom Typ int) der Bezeichnungen aller Knoten zurückgibt, auf die eine Kante mit einer als Argument gegebenen Bezeichnung zeigt. Zwei Instanzen x und y von String werden als gleich betrachtet, wenn x.equals(y) als Ergebnis true liefert. Iteratoren über Knotenbezeichnungen liefern Instanzen von Tree als Teilbäume, nicht von ISTree.

CTree soll Tree um eine Methode connected (mit zwei Argumenten vom Typ der Bezeichnungen von Knoten) erweitern, die als Ergebnis true liefert, wenn es im Baum zwei verschiedene Knoten A und B mit folgenden Eigenschaften gibt, sonst false:

Teilbäume von Instanzen von CTree sind stets vom Typ Tree und unterstützen connected nicht.

Die Klasse Test soll die wichtigsten Normal- und Grenzfälle (nicht interaktiv) überprüfen und die Ergebnisse in allgemein verständlicher Form in der Standardausgabe darstellen. Unter anderem soll Test eine generische Methode copy bereitstellen, die von einem beliebigen Baum (vom Typ Tree, kann tatsächlich auch von einem Untertyp davon sein, wobei Typen von Knoten- und Kantenbezeichnungen durch Typparameter festgelegt sind) eine Kopie erstellt. Das Ergebnis ist jedenfalls vom Typ Tree (und kein Untertyp davon). Zur Analyse des zu kopierenden Baums und zum Aufbau des neuen Baums sollen ausschließlich die oben beschriebenen Methoden von Tree verwendet werden; die Verwendung von clone ist verboten. Auch copy ist zu testen.

Wie die Aufgabe zu lösen ist:

Achten Sie auf einen sinnvollen Umgang mit Generizität und Iteratoren. Vermeiden Sie die Verwendung von gebundener Generizität (noch nicht gelernt). Verwenden Sie keine vorgefertigten Container (wie List, Set, Vector, etc.) sondern schreiben Sie entsprechende Klassen selbst. Verwenden Sie auch keine vorgefertigten Iteratoren (eventuell abgesehen vom Interface Iterator) sondern schreiben Sie diese selbst. Vermeiden Sie unnötigen Code; insbesondere soll Funktionalität, die in einer Oberklasse bereits (in ähnlicher Form) vorhanden ist, in der Unterklasse nicht nochmals implementiert werden. Schreiben Sie alle nötigen Zusicherungen. Vermeiden Sie Kommentare, die keine Zusicherungen darstellen, sowie unklare Zusicherungen. Achten Sie auf die Sichtbarkeit, wobei angenommen wird, dass alle in der Aufgabenstellung angeführten Methoden von außen zugegreifbar sein sollen. Benennen Sie Ihre Klassen so, wie sie in der Aufgabenstellung heißen. Überlegen Sie, ob und wie Sie geschachtelte Klassen in dieser Aufgabe einsetzen können. Vermeiden Sie die Verwendung von Paketen.

Hinweise zur Beurteilung:

Der Schwerpunkt bei der Beurteilung liegt auf Generizität und Iteratoren (so weit wie in der Vorlesung bereits behandelt). Starke Punkteabzüge gibt es für vermeidbare Warnungen des Compilers, die mit (der falschen Verwendung von) Generizität in Zusammenhang stehen, vor allem für die Verwendung von raw types bzw. type erasures. Entsprechende Warnungen haben ihre Ursache hauptsächlich in vergessenen Typangaben bei Verwendung generischer Typen. Punkteabzüge gibt es auch für unnötigen (oder unnötig komplexen) Code, mangelhafte Zusicherungen, inkorrekte Untertypbeziehungen, schlechte Verwendung von Sichtbarkeit, sowie fehlende oder nicht der Aufgabenstellung entsprechende Funktionalität.

Was im Hinblick auf die Abgabe zu beachten ist:

Schreiben Sie Ihre Lösung in das bereits existierende Verzeichnis Gruppe/Aufgabe5. Das Programm soll von diesem Verzeichnis aus durch java Test aufrufbar sein. Schreiben Sie (abgesehen von geschachtelten Klassen) nicht mehr als eine Klasse in jede Datei. Das Verzeichnis soll zu den Abgabezeitpunkten alle .java-Dateien enthalten, die Sie für Ihre Lösung benötigen. Bitte entfernen Sie alle .java-Dateien, die nicht zur Abgabe gehören. Dateien mit anderen Endungen werden bei der Beurteilung nicht berücksichtigt. Verzichten Sie auf die Verwendung von Verzeichnissen innerhalb von Gruppe/Aufgabe5. Stellen Sie sicher, dass ein Aufruf von javac *.java in Gruppe/Aufgabe5 keine Fehlermeldungen und keine Warnungen, die mit Generizität in Zusammenhang stehen, liefert.
Complang
Puntigam
   Kontakt
   Research
   Lehre
      OOP
      Typsysteme
      EP2
      FOOP
      Prog.spr.
      frühere Lehre
         LVAs 2017 W
         LVAs 2017 S
         LVAs 2016 W
         LVAs 2016 S
         LVAs 2015 W
         LVAs 2015 S
         LVAs 2014 W
         LVAs 2014 S
         LVAs 2013 W
         LVAs 2013 S
         LVAs 2012 W
         LVAs 2012 S
         LVAs 2011 W
         LVAs 2011 S
         LVAs 2010 W
         LVAs 2010 S
         LVAs 2009 W
         LVAs 2009 S
         LVAs 2008 W
         LVAs 2008 S
         LVAs 2007 W
            OOP
               Laborübung
               1. Aufgabe
               2. Aufgabe
               3. Aufgabe
               4. Aufgabe
               5. Aufgabe
               6. Aufgabe
               7. Aufgabe
               8. Aufgabe
            Typsysteme
            Seminar
         LVAs 2007 S
         LVAs 2006 W
         LVAs 2006 S
         LVAs 2005 W
         LVAs 2005 S
         LVAs 2004 W
         LVAs 2004 S
         LVAs 2003 W
   Links
Sitemap
Kontakt
Schnellzugriff:
Laborübung
Tutoren
Skriptum
Folien
Aufgaben
vorige Aufgabe
nächste Aufgabe
Fakultät für Informatik
Technische Universität Wien
Anfang | HTML 4.01 | Datenschutzerklärung | letzte Änderung: 2007-11-22 (Puntigam)