Kommentare zur Lösung der 3. Aufgabe von anonymen Übungsteilnehmern: Die Beurteilung der Lösung lautet: ---------------------------------- +100 Compilation erfolgreich - 36 AQuadrat extends ARechteck; wichtige Zusicherung verletzt - 3 unnötige public getter-Methoden - 0 Instanzvariablen mit Defaultsichtbarkeit Struktur der Lösung: -------------------- "ARechteck" erbt direkt von "Form", und "AQuadrat" erbt von "ARechteck". Methoden zum Setzen der Seitenlängen werden in "AQuadrat" überschrieben. Was an der Lösung positiv auffällt: ----------------------------------- Kommentare sind kurz und klar gehalten. Zusicherungen sagen ganz klar, was passiert, wenn Bedingungen auf den Seitenlängen verletzt sind; daraus folgt, dass diese Bedingungen als Nachbedingungen zu verstehen sind. Zusicherungen auf den Methoden zum Setzen der Seitenlängen in "ARechteck" sagen auch ganz klar, dass dabei nichts über die Länge der jeweils anderen Seite ausgesagt wird. Das kann man so interpretieren, dass sich beim Setzen einer Seitenlänge auch die andere Seitenlänge unverändern könnte. Es wird sehr ausführlich getestet. Was man anders machen könnte: ----------------------------- Das Hauptproblem dieser Lösung besteht darin, dass es unter bestimmten Bedingungen nicht möglich ist, in einem Rechteck gewünschte Seitenlängen zu setzen: Wenn man eine Instanz des deklarierten Typs "ARechteck" hat und die Länge einer Seite auf 4 und dann die einer anderen Seite auf 3 setzt, kann es sein, dass anschließend ein Rechteck mit zwei gleichen Seitenlängen 3 gezeichnet wird. Das ist genau dann der Fall, wenn der dynamische Typ "AQuadrat" ist, obwohl wir eine Instanz von "ARechteck" erwarten. Damit ist die in der Aufgabenstellung geforderte Möglichkeit, in einem Rechteck die beiden Seitenlängen unabhängig voneinander setzen zu können, verletzt. Der entsprechende Kommentar in der Beurteilung ist in diesem Fall leider nicht sehr aussagekräftig. Ein weiteres kleines Problem ist, dass nicht besonders auf die Sichtbarkeit von Variablen und Methoden geachtet wurde. Public getter-Methoden sind in diesem Fall gänzlich unnötig und führen höchstens zu höherer Objektkopplung. Protected (oder noch besser keine) getter-Methoden sind hier zu bevorzugen. Klein Punkteabzüge gibt es dafür, weil etwas entsprechendes bereits in einer früheren Vorlesung erwähnt wurde. Keine Punkteabzüge gibt es dagegen für die in diesem Fall nicht angebrachte Verwendung von Instanzvariablen mit Defaultsichtbarkeit, da Sichtbarkeit erst in einer späteren Vorlesung behandelt wurde.