Objektorientierte Programmierung
LVA 185.162, VL 2.0, 2006 W
8. Übungsaufgabe
Themen:
Verstehen homogener Übersetzung von Generizität, dynamische Typvergleiche, Typumwandlungen
Termine:
| Ausgabe: |
14.12.2006 |
| reguläre Abgabe: |
11.01.2007, 12:45 Uhr |
| nachträgliche Abgabe: |
18.01.2007, 12:45 Uhr |
Abgabeverzeichnis:
Aufgabe8
Programmaufruf:
java Test
Grundlage:
Skriptum bis Seite 126.
Aufgabe
Welche Aufgabe zu lösen ist:
Ändern Sie die Lösung der
7. Übungsaufgabe so ab, dass Sie ohne Verwendung
von Generizität auskommen. Verwenden Sie Ihre generische Lösung als
Ausgangspunkt, und führen Sie die homogene Übersetzung in Java-Code ohne
Generizität händisch durch - wie im Skriptum bis Seite 126 beschrieben.
Nehmen Sie dabei keine inhaltlichen Änderungen am Programm vor. Falls Sie
Aufgabe 7 nicht gelöst haben, lösen Sie die Aufgabe am besten direkt
(ohne Verwendung von Generizität) indem Sie Generizität (wie im Skriptum
kurz beschrieben) simulieren. Das Ergebnis sollte annähernd dasselbe sein.
Erweitern Sie danach Person
(und die Unterklassen davon) um folgende
Vergleichsmethode: Die Methode spezifischKleiner
mit einer Instanz von
Person
als Argument soll den impliziten Parameter this
mit dem
expliziten Parameter vergleichen. Werden dabei zwei Instanzen von
StudentIn
(oder Untertypen davon) verglichen, soll die Methode genau
dann true
liefern, wenn this
eine kleinere Matrikelnummer als der
explizite Parameter hat. Ein Vergleich von zwei Instanzen von
AngestellteR
(oder Untertypen davon) soll true
liefern, wenn this
eine kleinere Sozialversicherungsnummer als der Parameter hat. Die
Methode soll true
liefern wenn this
vom Typ StudentIn
(oder einem
Untertyp davon) und der Parameter vom Typ AngestellteR
(oder einem
Untertyp davon) ist, und false
im umgekehrten Fall. Die Lösung soll
auch noch funktionieren, wenn weitere Unterklassen von Person
(und
dessen Unterklassen) dazu kommen, wobei Vergleiche in allen anderen als
den oben genannten Fällen immer false
liefern sollen.
Erweitern Sie die Klasse Test
aus der 7. Übungsaufgabe um geeignete
Testfälle zur Überprüfung der neuen Funktionalität.
Wie die Aufgabe zu lösen ist:
Führen Sie den ersten Schritt der Aufgabe tatsächlich so wie im Skriptum
beschrieben durch, ähnlich wie es ein Java-Compiler machen würde. Eine
intuitive Lösung stimmt damit oft nicht überein. Achten Sie besonders
darauf, mit welchen Typen Sie formale Parameter deklarieren (damit keine
statische Typinformation verloren geht), sowie auf das gewünschte
Verhalten von
spezifischKleiner
auch im Falle des Hinzufügens neuer
Klassen.
Hinweise zur Beurteilung:
Der Schwerpunkt bei der Beurteilung liegt auf der richtigen Übersetzung
von Generizität sowie der vernünftigen Verwendung von dynamischer und
statischer Typinformation (Typvergleiche und Typumwandlungen). Kräftige
Punkteabzüge gibt es für
- die Verwendung von Generizität (auch in Testklassen),
- den unnötigen Verlust an statischer Typsicherheit (abgesehen vom
Verlust an statischer Typsicherheit durch fehlende Generizität),
- nicht verallgemeinerbare Erweiterungen (das heißt, das Programm
funktioniert nur, wenn keine weiteren Klassen hinzukommen),
- und mangelhafte Funktionalität des Programms.
Punkteabzüge gibt es wie üblich auch für unnötigen (oder unnötig komplexen)
Code, mangelhafte Zusicherungen, inkorrekte Untertypbeziehungen, schlechte
Verwendung von Sichtbarkeit und starke Objektkopplung. Für Fehler, für die
Ihnen bereits für Ihre Lösung der
7. Aufgabe Punkte abgezogen wurden, werden
Ihnen in der Regel nicht nocheinmal Punkte abgezogen. In folgenden Fällen
werden Ihnen aber trotzdem nocheinmal Punkte abgezogen:
- fehlende Zusicherungen,
- fehlende Funktionalität (das heißt, Ihre Lösung war unvollständig),
- und alle Arten von Fehlern, die in neuen Codeteilen auftreten (auch wenn
Ihnen für Fehler derselben Art im alten Code Punkte abgezogen wurden).
Was im Hinblick auf die Abgabe zu beachten ist:
Schreiben Sie Ihre Lösung in den bereits existierenden Ordner
Aufgabe8
in Ihrem Verzeichnis auf dem Übungsrechner b3. Das Programm soll von
diesem Ordner aus durch
java Test
aufrufbar sein. Schreiben Sie wenn
möglich nicht mehr als eine Klasse in jede Datei. Der Ordner soll zum
Zeitpunkt der Abgabe (11.1.2007, 12:45 Uhr) und der nachträglichen
Abgabe (18.1.2007, 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
Aufgabe8
.