Object Pascal

Object Pascal, auch bekannt als Delphi, ist eine von der Firma Borland entwickelte objektorientierte Erweiterung der Programmiersprache Pascal.

Zuerst eingeführt wurde sie mit Delphi, inzwischen ist sie mit Kylix auch für Linux verfügbar. Auch von Drittanbietern wurde diese Sprache eine Zeit lang angeboten, so von Speedsoft, einer deutschen Firma, unter dem Namen Speed Pascal bzw. Sibyl, als auch von der britischen Firma fPrint UK Ltd. unter dem Namen Virtual Pascal. Beide wurden ursprünglich für OS/2 entwickelt und später nach Windows und Linux portiert. Die Entwicklung von Sibyl wurde anscheinend eingestellt, Virtual Pascal ist inzwischen als Freeware erhältlich. Daneben gibt es noch das ebenfalls kostenlose FreePascal, welches unter der GPL steht.

Object Pascal ist nicht die erste objektorientierte Erweiterung von Pascal. Borland hatte bereits bei Version 5.5 von Turbo Pascal ein Objektmodell eingeführt, welches interessanterweise von den Delphi Compilern bis Version 7.0 immer noch unterstützt wird, wenn man auch nach einer Dokumentation vergeblich sucht. (Delphi 8 fuer .NET unterstuetzt sie nicht mehr.)

Object Pascal ist die Grundlage der visuellen Klassenbibliothek Visual Class Library (VCL), auf der Delphi basiert, sowie der neueren Class Library for Cross Platform (CLX), auf der Kylix basiert. Beide Bibliotheken sind stark miteinander verwandt, und es ist häufig einfach, eine für die VCL geschriebene Komponente nach CLX zu portieren.

Ein Unterschied zu z.B. C++ ist, dass es nicht möglich ist Objektinstanzen auf dem Stack anzulegen, d.h. alle Instanzen werden auf dem Heap angelegt. Viele der Elemente und Ideen von ObjectPascal sind in die neue Programmiersprache C# und das Microsoft .NET Framework übernommen worden.

Beispiel einer Klassen-Deklaration:

type
  TMyObject = class
  private
    FSomePrivateField: integer;
  protected
    procedure SomeProtectedMethod(Param1: integer; const Param2: string; out OutParam: string); virtual;
    procedure SetSomeOtherProperty(Value: integer);
    function GetSomeOtherProperty: integer;
  public
    constructor Create;
    destructor Destroy; override;
    procedure SomePublicMethod;
  published
    property SomePublishedProperty read FSomePrivateField; // readonly
    property SomeOtherProperty: integer read GetSomeOtherProperty write SetSomeOtherProperty;
  end;

Properties dienen zum Information hiding, indem ein direkter Zugriff auf die Variable verhindert wird und die Methode entscheiden kann, welchen Wert sie beim Lesen herausgibt und beim Ändern eines Wertes akzeptiert, was einen ADT (abstract data type) auszeichnet. Wird beispielsweise wie bei property SomePublishedProperty keine write-Methode angegeben, so handelt es sich um eine read-only Variable.

Die dazugehörige Implemementation:

constructor TMyObject.Create;
// legt eine Objectinstanz an
begin
  inherited;
  // Konstruktor der Oberklasse rufen

fSomePrivateField := 42; // privates Feld mit 42 initialisieren end;

destructor TMyObject.Destroy; begin inherited; // Destruktor der Oberklasse aufrufen end;

procedure TMyObject.SomeProtectedMethod(Param1: integer; const Param2: string; out OutParam: string);
var
   i: integer;
   // Deklaration lokaler Variablen

begin OutParam := ''; // Ausgabeparameter initialisieren

for i:=1 to Param1 do OutParam := OutParam + Param2; // Ausgabeparameter mit dem Eingabeparameter Param1-mal konkatenieren

end;

procedure TMyObject.SomePublicMethod;
begin
  Inc(fSomePrivateField);
  // privates Feld hochzählen
end;

procedure SetSomeOtherProperty(Value: integer);
begin
  fSomePrivateField := Value * 5;
end;

function GetSomeOtherProperty: integer;
begin
  Result := fSomePrivateField div 5;
end;

Weblinks





Websites: Tagoror | Guajara | Tacoronte Guia | Todo Gomera | Deranet | Radioaficionados | Cinebso | Mi Buscador

Enciclopedia On Line: GNU FDL.