Objektorientierte Programmierung
LVA 185.162, VL 2.0, 2008 W

4. Übungsaufgabe

Themen:

Untertypbeziehungen, Vererbung, Zusicherungen

Termine:

Ausgabe: 30.10.2008
reguläre Abgabe: 06.11.2008, 12:45 Uhr
nachträgliche Abgabe: 13.11.2008, 12:45 Uhr

Abgabeverzeichnis:

Gruppe/Aufgabe4

Programmaufruf:

java Test

Grundlage:

die ersten zwei Kapitel im Skriptum, Schwerpunkt auf Kapitel 2

Aufgabe

Welche Aufgabe zu lösen ist:

Folgendes Interface sei gegeben:
   public interface Box {
       // instances represent rectangular boxes
       //   consisting of printable characters
     void print();
       // writes several lines representing
       //   the box "this" to standard output
     void setSize(int width, int height);
       // 3 <= width <= 40; 3 <= height <= 10 (preconditions)
       // sets the size of the frame of the box
     void setFrameChar(char fc);
       // the frame of the box consists of fc
   }
Es werden mehrere unterschiedliche Klassen benötigt, die Untertypen von Box sein sollen:

Versehen Sie Ihre Klassen und Interfaces mit geeigneten Zusicherungen und stellen Sie sicher, dass Sie nur dort eine Vererbungsbeziehung verwenden, wo tatsächlich eine Untertypbeziehung (auch hinsichtlich der Zusicherungen) besteht. Zwischen je zwei Untertypen von Box soll eine Untertypbeziehung bestehen, wenn dies aufgrund der Schnittstellen und Zusicherungen möglich ist.

Schreiben Sie eine Klasse Test zum Testen Ihrer Untertypen von Box. Überprüfen Sie mittels Testfällen, ob dort, wo eine Vererbungsbeziehung besteht, die Ersetzbarkeit (bezüglich des Verhaltens) gegeben ist.

Wie die Aufgabe zu lösen ist:

Anzahl und Umfang der zur Lösung benötigten Klassen sind klein. Die Schwierigkeit liegt darin, alle Untertypbeziehungen zu finden und die Ersetzbarkeit auf geeignete Weise (auch durch Testfälle) sicherzustellen. Dieser Punkt ist wesentlich für die Beurteilung. Vererbungsbeziehungen, die nicht gleichzeitig auch Untertypbeziehungen sind, führen zu sehr hohen Punkteabzügen. Ebenso gibt es hohe Punkteabzüge für nicht wahrgenommene Gelegenheiten, Untertypbeziehungen zwischen den Untertypen von Box herzustellen.

Eine Grundlage für das Auffinden der Untertypbeziehungen sind gute Zusicherungen in Form von Kommentaren. Alle wesentlichen Zusicherungen kommen bereits in obigen Beschreibungen der benötigten Klassen vor. Sie brauchen die einzelnen Beschreibungsteile nur mehr den richtigen Zusicherungsarten in den entsprechenden Teilen der Klassen zuordnen. Untertypbeziehungen ergeben sich dann fast von selbst aus den erlaubten Beziehungen zwischen Zusicherungen in Unter- und Obertypen. Es hat sich als günstig erwiesen, alle Zusicherungen, die in einem Obertyp gelten, im Untertyp nochmals hinzuschreiben, da sie sonst leicht übersehen werden, was zu schwerwiegenden Fehlern führen kann.

Vergewissern Sie sich der Korrektheit der Untertypbeziehungen zusätzlich über geeignete Testfälle. Die Anzahl der Testfälle ist nicht entscheidend, wohl aber deren Qualität: Es kommt darauf an, dass die Testfälle mögliche Verletzungen der Ersetzbarkeit aufdecken können. Beispielsweise muss überprüft werden, ob print auch nach Ersetzungen und anderen Methodenaufrufen das ausgibt, was erwartet wird.

Zusicherungen in Testklassen werden aus praktischen Überlegungen bei der Beurteilung nicht berücksichtigt. Sorgen Sie aber bitte dafür, dass ein Aufruf von java Test einigermaßen nachvollziehbaren Output generiert.

Zur Lösung dieser Aufgabe müssen Sie Untertypbeziehungen und vor allem den Einfluss von Zusicherungen auf Untertypbeziehungen im Detail verstehen. Holen Sie sich entsprechende Informationen aus Kapitel 2 des Skriptums. Folgende zusätzlichen Informationen könnten hilfreich sein:

Nutzen Sie die für die Laborübung vorgesehene Zeit bis 6. November zur Lösung der aktuellen Aufgabe, und stellen Sie noch ausstehende Arbeiten an früheren Aufgaben vorübergehend ein. Am 6. November gibt es keine neue Aufgabe, und ab dann haben Sie eine Woche Zeit, ausstehende Arbeiten nachzuholen.

Allgemeine Hinweise zur Laborübung:

Erzeugen Sie keine Unterverzeichnisse im Abgabeverzeichnis Gruppe/Aufgabe4, stellen Sie alle .java-Dateien, die zur Lösung gehören, direkt in das Abgabeverzeichnis, und entfernen Sie alle .java-Dateien, die nicht zur Lösung gehören, aus dem Abgabeverzeichnis. Ihr Programm muss durch javac *.java compilierbar und durch java Test aufrufbar sein.

In Gruppe/Aufgabe4 finden Sie bereits die Datei Box.java mit dem vorgegebenen Interface. Bitte verändern Sie diese Datei nicht sinnändernd.

Es ergibt sich immer wieder das Problem, dass ein Gruppenmitglied eine Datei ohne Schreibrechte für die Gruppe in das Abgabeverzeichnis stellt und andere Gruppenmitglieder diese Datei nicht ohne weiteres ändern können. Das passiert oft unabsichtlich beim Übertragen von Dateien. Bitte denken Sie daran, und geben Sie Ihren Gruppenmitgliedern Lese- und Schreibrechte, z.B. durch einen Aufruf von chmod g+rw *. Nur der Besitzer der Dateien (in der Regel derjenige, der die Dateien angelegt hat) kann dieses Kommando erfolgreich ausführen. Falls Sie keine ausreichenden Rechte auf einer Datei haben, können Sie die Datei aufgrund Ihrer Rechte im Abgabeverzeichnis trotzdem entfernen oder (mit Leserechten) sogar ändern. Beispielsweise können Sie die Datei mittels mv Datei .. aus dem Abgabeverzeichnis hinausschieben und (mit Leserechten) mittels cp ../Datei . eine Kopie anlegen, die Sie selbst besitzen.

Generell sollten Sie Änderungen der Struktur der Abgabeverzeichnisse vermeiden, um die automatisierte Abgabe nicht zu behindern. Sie können aber in Gruppe (jedoch nicht in Gruppe/Aufgabe?, wobei ? für eine Ziffer steht) beliebig weitere Verzeichnisse anlegen und dort beispielsweise Backups oder andere Dateien, die nicht zur Abgabe gehören, ablegen.

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
            OOP
               Laborübung
               1. Aufgabe
               2. Aufgabe
               3. Aufgabe
               4. Aufgabe
                  Beurteilung
               5. Aufgabe
               6. Aufgabe
               7. Aufgabe
               8. Aufgabe
               9. Aufgabe
               Cacao
            Typsysteme
            Seminar
         LVAs 2008 S
         LVAs 2007 W
         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
Hinweise zur Beurteilung
vorige Aufgabe
nächste Aufgabe
Fakultät für Informatik
Technische Universität Wien
Anfang | HTML 4.01 | Datenschutzerklärung | letzte Änderung: 2008-10-30 (Puntigam)