Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Was macht dieses "class"-Konstrukt (https://www.delphipraxis.net/53388-macht-dieses-class-konstrukt.html)

kalmi01 15. Sep 2005 13:17


Was macht dieses "class"-Konstrukt
 
Hallo,

bin auf dieses class-Konstrukt gestossen.
Delphi-Quellcode:
type
  TOperator_Add = class(TFunction)
  published
    class function Float(Param1, Param2: TVariable; _R: TVariable): TVariable; override;
  end;

.....

class function TOperator_Add.Float(Param1, Param2: TVariable; _R: TVariable): TVariable;
begin
  ...
end;
Der Sinn ist mir aber nicht ersichtlich, was passiert da ?
Warum "class" vor "function" ?
:gruebel: :gruebel: :gruebel:

So ein Konstrukt hab ich noch nie vorher gesehen und die OH war nicht besonders hilfreich.

choose 15. Sep 2005 13:23

Re: Was macht dieses "class"-Konstrukt
 
Hast Du on der OH unter "Klassenmethoden" nachgesehen?

himitsu 15. Sep 2005 13:24

Re: Was macht dieses "class"-Konstrukt
 
Wenn du das "Class" wegläßt, dann kann diese Funltio/Prozedur nor von einem instantiiertem Objekt verwendet werden.

mit diesem Class kannst du diese Funktion/Prozedur auch verwenden, wenn du von der entsprechenden Klasse noch kein Objekt erzeugt hast.
Also es muß zum ausführen der Klassenfunktion vorher keine .Create und nachher natürlich auch kein .Free vorhanden sein.


Was es aber ganz genau damit auf sich hat, kann ich dir auch noch nicht mit Sicherheit sagen -.-''

Jelly 15. Sep 2005 13:26

Re: Was macht dieses "class"-Konstrukt
 
Die Suchfunktion schon bemüht :zwinker:

himitsu 15. Sep 2005 13:30

Re: Was macht dieses "class"-Konstrukt
 
diese "class of typ" und das hier gemeinte "class function/procedure" in einer Klasse sind aber was unterschiedliches :zwinker:

kalmi01 15. Sep 2005 13:36

Re: Was macht dieses "class"-Konstrukt
 
choose: Macht das Ganze nicht unbedingt klarer

himitsu: danke

Robert_G 15. Sep 2005 13:41

Re: Was macht dieses "class"-Konstrukt
 
Eine normale Methode wird an einer Instanz einer Klasse ausgeführt.
Delphi-Quellcode:
Miep := TMiep.Create();
Miep.DoSomething();
Klassenmethoden werden direkt an der Klasse ausgeführt.
Delphi-Quellcode:
TMiep.DoSomething();
Während du in einer Instanzmethode auf die Instanz Member deiner Klasse zu greifen kannst, geht das mit Klassenmethoden natürlich nicht.

Aber sage jetzt bitte nicht, dass du beruflich mit Delphi zu tun hast. :shock:

Robert Marquardt 15. Sep 2005 13:52

Re: Was macht dieses "class"-Konstrukt
 
Eine normale Methode bekommt als ersten Parameter Self uebergeben das auf die Instanz des Objektes zeigt fuer das die Methode aufgerufen wurde.
Eine class-Methode bekommt in Self die Klasse selbst uebergeben. Das ist nichts anderes als wieder ein Objekt das die Klasse beschreibt.
Da keine Objektinstanz uebergeben wird, kann die class-Methode auch ohne ein instanziiertes Objekt aufgerufen werden.

Die Einsatzmoeglichkeiten sind vielfaeltig.
Man kann Funktionen als Methoden implementieren, ohne je eine Objektinstanz zu benoetigen.

Viel wichtiger ist es aber as man Objekte der Klasse instanziieren kann (die betrachtete Klasse heisse TMyClass).
Man ruft einfach Self.Create auf und da dies ja ein instanziiertes Klassenobjekt TMyClass ist, bekommt man ein instanziiertes Objekt.
Dazu hat TMyClass einfach eine Methode Create statt eines Konstruktors.

kalmi01 15. Sep 2005 14:03

Re: Was macht dieses "class"-Konstrukt
 
Hallo "Robert Marquardt",

danke, jetzt ist's klar.

Zitat:

Man kann Funktionen als Methoden implementieren, ohne je eine Objektinstanz zu benoetigen.
Ich dachte immer, der Vorteil von OOP sei, dass Objekte instanziiert werden und nach "Gebrauch" wieder frei gegeben werden und man zwischenzeitlich quasi alles mit den Instanzen anstellen kann, was man will.

Robert_G 15. Sep 2005 14:21

Re: Was macht dieses "class"-Konstrukt
 
Tja in Object Pascal können die Klassen selbst auch als Objekte verwendet werden. :)
Mit virtuellen Klassenmethoden hat man somit auch Polymorphy zur Verfügung.

kalmi01 15. Sep 2005 14:39

Re: Was macht dieses "class"-Konstrukt
 
Hi,

Zitat:

Aber sage jetzt bitte nicht, dass du beruflich mit Delphi zu tun hast.
Kennt ein Pilot jede Schraube seines Jet's beim Namen ?

Zitat:

Mit virtuellen Klassenmethoden hat man somit auch Polymorphy zur Verfügung.
Hat man doch mit "override" und "virtual" auch.

Da ich solch ein Konstrukt bisher noch nie gesehen habe und in diversen Büchern und der OH nichts dazu gefunden habe, wagte ich mal zu fragen.
Dachte, das wäre der Sinn dieses Forum's.

Robert_G 15. Sep 2005 14:48

Re: Was macht dieses "class"-Konstrukt
 
Zitat:

Zitat von kalmi01
Zitat:

Aber sage jetzt bitte nicht, dass du beruflich mit Delphi zu tun hast.
Kennt ein Pilot jede Schraube seines Jet's beim Namen ?

Das behaupte ich auch nicht. Aber MetaClasses und class methods gehören IMHO zu grundlegenden Sprach features.
Genau ab hier schreibe ich besser nix mehr...
Zitat:

Zitat:

Mit virtuellen Klassenmethoden hat man somit auch Polymorphy zur Verfügung.
Hat man doch mit "override" und "virtual" auch.
Ich meinte du kannst somit auch Polymorphy auf Ebene von Klassenreferenzen benutzen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:21 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 by Thomas Breitkreuz