Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Sinn, Nutzen und Einsatzmöglichkeit von abstrakten Klassen (https://www.delphipraxis.net/121617-sinn-nutzen-und-einsatzmoeglichkeit-von-abstrakten-klassen.html)

p80286 1. Okt 2008 13:11

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:
agm = array [0..5] of TGeometrischeFigur ;

for i:=0 to 5 do
  flaeche:=agm[i].BerechneFläche;
Gruß K-H

nachti1505 1. Okt 2008 13:16

Re: Sinn, Nutzen und Einsatzmöglichkeit von abstrakten Klass
 
Jupp das ist möglich, wobei gilt:

Delphi-Quellcode:
agm[0] := TDreick.Create;
agm[1] := TKreis.Create;
[...]
Heißt also, du musst für die abstrakten Elemente deines Array konkrete Klassen "createn".

DeddyH 1. Okt 2008 13:39

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.

p80286 1. Okt 2008 13:41

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

Luckie 1. Okt 2008 14:35

Re: Sinn, Nutzen und Einsatzmöglichkeit von abstrakten Klass
 
Letztendlich geht es mir um die Frage: "Warum abstrakte Klassen?"

Mr_G 1. Okt 2008 15:16

Re: Sinn, Nutzen und Einsatzmöglichkeit von abstrakten Klass
 
Zitat:

Zitat von Luckie
Letztendlich geht es mir um die Frage: "Warum abstrakte Klassen?"

Die Frage wurde doch hier aussführlich beantwortet. Was ist denn da noch unklar?

P.S.: Ich könnte auf Wunsch noch ein ausführlicheres Beispiel mit Geometrischen Formen hochladen.

igel457 1. Okt 2008 16:02

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: http://andorra.cvs.sourceforge.net/v...w=markup#l_279
Implementierung: http://andorra.cvs.sourceforge.net/v...ew=markup#l_28

Luckie 1. Okt 2008 16:28

Re: Sinn, Nutzen und Einsatzmöglichkeit von abstrakten Klass
 
Zitat:

Zitat von Mr_G
Zitat:

Zitat von Luckie
Letztendlich geht es mir um die Frage: "Warum abstrakte Klassen?"

Die Frage wurde doch hier aussführlich beantwortet. Was ist denn da noch unklar?

Ich wllte die Fragestellung nur auf den Punkt bringen.

p80286 1. Okt 2008 16:28

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

Luckie 1. Okt 2008 16:37

Re: Sinn, Nutzen und Einsatzmöglichkeit von abstrakten Klass
 
Zitat:

Zitat von p80286
Ich denke man könnte die abstrakte Klasse als Prototypen bezeichnen.

Ich galube, das ist eine gute Zusammenfassung.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:50 Uhr.
Seite 2 von 4     12 34      

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