Thema: Delphi Klassen Methoden

Einzelnen Beitrag anzeigen

Bernd Ua

Registriert seit: 10. Nov 2003
Ort: Lindhorst
87 Beiträge
 
Delphi 11 Alexandria
 
#18

Re: Klassen Methoden

  Alt 7. Feb 2004, 14:48
Zitat:
LOL. Das ist das Beispie aus der Delphi-Hilfe oder?
weiss nich - kann sein, glaube aber nicht. Ich nehms gerne in meinen Trainings
um die Unterschiede von Klassenmethoden und normalen Methdoen deutlich zu machen

Zitat:
Ja, würde ich ja auch gerne mit reinnehmen, nur fehlt mir irgendwie noch immer das Grundlegende und das tiefere Verständnis über Klassenmethoden.
Neben tollen Sachen, die man mit dem Typ TClass bzw eigenen Klassenreferenztypen machen kann
dienen Klassenmethoden vor allem zur Strukturierung und Kapselung.
( Kombiniert mit virtuellen Konstruktoren bildet der Klassenreferenztyp das Rückrat des
ganzen Streamimg Systems der Delphi-Formulare. )

Nimm beispielsweise einen Dateneingabedialog, den Du programmieren willst.
Wenn du prozedural rangehst, baust du dafür vielleicht (bzw hoffentlich)
in der Unit eine Funktion wie folgt :

Delphi-Quellcode:
type
  TForm2 = class(TForm)
    Button1: TButton;
  private
  public
  end;

var
  Form2: TForm2;

function GetData (out Data : TSomeData): Boolean;

implementation

{$R *.dfm}

function GetData (out Data : TSomeData): Boolean;
begin
  with TFrmData.Create(nil) do
    try
      Result := ShowModal=mrOk;
      if Result then
        Data := ...
    finally
       Free;
    end;
end;
Genausogut kannst Du aber sagen, was soll die sch.. Funktion, die macht doch ohne den Dialog keinen Sinn
und fasst die Funktion und die Klasse mittels Klassenmethdoe zu einer logischen Einheit zusammen :

Delphi-Quellcode:
type
  TForm2 = class(TForm)
    Button1: TButton;
  private
  public
    class function TForm2.GetData (out Data : TSomeData): Boolean;
  end;

implementation

{$R *.dfm}

class function TForm2.GetData (out Data : TSomeData): Boolean;
begin
  with TFrmData.Create(nil) do
    try
      Result := ShowModal=mrOk;
      if Result then
        Data := ...
    finally
       Free;
    end;
end;
Von aussen rufts Du die Klassenmethode dann wie folgt auf

if TForm2.GetData(...) then Hättest Du stattdessen GetDat zu einer normalen Methode degradiert,
müsstest Du den Dialog auch von aussen erzeugen - was weder gut gekapselt noch besonders elegant ist.

Die freistehende Funktion ginge natürlich auch, nur in "reinen" OOP-Sprachen gibt es sowas halt nicht.
( vieles was in Delphi als Funktionssammlung in Units zusammengefasst ist, findet sich in Java als
Klasse, die ausschliesslich Klassenmethoden enthält und nie instanziiert wird )

Bernd
Bernd Ua
  Mit Zitat antworten Zitat