Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Klasse Rechteck von Quadrat ableiten oder umgekehrt? (https://www.delphipraxis.net/93308-klasse-rechteck-von-quadrat-ableiten-oder-umgekehrt.html)

Chris P 4. Jun 2007 08:56


Klasse Rechteck von Quadrat ableiten oder umgekehrt?
 
Hi Leute,

ich stehe vor folgender Aufgabe:

"Man hat zwei Klassen Quadrat und Rechteck zur Darstellung geometrischer Objekte.
Sollte man nun die Klasse Quadrat von der Klasse Rechteck ableiten? Oder umgekehrt? Warum?"

Also so viel erstmal zur Aufgabengabenstellung.

Ich habe mir gedacht, dass das Quadrat ja ein spezielles Rechteck ist mit der Eigenschaft das die Länge gleiche der Breite ist.

Man kann also sagen, dass die Klasse Rechteck eine Verallgemeinerung und die Klasse Quadrat eine Spezialisierung ist.


Ich würde dann sagen, dass Rechteck die Basisklasse ist und die Klasse Quadrat die Ableitung.


Was meint ihr dazu?

BenjaminH 4. Jun 2007 08:57

Re: Klasse Rechteck von Quadrat ableiten oder umgekehrt?
 
Zitat:

Zitat von Chris P
Ich habe mir gedacht, dass das Quadrat ja ein spezielles Rechteck ist mit der Eigenschaft das die Länge gleiche der Breite ist.

Man kann also sagen, dass die Klasse Rechteck eine Verallgemeinerung und die Klasse Quadrat eine Spezialisierung ist.


Ich würde dann sagen, dass Rechteck die Basisklasse ist und die Klasse Quadrat die Ableitung.


Was meint ihr dazu?

Richtig.
TQuadrat= class(TRechteck)

DeddyH 4. Jun 2007 09:01

Re: Klasse Rechteck von Quadrat ableiten oder umgekehrt?
 
Seh ich genauso.

Dezipaitor 4. Jun 2007 09:20

Re: Klasse Rechteck von Quadrat ableiten oder umgekehrt?
 
man sollte immer vom Allgemeinen ins Spezielle ableiten.

Also die Elternklassen sind allgemeiner gehalten, als die Kindklassen.

ulrich.b 4. Jun 2007 09:48

Re: Klasse Rechteck von Quadrat ableiten oder umgekehrt?
 
Echt witzig diese Frage. Vor einem Jahr bin ich vor derselben gestanden. Ich musste für mein Studium in Java genau dieses Problem lösen. Ich habe es in der Abgabe dann auch so gemacht wie ihr es vorgeschlagen habt, und es auch der Rest der Welt sieht (class Quadrat extends Rechteck).

Doch das Institut für "Computer Languages" an der TU Wien sieht das anders!!! Die reden davon, dass zwar eine Vererbungsbeziehung in die eine Richtung existiert (Quadrat => Rechteck) jedoch eine sg. "Reale-Welt Beziehung" in die andere (In der Mathematik ist ein Rechteck mit selben Seitenlängen ein Quadrat). => Nach dem Comp Lang Institut darf man beide nicht voneinander ableiten. Man darf höchstens eine Oberklasse (oder Interface) (benannt mit zB. "Viereck") für beide mit Funktion wie "Draw()", "GetLength()" oder "SetWidth()" zur Wiederverwendung von Code erstellen. Ich hab diese Meinung zur Kenntnis genommen, bin aber nicht wirklich damit einverstanden. Punkte habe ich dann trotzdem keine bekommen *g*!

Tormentor32 4. Jun 2007 09:57

Re: Klasse Rechteck von Quadrat ableiten oder umgekehrt?
 
Dann hätte ich es so gemacht

Delphi-Quellcode:
TGeometrischeForm = class
  TViereck= class(TGeometrischeForm)
    TRechteck = class(TViereck)
      TQuadrat = class(TRechteck)
    TParallelogramm = class(TViereck)

//usw

Hansa 4. Jun 2007 10:10

Re: Klasse Rechteck von Quadrat ableiten oder umgekehrt?
 
Hätte es auch zuerst so gemacht : Rechteck -> Quadrat. Hätte ich den Code allerdings geschrieben, dann wäre schon aufgefallen, dass das Institut Recht hat ! Ein Quadrat ist zwar schon ein spezielles Rechteck, aber das braucht (anders als das Rechteck) keine zwei Seitenlängenangaben, sondern nur eine !! Es ist also unnötig für das Quadrat eine geerbte überflüssige Seite mitzuschleppen.

Also so hätte ich das gemacht : TViereck -> TRechtwinkliges Viereck.

Das nächste wäre eine Verzweigung :

Delphi-Quellcode:
TRechteck = Class (TRechtwinkligesViereck)
  SeitenlaengeA,
  SeitelaengeB :...

TQuadrat = Class (TRechtwinkligesViereck)
  SeiteLaenge,
Wenn man sich das nämlich mal weiter überlegt : beim Quadrat brauche ich für Fläche lediglich sqr. Beim Rechteck aber SeitenLaengeA * SeitenLaengeB. Umfang usw. geht in ähnliche Richtung. Das läuft also doch viel weiter auseinder, als man im ersten Moment denkt.

Muetze1 4. Jun 2007 10:15

Re: Klasse Rechteck von Quadrat ableiten oder umgekehrt?
 
Ja und? Bei einem gleichschenkligen Dreieck bräuchte ich auch nur 2 Seitenangaben und schon kann ich alles was ich von TDreieck erben könnte nicht mehr nutzen, da ich nicht mehr davon ableiten darf? Hallo?

Bei einem gleichseitigen Dreieck darf ich dann alles nochmals implementieren, was ich beim Dreieck und beim gleichschenkligen Dreieck schon implementiert habe? Wozu?

Grundlegend: Die Routinen von TRechteck und vom allgemeinen Dreieck gelten und funktionieren genauso bei den anderen Fällen. Es ist nur eine Vereinfachung in Form a = b hinzu gekommen, aber das ändert nichts an den Formeln - die werden dadurch nicht falsch.

Warum sollte ich also z.B. die Formeln 3 mal implementieren (Beispiel Dreieck bzw. 2x Beispiel Rechteck) anstatt die vorhandenen zu nutzen?

Und dein Argument ist keins: Die Seiten können auch protected deklariert werden und erst mit der richtigen Endform veröffentlicht werden.

Hansa 4. Jun 2007 10:27

Re: Klasse Rechteck von Quadrat ableiten oder umgekehrt?
 
Muetze, wie das in der Praxis aussieht ist eine ganz andere Sache. Es gibt nicht überall protected, override usw. Ob der jeweilige Linker in der Lage ist, alles überflüssige wirklich restlos zu entfernen, wer weiß ? Gehe jedenfalls davon aus, daß die richtige Sparte gewählt wurde und die ist eben in diesem Fall nicht "Object Pascal".

Muetze1 4. Jun 2007 10:42

Re: Klasse Rechteck von Quadrat ableiten oder umgekehrt?
 
Zitat:

Zitat von Hansa
Es gibt nicht überall protected, override usw.

Es wurde nach OO Programmierung gefragt und zum OO Sprachumfang gehört nunmal ein gewisser Satz an OO Mitteln.

Zitat:

Zitat von Hansa
Ob der jeweilige Linker in der Lage ist, alles überflüssige wirklich restlos zu entfernen, wer weiß ?

Was hat dies mit dem anderen zu tun?


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:05 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz