Announcement

Collapse
No announcement yet.

abstrakten Klasen_woher erkennt der compiler das??????

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • abstrakten Klasen_woher erkennt der compiler das??????

    in einem buch habe ich folgendes gefunden...<br>
    <pre>
    type TFahrzeug=class(TObject)
    private
    va:single;
    public
    x:integer;
    y:integer;
    farbe:longint;
    constructor Erzeugen(xpos,ypos:Integer;colr:Longint);
    procedure Schneller(dv:Single);
    procedure Zeichnen(canv:Tcanvas;colr:LongInt);VIRTUAL;//wird von Nachkommen überschrieben
    property tacho:Single read va;//Read_only
    </pre>
    Und ich wüsste nicht woher erkennt der compiler ,dass die klasse abstrakt ist?Das buch ist sehr gut aber in allen Bücher habe die Antwort nicht gefunden...

  • #2
    es ist keine abstracte Klasse
    Abstrakte Klassen zeichnen sich dadurch aus das sie Methoden DEKLARIEREN aber NICHT IMPLEMENTIEREN. Damit der Compiler weiß das eine deklarierte Object Methode nicht zu implementieren ist, also abstrakt ist, muß das Schlüsselwort "abstract" hintenangestellt werden.

    <pre>

    type
    TMyClass = class(TObject)
    private
    FPrivate: Integer;
    procedure DoThis; abstract;
    public
    property Priv: Integer read FPrivate write FPrivate;
    end;<br>

    </pre>

    Gundsätzlich stellt der Compiler nur die Hilfsmittel für abstracte Klassen zur Verfügung, aber ob eine Klassen als abstrakt oder nicht zu behandeln ist, das ist Definitionssache des Entwicklers.
    Abstrakte Klassen werden also zu Laufzeit niemals instanziert, sondern dienen nur zur Grundsteinlegung einer ganzen Klassenhierarchie. Dabei kann eine solche abstr. Klasse wie ein ganz normales Object aussehen, d.h. muss nicht unbedingt das Schlüsselwort "abstract" benutzen, oder kann sehr wohl schon durchimplementiert sein.
    Sie dient also ausschließlich dazu um die gemeinsamme Basisschnittstellen aller von ihr abgeleiteten Klassen zu definieren.<br>z.B. TComponent könnte man als abstrakte Klasse bezeichnen, ALLE nutzbaren Komponenten werden von TComponent abgeleitet aber eine TComponent-Instance wird fast nie direkt benutzt.
    Man könnte das aber, ohne das Fehler auftreten, und genau hier ist die Grenze zu tatsächlich abstrakten Klassen. Diese sind NICHT vollständig funktionstüchtig.<br>
    Abstrakte Klassen sind die Design-Technische Variante der zur Laufzeit möglichen Polymorphie von Objecten. Während die letztere auf instantierten Objecten arbeitet sind die "abstrakten" Klassen die Grundlage um überhaupt Polymorphie unterstützen zu können.

    Gruß Hage

    Comment


    • #3
      Danke

      Comment

      Working...
      X