Einzelnen Beitrag anzeigen

OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#12

Re: Klasse Rechteck von Quadrat ableiten oder umgekehrt?

  Alt 4. Jun 2007, 11:33
Ein Quadrat ist ja nicht nur ein spezielles Rechteck, sondern auch eine spezielle Raute. Eine Raute ist jedoch kein Rechteck. Ergo kann ein Quadrat kein Rechteck sein.

Mal ernsthaft, es ist eine Definitionsfrage, was richtig ist. Einerseits stimmt es, ein Quadrat ist vollständig definiert mit einer Seitenlänge, während ein Rechteck zwei Seitenlängen benötigt. Ein Quadrat hat aber trotzdem zwei Seitenlängen, die sind nur gleich. Wenn ich ein Rechteck mache mit 5cm vertikaler und 5cm horizontaler Seitenlänge, dann ist es ein Quadrat.

Vererbung ist eine "ist-ein"-Beziehung. JEDES Quadrat ist ein Rechteck. Quadrat von Rechteck abzuleiten ist also nach den OO-Prinzipien sauber. Auch finde ich es blödsinnig, mathematisch minimalistisch zu denken. Klar kann man die Fläche eines Quadrats durch Quadrieren der Seitenlänge und den Umfang durch Vervierfachen derselben berechnen - aber man kann genauso die zwei Seitenlängen multiplizieren oder jeweils das Doppelte der beiden Seitenlängen addieren. Der springende Punkt dabei ist der, dass all diese Berechnungen in der Klasse Quadrat nicht implementiert werden müssen, wenn man Quadrat von Rechteck ableitet, weil sie in Rechteck schon definiert sind und ihre Funktionsweise identisch ist, trotz möglicher Vereinfachungen der zugrundeliegenden Mathematik. Wer ernsthaft Quadrat und Rechteck nebeneinander implementiert, endet also mit doppeltem Code. Genau das, was objektorienterte Programmierung vermeiden soll. Ob man da nun über Vererbung hingelangt oder über Constraints, die auch nichts anderes machen, als eine Spezialisierung über bestimmte Bedingungen herzustellen, bleibt sich ziemlich gleich. Je nach Sprache kommt das sogar auf exakt dasselbe raus.

Insofern stimme ich ulrich.b zu und gebe den Professoren eine glatte 5,0 für das Vergessen der Gründe, wofür objektorientierte Programmierung überhaupt existiert (nicht damit man philosophische Fragen klären kann). Wenn überhaupt wäre in meinen Augen der einzige korrekte Grund, Quadrat nicht von Rechteck abzuleiten, der, den ich im ersten Absatz beschrieben habe. Aber den haben die Professoren wohl vergessen. Übrigens dürfte man nach deren Meinung auch nicht von Viereck ableiten. Viereck ist ja immerhin definiert über vier Punkte, oder über vier Seitenlängen und Winkel. Die hat Rechteck oder Quadrat ja auch, obwohl nur ein Teil davon notwendig ist.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat