Objektorientierte Programmierung
LVA 185.162, VL 2.0, 2006 W

3. Übungsaufgabe

Themen:

Untertypbeziehungen und Verhalten, Zusicherungen

Termine:

Ausgabe: 09.11.2006
reguläre Abgabe: 16.11.2006, 12:45 Uhr
nachträgliche Abgabe: 23.11.2006, 12:45 Uhr

Abgabeverzeichnis:

Aufgabe3

Programmaufruf:

java Test

Grundlage:

Skriptum bis Seite 70.

Aufgabe

Welche Aufgabe zu lösen ist:

Folgende abstrakte Klasse sei gegeben:
    public abstract class Form {
        public abstract void zeichne();
            // zeichnet eine Form
    }
Entwickeln Sie konkrete Unterklassen ARechteck und AQuadrat von Form, wobei zeichne die Umrisse des entsprechenden Rechtecks bzw. Quadrats als einfache ASCII-Grafik über die Standard-Ausgabe ausgibt: Ecken werden durch + dargestellt, waagrechte Linien durch - und senkrechte Linien durch |. Die durch diese Umrisse eingeschlossenen Leerzeichen bilden die eigentliche Form. Zum Beispiel soll ein Quadrat mit der Seitenlänge 1 folgendermaßen gezeichnet werden:
    +-+
    | |
    +-+
Es zählt also die Anzahl der - oben und unten sowie der | links und rechts. Das Quadrat oder Rechteck wird in der Regel verzerrt aussehen; das ist so beabsichtigt. Jede Seite eines Rechtecks oder Quadrats hat eine ganzzahlige Länge von mindestens 1 und höchstens 10.

Es soll möglich sein, die Längen der beiden Seiten (für Instanzen von AQuadrat nur gemeinsam, für Instanzen von ARechteck getrennt voneinander) jederzeit von außen zu ändern. Aufrufe entsprechender Methoden dürfen nicht zur Ausgabe von Fehlermeldungen oder zur Auslösung von Exceptions führen, falls die Seitenlängen zwischen 1 und 10 liegen. Änderungen der Seitenlängen werden beim nächsten Aufruf von zeichne wirksam.

Schreiben Sie ein einfaches, nicht interaktives Programm (das heißt, das Programm darf keine Benutzereingaben verlangen) zum Testen Ihrer Lösung. Die Tests sollen auch die wichtigsten Grenzfälle berücksichtigen. 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 70). Überlegen Sie also genau, ob ARechteck ein Untertyp von AQuadrat oder AQuadrat ein Untertyp von ARechteck ist, oder ob überhaupt keine Untertypbeziehung zwischen diesen beiden Typen besteht. Überlegen Sie auch, ob zwischen Form und ARechteck beziehungsweise AQuadrat weitere abstrakte oder konkrete Klassen stehen sollen. Wenn ja, schreiben Sie diese. Verwenden Sie Vererbung (extends-Klausel) genau dort wo eine Untertypbeziehung besteht. Versehen Sie Klassen und Methoden mit Zusicherungen in Form von Kommentaren. Achten Sie darauf, dass Ihr Testprogramm auch die Ersetzbarkeit (falls gegeben) überprüft.

Hinweise zur Beurteilung:

Für Vererbungsbeziehungen, die keine Untertypbeziehungen sind, sowie für vergessene Untertypbeziehungen (das ist, es wird keine Vererbung verwendet obwohl Untertypbeziehungen angebracht wären) gibt es sehr kräftige Punkteabzüge. Auch für fehlende oder widersprüchliche Zusicherungen (das heißt, die für die Verwendung der Methoden und öffentlich zugreifbaren Variablen nötigen Informationen sind nicht in Form von Kommentaren angegeben oder die Kommentare widersprechen sich) gibt es kräftige Punkteabzüge. Dagegen spielt die direkte Codewiederverwendung durch Vererbung für diese Aufgabe nur eine untergeordnete Rolle; für eine nicht wahrgenommene Gelegenheit zur direkten Vererbung von Code werden höchstens ganz wenige Punkte abgezogen.

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 den bereits existierenden Ordner Aufgabe3 in Ihrem Verzeichnis auf dem Übungsrechner b3. Das Programm soll von diesem Ordner aus durch java Test aufrufbar sein. Schreiben Sie nicht mehr als eine Klasse in jede Datei. Der Ordner soll zum Zeitpunkt der Abgabe (16.11.2006, 12:45 Uhr) und der nachträglichen Abgabe (23.11.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 Aufgabe3.
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
nächste Aufgabe
Fakultät für Informatik
Technische Universität Wien
Anfang | HTML 4.01 | Datenschutzerklärung | letzte Änderung: 2006-11-09 (Puntigam)