Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Abstracte Klasse hier richtig? (https://www.delphipraxis.net/142575-abstracte-klasse-hier-richtig.html)

blablab 30. Okt 2009 15:32


Abstracte Klasse hier richtig?
 
Hallo!

ich hab im prinzip folgenden Aufbau
Delphi-Quellcode:
type
  TFigure = class
    procedure Draw; virtual; abstract;
  end;
  TRectangle = class(TFigure)
    procedure Draw; override;
  end;
  TEllipse = class(TFigure)
  end;
Alle von TFigure abgeleiteten Klassen sollen die Methode Draw implementieren, TFigure selbst hat aber keine implementierung für Draw.

Aber statt dass jetzt ein Fehler kommt, dass Tellipse die Methode Draw implementieren müsste, kann ich die Draw-Methode von TFigure benutzen die nichtmal existiert. Also ich kann Ellipse.Draw ausführen, es kommt dann aber erst zur Laufzeit ein fehler.
Sollte da nicht schon beim Compilieren ein Fehler kommen "TEllipse: Die Implementierung von Draw fehlt"?

Was mach ich falsch?

Güße
blablab

Apollonius 30. Okt 2009 15:35

Re: Abstracte Klasse hier richtig?
 
Nichts. Das ist in Delphi einfach so. Das Instanziieren einer Ellipse müsste allerdings eine Warnung hervorrufen.

mkinzler 30. Okt 2009 15:38

Re: Abstracte Klasse hier richtig?
 
Das ist as-designed. In neuren Delphiversionen kann man das von anderen Sprachen bekannte Verhalten aber provozieren, indem man die Klasse als abstrakt deklariert.

jfheins 30. Okt 2009 15:41

Re: Abstracte Klasse hier richtig?
 
Man könnte auch ein Interface draus machen. Da sollte er meckern wenn die Klasse das Interface nicht komplett implementiert ;)

Hansa 30. Okt 2009 15:41

Re: Abstracte Klasse hier richtig?
 
Woher soll denn der Compiler wissen, ob eventuell zur Laufzeit nicht doch noch die fehlende Methode "nachgerüstet" wird usw. ? :shock:

blablab 30. Okt 2009 15:48

Re: Abstracte Klasse hier richtig?
 
@jfheins: wie geht das???

@Hansa: ist sowas möglich?

jfheins 30. Okt 2009 15:50

Re: Abstracte Klasse hier richtig?
 
Zitat:

Zitat von Hansa
Woher soll denn der Compiler wissen, ob eventuell zur Laufzeit nicht doch noch die fehlende Methode "nachgerüstet" wird usw. ? :shock:

Zur Laufzeit Klassen verändern? In welcher ordentlichen Programmiersprache geht sowas denn (ohne von hinten durch die Brust ins Auge mit Pointern herumzuspielen) :?:

Wenn ich hier sowas mache, kommt das hier:
Zitat:

Fehler 1 "Test_3.Kreis" implementiert den geerbten abstrakten Member "Test_3.Figure.draw(int)" nicht. C:\Users\Julius\Documents\Visual Studio 2008\Projects\Test 3\Form1.cs 66 18 Test 3

Khabarakh 30. Okt 2009 16:35

Re: Abstracte Klasse hier richtig?
 
[OT]
Zitat:

Zitat von jfheins
In welcher ordentlichen Programmiersprache geht sowas denn

In quasi jeder Scriptsprache ;) ? Und nein, Sprachen wie Ruby oder Python fallen sicher nicht unter die Kategorie "unbedeutend", solange Delphi das nicht auch tut :P . Vielleicht hatte Hansa ja beim Schreiben noch sein neuestes Rails-Projekt im Kopf gehabt, wer weiß :zwinker: .
[/OT]


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:04 Uhr.

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