Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Exception abstrakter Fehler (https://www.delphipraxis.net/8123-exception-abstrakter-fehler.html)

Nimoee 29. Aug 2003 08:16


Exception abstrakter Fehler
 
Hallo,

kann mir jemand erklären was ein abstrakter Fehler ist?
Wie krieg ich raus wer oder was ihn ausgelöst hat?
( tcanvas3d erzeugt diesen Fehler,wenn ichs verwenden will )

nimoee

Chewie 29. Aug 2003 08:18

Re: Exception abstrakter Fehler
 
Ein Blick in die Hilfe:

Zitat:

EAbstractError wird ausgelöst, wenn eine Anwendung versucht, eine abstrakte Methode aufzurufen. Zur Entwurfszeit wird EabstractError ausgelöst, wenn eine Komponente mit einer abstrakten Methode in einem Formular plaziert wird.

Abstrakte Methoden werden mit der Direktive abstract deklariert und müssen in abgeleiteten Klassen überschrieben werden, bevor ein Instanzobjekt erzeugt werden kann.

Christian Seehase 29. Aug 2003 22:27

Re: Exception abstrakter Fehler
 
Moin Nimoee,

Zitat:

Zitat von Nimoee
Wie krieg ich raus wer oder was ihn ausgelöst hat?

genaugenommen Du selber, vermute ich mal, indem Du eine Klasse instanziert hast, die abstrakte Methoden enthält, und bei der Du dann eine dieser Methoden verwendet hast. ;-)

TCanvas3D kenne ich jetzt nicht, aber die Wahrscheinlichkeit ist gross, dass es sich dabei um eine abstrakte Basisklasse handelt (von der man in der Regel keine Instanzen bilden sollte)
Bei als abstract deklarierte Methoden existiert nur der Kopf der Methode (also Name und Parameterliste, falls vorhanden), aber die Methode ist ansonsten nicht implementiert, sondern wird erst in einer abgeleiteten Klasse "mit Leben gefüllt".

Nimoee 30. Aug 2003 08:49

Re: Exception abstrakter Fehler
 
Danke Chris,

hab was dazugelernt! Was mir unklar ist, warum erstellt man eine vollkommen leere Basisklasse. Was hat das für einen Sinn?
Wenn die 3d Basisfunktionen dagewesen wären, könnt ich das ja noch verstehen, aber so, die Komponente tcanvas3d ist zu nichts zu gebrauchen, ausser als Erinnerungshilfe.

Nochmals Danke

nimoee

Christian Seehase 30. Aug 2003 15:04

Re: Exception abstrakter Fehler
 
Moin Nimoee,

doch, die Klasse ist noch für anderes zu gebrauchen.
Beispielsweise kannst Du diese Klasse als Typ für einen Parameter bei einem Funktions-/Prozeduraufruf verwenden. Als Parameter kann man dann alle Werte übergeben deren Typ von diesem Abgeleitet ist.

Mein Standardbeispiel hierfür ist TStrings (auch eine abstrakte Klasse). Hiervon sind, u.a., TStringList, und TMemo.Lines abgeleitet. Will man nun beide Arten von Stringslisten als Parameter zulassen, kann man entweder mit overload zwei Deklarationen erstellen, oder man nimmt als Parametertyp die übergeordnete Klasse TStrings.

Sinn machen abstrakte Methoden in Klassen, die als Basisklassen konzipiert sind, bei denen also grundsätzlich geplant ist abgeleitete Klassen zu erstellen. Wenn hierbei klar ist, dass bestimmte Methoden enthalten sein müssen/sollen, diese aber je nach Art der abgeleiteten Klasse anders ausgestaltet sein müssen, macht es nicht unbedingt Sinn hier in der Basisklasse schon eine Funktionalität zu implementieren.

Nimoee 30. Aug 2003 16:16

Re: Exception abstrakter Fehler
 
aber vollkommen leer? Nix drin?

nimoee

Motzi 30. Aug 2003 16:27

Re: Exception abstrakter Fehler
 
Genau das hab ich in deinem andren Thread auch schon versucht zu erklären.. mein Lieblingsbeispiel für die Sinnhaftigkeit von abstrakten Klassen ist TStream und alle davon abgeleiteten Streams - TFileStream, TMemoryStream, TOleStream, TBlobStream, ....


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

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