![]() |
Re: Sinn, Nutzen und Einsatzmöglichkeit von abstrakten Klass
darf ich etwas zwischenfragen?
wenn ich Codewalker richtig verstanden habe, dann ist so etwas möglich? (Dreieck,Rechteck,Kreis,Trapez....)
Delphi-Quellcode:
Gruß K-H
agm = array [0..5] of TGeometrischeFigur ;
for i:=0 to 5 do flaeche:=agm[i].BerechneFläche; |
Re: Sinn, Nutzen und Einsatzmöglichkeit von abstrakten Klass
Jupp das ist möglich, wobei gilt:
Delphi-Quellcode:
Heißt also, du musst für die abstrakten Elemente deines Array konkrete Klassen "createn".
agm[0] := TDreick.Create;
agm[1] := TKreis.Create; [...] |
Re: Sinn, Nutzen und Einsatzmöglichkeit von abstrakten Klass
Jepp, hab mal schnell ein Beispiel geschrieben:
Delphi-Quellcode:
program Tiereklassen;
uses Windows; {$APPTYPE CONSOLE} type TTier = class protected procedure GibLaut; virtual; abstract; end; THund = class(TTier) public procedure GibLaut; override; end; TKatze = class(TTier) public procedure GibLaut; override; end; TKuh = class(TTier) public procedure GibLaut; override; end; procedure THund.GibLaut; begin writeln('Wau'); end; procedure TKatze.GibLaut; begin writeln('Miau'); end; procedure TKuh.GibLaut; begin writeln('Muh'); end; var Tiere: array[0..2] of TTier; begin Tiere[0] := THund.Create; try Tiere[1] := TKatze.Create; try Tiere[2] := TKuh.Create; try Tiere[0].GibLaut; Tiere[1].GibLaut; Tiere[2].GibLaut; finally Tiere[2].Free; end; finally Tiere[1].Free; end; finally Tiere[0].Free; end; readln; end. |
Re: Sinn, Nutzen und Einsatzmöglichkeit von abstrakten Klass
Hallo Nachti1505,
davon bin ich ausgegangen, denn die "konkreten" Klassen (TKreis,TDreieck..) müssen ja erst definiert werden, damit ich die überhaupt erst einmal eine (bzw. die) Flächenberechnungsroutine(n) habe . sonst gibt's doch Fehlermeldungen bzgl. "Abstrakter Methoden". Gruß K-H |
Re: Sinn, Nutzen und Einsatzmöglichkeit von abstrakten Klass
Letztendlich geht es mir um die Frage: "Warum abstrakte Klassen?"
|
Re: Sinn, Nutzen und Einsatzmöglichkeit von abstrakten Klass
Zitat:
P.S.: Ich könnte auf Wunsch noch ein ausführlicheres Beispiel mit Geometrischen Formen hochladen. |
Re: Sinn, Nutzen und Einsatzmöglichkeit von abstrakten Klass
Ein anderes Beispiel:
In meiner 2D Grafikbibliothek wird die Grafikschnittstelle so abstrahiert, dass man jede beliebige Grafikschnittstelle (sprich OpenGL oder Direct3D) über eine DLL damit verwenden kann. Hierbei liegt die abstrakte Klassendefinition in einer einzelnen Unit, die sowohl von Host-Applikation als auch der DLL eingebunden wird. Die abstrakten Methoden der verschiedenen Klassen werden erst in der DLL implementiert. Vergleiche: Interface: ![]() Implementierung: ![]() |
Re: Sinn, Nutzen und Einsatzmöglichkeit von abstrakten Klass
Zitat:
|
Re: Sinn, Nutzen und Einsatzmöglichkeit von abstrakten Klass
Hallo Luckie,
Ich denke man könnte die abstrakte Klasse als Prototypen bezeichnen. In meiner Praxis gäbe es so etwas wie TDatenLesen und als konkrete Umsetzung gäbe es TExelLesen3,TExcelLesen4,TExcelLesen95 usw. Im Hauptprogramm arbeite ich nur mit TDatenlesen (bzw. den dort bekannt gemachten Methoden) und in Unterroutinen wird dann die "richtige" Klasse verwendet,bzw. die "richtige" Instanz erstellt. . Ich denke TStrings als abstakte Klasse und Tstringlist als "konkrete" Umsetzung sind auch ein Beispiel; Gruß K-H |
Re: Sinn, Nutzen und Einsatzmöglichkeit von abstrakten Klass
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:50 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