Objektorientierte Programmierung
LVA 185.162, VL 2.0, 2007 W

3. Übungsaufgabe

Themen:

Untertypbeziehungen und Verhalten, Zusicherungen

Termine:

Ausgabe: 25.10.2007
reguläre Abgabe: 08.11.2007, 12:45 Uhr
nachträgliche Abgabe: 19.11.2007, 12:45 Uhr

Abgabeverzeichnis:

Aufgabe3

Programmaufruf:

java Test

Grundlage:

Skriptum bis Seite 68 sowie die Seiten 86, 87, 88.

Aufgabe

Welche Aufgabe zu lösen ist:

Folgendes Interface sei gegeben:
    public interface Separator {
        void print();
        // writes several lines to standard output,
        // separates previous from following output
    }
Ein Aufruf von print gibt Text aus, der den davor stehenden Textteil vom nachfolgenden Textteil trennt. Es werden mehrere konkrete Unterklassen von Separator benötigt, die unterschiedliche Varianten der Texttrennung implementieren:

Ein Aufruf von java Test soll diese Klassen und vor allem Untertypbeziehungen zwischen entsprechenden Typen (nicht interaktiv) testen. Berücksichtigen Sie dabei auch die wichtigsten Grenzfälle. Die Ausgabe des Testprogramms soll auch für jemanden, der das Programm nicht geschrieben hat, verständlich sein.

Wie die Aufgabe zu lösen ist:

Ziel der Aufgabe ist das Verstehen von Untertypbeziehungen (Skriptum bis Seite 68) auf Basis des Ersetzbarkeitsprinzips. Versehen Sie alle Klassen und Methoden mit Zusicherungen in Form von Kommentaren. Diese Kommentare sollen den obigen Beschreibungen entsprechen. Überlegen Sie sich genau, zwischen welchen Klassen (entsprechend den Zusicherungen und dem Ersetzbarkeitsprinzip) eine Untertypbeziehung besteht. Verwenden Sie Vererbung (implements- bzw. extends-Klauseln) genau dort wo eine Untertypbeziehung besteht. Sinngemäß gilt das auch für abstrakte Klassen und Interfaces, die Sie zur Verbesserung der Programmstruktur zusätzlich einführen. Achten Sie darauf, dass Ihre Testfälle auch die Ersetzbarkeit (falls gegeben) überprüfen.

Beachten Sie, dass keine Ersetzbarkeit gegeben ist, wenn Zusicherungen einen möglichen Objektzustand beschreiben, in dem die Ersetzbarkeit nicht gilt. Bei der Objekterzeugung selbst (= Aufruf eines Konstruktors) brauchen wir keine Ersetzbarkeit. Es ist also möglich, dass Konstruktoren einer Unterklasse (die einen Untertyp darstellt) nur bestimmte Konstruktoren der Oberklasse mit Einschränkungen auf Argumentwerten aufruft, ohne dadurch die Ersetzbarkeit zu verletzen.

Zwischen der Ausgabe dieser Aufgabenstellung und der regulären Abgabe liegen zwei Wochen. Die erste der beiden Wochen ist noch für Arbeiten an der zweiten Aufgabe vorgesehen. Bitte unterbrechen Sie die Arbeiten an der zweiten Aufgabe nach Allerheiligen und konzentrieren Sie sich ganz auf die Lösung dieser (dritten) Aufgabe.

Hinweise zur Beurteilung:

Für die Verwendung von Vererbung (extends bzw. implements) zwischen Klassen bzw. Interfaces, zwischen denen keine Untertypbeziehung besteht, sowie für die Nichtverwendung von Vererbung wo eine Untertypbeziehung besteht, gibt es sehr kräftige Punkteabzüge. Auch für fehlende, widersprüchliche, oder nicht dieser Aufgabenstellung entsprechende Zusicherungen gibt es kräftige Punkteabzüge. Dagegen spielt in dieser Aufgabe die direkte Codewiederverwendung durch Vererbung für die Beurteilung keine Rolle. In Klassen, die ausschließlich zum Testen Verwendung finden, werden Zusicherungen und Untertypbeziehungen nicht beurteilt.

Betreuung durch TutorIn:

Diese und alle folgenden Aufgaben sind von ihnen selbst zu lösen. Ihre Tutorin bzw. Ihr Tutor wird Fragen zur Aufgabe natürlich trotzdem gerne beantworten. Die genaue Struktur der Lösung betreffende Fragen (z.B. Stimmt diese Lösung? oder Ist Y ein Untertyp von X? oder Wie schaut die richtige Lösung aus?) werden die TutorInnen aber nur ausweichend (mit einem Hinweis auf das Skriptum oder eine allgemeine Erklärung des Ersetzbarkeitsprinzips) beantworten.

Was im Hinblick auf die Abgabe zu beachten ist:

Schreiben Sie Ihre Lösung in das bereits existierende Verzeichnis Gruppe/Aufgabe3. Das Programm soll von diesem Verzeichnis aus durch java Test aufrufbar sein. Schreiben Sie 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/Aufgabe3. Stellen Sie sicher, dass ein Aufruf von javac *.java in Gruppe/Aufgabe3 keine Fehlermeldungen liefert, da Lösungen mit Syntaxfehlern in der Regel nicht beurteilt werden.
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-10-25 (Puntigam)