Objektorientierte Programmierung
LVA 185.162, VL 2.0, 2006 W
| Ausgabe: | 07.12.2006 |
| reguläre Abgabe: | 14.12.2006, 12:45 Uhr |
| nachträgliche Abgabe: | 21.12.2006, 12:45 Uhr |
SortGraphentspricht im Wesentlichen
GenGraphaus Aufgabe 6. Die Namen der Knoten von
SortGraphmüssen jedoch sortierbar sein. Objekte werden als sortierbar betrachtet, wenn sie eine Methode
kleinermit einem Argument unterstützen; diese Methode soll genau dann
trueliefern, wenn das Objekt, in dem die Methode aufgerufen wird, (auf nicht genau spezifizierte Weise) kleiner ist als das Argument. Es kann davon ausgegangen werden, dass durch
kleinereine transitive, antireflexive und antisymmetrische Relation beschrieben wird; das heißt, wenn
x.kleiner(y) && y.kleiner(z)als Ergebnis
trueergibt, dann so auch
x.kleiner(z); weiters darf
x.kleiner(x)niemals
truezurückgeben, und wenn
x.kleiner(y)als Ergebnis
truehat, dann muss
y.kleiner(x)immer
falseergeben. Neben den Methoden von
GenGraphwerden in
SortGraphMethoden für folgende Aufgaben benötigt:
GenGraph). Dabei gilt jedoch die Einschränkung, dass x vor y geliefert werden muss, wenn
x.kleiner(y)als Ergebnis
trueergibt. Diese Methode soll die entsprechende Methode von
GenGraphersetzen.
kleiner) nicht kleiner sind als ein als Argument gegebener Name; dabei werden auch alle Kanten zu oder von einem gelöschten Knoten gelöscht. Es bleiben also nur Knoten übrig, die kleiner sind als das gegebene Argument.
Personstellt (ähnlich wie in Aufgabe 6) die wichtigsten Daten zu einer Person bereit. Es soll möglich sein, den Nachnamen und das Geburtsjahr der Person jederzeit über Methoden abzufragen und zu verändern. Anders als in Aufgabe 6 soll auch eine Methode
kleinermit oben beschriebenen Eigenschaften vorhanden sein, die Personen nach ihrem Geburtsjahr vergleicht.
Personkann abstrakt sein.
StudentInsoll ein Untertyp von
Personsein und Methoden zum Abfragen und Verändern der (siebenstelligen) Matrikelnummer unterstützen.
AngestellteRsoll ein Untertyp von
Personsein und Methoden zum Abfragen und Verändern der (zehnstelligen) Sozialversicherungsnummer unterstützen.
Testsoll wie üblich zum nicht-interaktiven Testen der Lösung dienen. Anders als in vorangegangenen Aufgaben sind die durchzuführenden Überprüfungen vorgegeben. Führen Sie folgende Aufgaben in der gegebenen Reihenfolge durch und geben Sie die Ergebnisse in allgemein verständlicher Form über die Standardausgabe aus:
SortGraph, wobei Knotennamen vom Typ
StudentInund Kantennamen vom Typ
AngestellteRsind, und fügen Sie mehrere Knoten und Kanten ein. Es sollen auch Kanten desselben Namens zwischen unterschiedlichen Knoten vorkommen.
SortGraph). Wählen Sie den Graphen und die Person so, dass dabei einige Knoten und Kanten entfernt werden und einige (auch mehrere Kanten desselben Namens) übrig bleiben. Geben Sie den verbliebenen Graphen wie in Punkt 2 aus.
SortGraph, wobei Knotennamen vom Typ
Personund Kantennamen beliebig sind (werden nicht gebraucht). Lesen Sie die Namen aller Knoten und Kanten aus dem in Punkt 4 veränderten Graphen aus und fügen Sie diese als Namen von Knoten in den neuen Graphen ein; auch aus Kantennamen werden dabei Knotennamen. Geben Sie die Namen der Knoten des neuen Graphen aus - wie in Punkt 2 nur die Nachnamen der Personen.
kleiner.
raw typesbzw.
type erasures. Die Aufgabenstellung ist durch Verwendung von Wildcards als Typen vermutlich einfacher zu lösen als ohne. Schreiben Sie keinen unnötigen Code, und achten Sie wie üblich auf Ersetzbarkeit, saubere Zusicherungen, richtige Sichtbarkeit und schwache Objektkopplung. Bitte verzichten Sie auf die Verwendung von Paketen sowie von
instanceof,
getClassund Typumwandlungen (type casts). Die vorgegebenen Testfälle werden ihnen dabei helfen, die häufigsten Fehler in der Lösung dieser Aufgabe selbst zu finden, wenn Sie Warnungen des Compilers ernst nehmen. Achtung: Es gibt anscheinend häufig verwendete Java-Compiler (vor allem unter Eclipse), die nicht alle Fehler im Zusammenhang mit Generizität richtig erkennen. Testen Sie Ihre Lösung daher bitte rechtzeitig auf der b3.
raw typesbzw.
type erasures, ebenso wie für Verwendungen von
instanceof,
getClassund Typumwandlungen, die dazu dienen, Probleme beim Umgang mit Generizität zu verschleiern. Punkteabzüge gibt es, wie bereits üblich, auch für unnötigen (oder unnötig komplexen) Code, mangelhafte Zusicherungen, inkorrekte Untertypbeziehungen, schlechte Verwendung von Sichtbarkeit, starke Objektkopplung, sowie fehlende oder nicht der Aufgabenstellung entsprechende Funktionalität.
Aufgabe7in Ihrem Verzeichnis auf dem Übungsrechner b3. Das Programm soll von diesem Ordner aus durch
java Testaufrufbar sein. Schreiben Sie wenn möglich nicht mehr als eine Klasse in jede Datei. Der Ordner soll zum Zeitpunkt der Abgabe (14.12.2006, 12:45 Uhr) und der nachträglichen Abgabe (21.12.2006, 12:45 Uhr) 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. Vermeiden Sie die Verwendung von Ordnern innerhalb des Abgabeordners
Aufgabe7.