Kommentare zur Lösung der 3. Aufgabe von Hubert Hausegger, Michael Schoener und Herbert Moser: Die Beurteilung der Lösung lautet: ---------------------------------- +100 Compilation erfolgreich + 0 sehr gute Lösung Struktur der Lösung: -------------------- Die abstrakte Klasse "AViereck" ist Untertyp der vorgegebenen Klasse "Form" und stellt den beiden Unterklassen "ARechteck" und "AQuadrat" zwei protected Methoden zur Verfügung - eine zum Zeichnen eines Vierecks (mit zwei Argumenten für Länge und Breite) und eine zum Überprüfen, ob Seitenlängen im erlaubten Bereich liegen; wenn nicht, wird eine Exception geworfen. Sowohl "ARechteck" als auch "AQuadrat" (stehen in keiner Untertyp- bzw. Vererbungsbeziehung zueinander) implementieren "zeichne", rufen dabei aber nur die in "AViereck" implementierte Methode auf; Seitenlängen bleiben privat. Zum setzen der Seitenlängen gibt es in "ARechteck" und "AQuadrat" unterschiedliche Methoden, die zur Überprüfung eine Methode von "AViereck" aufrufen. Bezüglich der Untertypbeziehungen siehe Posting in den TUWIS++News. Was an der Lösung positiv auffällt: ----------------------------------- Kommentare sind kurz und klar gehalten. Obwohl der eigentliche Zweck von "AViereck" wahrscheinlich darin besteht, gemeinsamen Code für "ARechteck" und "AQuadrat" bereitzustellen (Vererbung im Vordergrund), ist aus den wenigen Kommentaren eindeutig erkennbar, dass auch auf Subtyping geachtet wurde. Zusicherungen sagen ganz klar, was passiert, wenn Bedingungen auf den Seitenlängen verletzt sind; daraus folgt, dass diese Bedingungen als Nachbedingungen zu verstehen sind. Obwohl insgesamt keine sehr große Zahl an Test durchgeführt wird, gibt sowohl positive als auch negative Testfälle. Es gibt sogar einen Testfall, der über "AViereck" die Ersetzbarkeit prüft. Insgesamt ist der Code recht kurz und klar. Was man anders machen könnte: ----------------------------- Die Lösung dieser Aufgabe wurde vermutlich eher vom Standpunkt der direkten Codevererbung geleitet als durch Untertypbeziehungen. Da trotzdem sehr genau auf korrekte Untertypbeziehungen geachtet wurde, ist daran nichts auszusetzen. Es wäre auch möglich gewesen, in "AViereck" Variablen für die Länge und Breite eines Vierecks vorzusehen und die geforderte Methode "zeichne" direkt in "AViereck" zu implementieren (ohne eine einzige entsprechende Codezeile in "ARechteck" und "AQuadrat"). Die Zusicherungen auf "zeichne" kann man ja problemlos so gestalten, dass sie für das Zeichnen von Rechtecken und Quadraten geeignet sind. In diesem Fall hätte es gereicht, in "ARechteck" und "AQuadrat" die Seitenlängen (auf unterschiedliche Weise) zu setzen. Eine solche Lösung wäre noch um eine Spur einfacher gewesen.