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 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:

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.
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
         LVAs 2007 S
         LVAs 2006 W
            OOP
               Laborübung
               1. Aufgabe
               2. Aufgabe
               3. Aufgabe
               4. Aufgabe
               5. Aufgabe
               6. Aufgabe
               7. Aufgabe
               8. Aufgabe
            Typsysteme
            Seminar
         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
Fakultät für Informatik
Technische Universität Wien
Anfang | HTML 4.01 | Datenschutzerklärung | letzte Änderung: 2006-12-14 (Puntigam)