Zum Inhalt springen

Embarcadero Delphi

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 9. März 2006 um 12:41 Uhr durch Michael Hohlfeld (Diskussion | Beiträge) (Delphi 6 (Codename: Iliad)). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Delphi ist zum einen der Name einer von der Firma Borland entwickelten Programmiersprache, die ursprünglich aus der von Niklaus Wirth erstellten Programmiersprache Pascal hervorgegangen ist und zum anderen die Bezeichnung einer ebenfalls von der Firma Borland entwickelten Entwicklungsumgebung.

Die Sprache Delphi

Delphi basiert auf der Programmiersprache Object Pascal. Borland benannte Object Pascal jedoch 2003 in Delphi-Language um, mit der Begründung, dass sich bereits so viel in der Sprache verändert habe, dass man es nicht mehr mit Pascal vergleichen könne. So wurden, zum Beispiel, viele originäre Konstrukte, wie sie von Niklaus Wirth für Pascal als Programmiersprache zu Schulungszwecken erdacht worden sind (wie eine absolut strenge Typisierung) durch die aus der Praxis resultierenden Erfordernisse aufgeweicht.

Zuerst eingeführt wurde Delphi mit der Entwicklungsumgebung 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 durch die Firma Speedsoft wurde anscheinend eingestellt, und die Quelltexte wurden teilweise veröffentlicht. Einige Entwickler entwickeln Sibyl als Open-Source Projekt, unter dem Namen WDSibyl, weiter. Virtual Pascal ist inzwischen ebenfalls als Freeware erhältlich. Daneben gibt es noch das ebenfalls kostenlose FreePascal, welches unter der GPL steht und mit Lazarus als RAD-IDE ein freies Gegenstück zu Borlands Implementierungen bietet.

Eine wesentliche Erweiterung gegenüber der Ursprungssprache Pascal ist die Einbeziehung objektorientierter Sprachmerkmale. Delphi ist aber nicht die erste objektorientierte Erweiterung von Pascal. Borland hatte bereits bei Version 5.5 von Turbo Pascal ein Objektmodell eingeführt, das interessanterweise von den Delphi-Compilern bis Version 7.0 immer noch unterstützt wird, wenn man auch nach einer Dokumentation vergeblich sucht. Delphi 8 für .NET unterstützt sie nicht mehr. Mit dem Erscheinen von Borland Delphi 7 wurde die Programmiersprache offiziell von ObjectPascal in Delphi umbenannt.

Object Pascal ist die Grundlage der visuellen Klassenbibliothek Visual Component Library (VCL), sowie der neueren Component 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.

Einige der Elemente und Ideen von Object Pascal wurden in die neue Programmiersprache C# von Microsoft übernommen. Einer der Gründe ist, dass Anders Hejlsberg, vormals Mitentwickler von Delphi bei Borland, zu Microsoft wechselte und maßgeblich an der Entwicklung von C# beteiligt war.


Einzelheiten

Delphi ist keine asketische Sprache: So beruht der größte Teil der Funktionalität auf Klassenbibliotheken, andere sehr häufig benötigte Funktionen werden direkt vom Compiler umgesetzt, so z.B. die nahtlose Integration der COM-Technologie unter MS Win32. Der direkte Zugriff auf das Windows API ist möglich. Von Drittanbietern gibt es eine unüberschaubare Zahl von Komponenten und Assistenten mit denen fast alle Probleme gelöst werden können (siehe Weblinks unten).

Ab der Version 6.0 wurden die Bibliotheken (bis zu diesem Zeitpunkt nur die Visual Component Library für Windows) um die Cross Plattform Library CLX erweitert, die die Lauffähigkeit eines Programms unter Windows und Linux ermöglichen sollte. Gleichzeitig wurde die Linuxportierung Kylix aus der Taufe gehoben.

In Delphi werden Objekte grundsätzlich nicht auf dem Stack angelegt. Statt dessen werden alle Objekte dynamisch angefordert (mit Ausnahme der alten Objekte aus Turbo Pascal, die nur eingeschränkt genutzt werden können).


Beispiel einer Klassen-Deklaration

type
  TCommonObject = class
  private
    FSomeCommonValue: integer;
  protected
    function GetSomeCommonValue: integer; virtual; abstract;
  published
    property SomeCommonProperty: integer read GetSomeCommonValue;
  end;
   
  TMyObject = class(TCommonObject)
  private
    FSomePrivateField: integer;
  protected
    function GetSomeCommonValue: integer; override;
    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: integer read FSomePrivateField; // readonly
    property SomeOtherProperty: integer read GetSomeOtherProperty write SetSomeOtherProperty;
  end;

Dieses Beispiel definiert die zwei Klassen TCommonObject und TMyObject. TCommonObject beschreibt eine abstrakte Klasse, zu deren Entwurfszeit noch nichts über die konkrete Implementierung der Methode GetSomeCommonValue bekannt ist. Jedoch kann es für die weitere Verarbeitung verschiedener Nachfahren von TCommonObject zwingend erforderlich sein, dass diese Methode vorhanden ist. TCommonObject enthält also all diejenigen Methoden und Eigenschaften, die allen Nachfahren gemein sind. Hier im Beispiel wird GetSomeCommonValue erst in der Klasse TMyObject, die sämtliche Methoden und Eigenschaften von TCommonObject erbt, konkret implementiert.

Sichtbarkeitsbereiche

Wie im Beispiel zu erkennen, bestehen Klassen in der Delphi Language aus vier, ab Delphi 8 aus sechs, Sichtbarkeitsbereichen, die man auch Sichtbarkeitsattribute nennt:

Sichtbarkeitsattribut Sichtbarkeitsbereich
Selbe Klasse Nachfahren Selbe Unit1 Andere Units
strict private² X
private X X
strict protected² X X
protected X X X
public X X X X
published³ X X X X
automated4 X X X X

1) Eine Unit ist eine Datei/Modul eines Programms, welche beim Kompilieren eingebunden werden.
2) Erst ab Delphi 8 (.NET).
3) published fügt außerdem Runtime Type Informations (RTTI) hinzu und steuert so u.a. die Sichtbarkeit im Object Inspector.
4) Wird nur für die OLE-Automation verwendet, sonst wie public

Die Sichtbarkeit kann in Nachfahren durch Redeklaration erhöht, allerdings nicht verringert werden.

Properties

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 Nur-Lese-Variable.

Array Properties haben folgende Syntax:

  property SomeArrayProperty[index1:TIndexType]:TDatatype read SomeArrayProperty write SomeArrayProperty

Mit Array Properties lassen sich Assoziative Arrays nachbilden.

Die dazugehörige Implementation

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;
 
function TMyObject.GetSomeCommonValue: integer;
begin
  Result := FSomeCommonValue*2
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;

Syntax

Elementare Datentypen

Name Größe Wertebereich Beschreibung
ByteBool / Boolean 1 Byte true oder false boolescher Wert
WordBool 2 Byte true oder false boolescher Wert
LongBool 4 Byte true oder false boolescher Wert
Byte 1 Byte 0 bis 255 vorzeichenlose 8 bit-Ganzzahl
Word 2 Byte 0 bis 65535 vorzeichenlose 16 bit-Ganzzahl
Cardinal 4 Byte 0 bis 4.294.967.295 vorzeichenlose 32 bit-Ganzzahl
ShortInt 1 Byte -128 bis 127 vorzeichenbehaftete 8 bit-Ganzzahl
SmallInt 2 Byte -32.768 bis 32.767 vorzeichenbehaftete 16 bit-Ganzzahl
LongInt 4 Byte -231 bis 231-1 vorzeichenbehaftete 32 bit-Ganzzahl
Int64 8 Byte -263 bis 263-1 vorzeichenbehaftete 64 bit-Ganzzahl
Real48 6 Byte 2,9x10-39 bis 1,7x1038 48 bit-Gleitkommazahl
Single 4 Byte 1,5x10-45 bis 3,4x1038 32 bit-Gleitkommazahl (IEEE 754-float)
Double 8 Byte 5,0x10-324 bis 1,7x10308 64 bit-Gleitkommazahl (IEEE 754-double)
Extended 10 Byte 3,6x10-4951 bis 1,1x104932 80 bit-Gleitkommazahl
Comp 8 Byte -263 bis 263-1 vorzeichenbehaftete 64 bit-Ganzzahl, mit der über die FPU gerechnet wird
Currency 8  Byte -922.337.203.685.477,5808 bis 922.337.203.685.477,5807 vorzeichenbehaftete 64 bit-Festkommazahl
Char 1 Byte #0 bis #255 8 bit-Zeichen, z. B. ASCII-/ANSI-Zeichen
WideChar 2 Byte #0 bis #65535 16 bit-Zeichen, z. B. Unicode-Zeichen
ShortString bis 256 Byte Aneinanderreihung von bis zu 255 Chars
AnsiString bis 2 GByte Aneinanderreihung von bis zu 231 Chars
WideString bis 2 GByte Aneinanderreihung von bis zu 230 WideChars

Der Datentyp Real entspricht in Delphi standardmäßig dem Double. Zur Rückwärtskompatibilität kann man ihm mit dem Compilerschalter {$REALCOMPATIBILITY ON} dem Real48 gleichsetzen.

Der Datentyp Integer hängt von der jeweiligen Pascal-Implementation ab. In 16-Bit-Implementationen (z. B. Turbo Pascal) entsprach er einem SmallInt, in 32bit-Implementationen einem LongInt und in 64-Bit-Implementationen wird er einem Int64 entsprechen.

Der Datentyp String entspricht standardmäßig einem AnsiString. Mit {$LONGSTRINGS OFF} entspricht er zur Rückwärtskompatibilität einem ShortString.

Reservierte Symbole

and array as asm begin case class const constructor destructor dispinterface div do downto else end except exports file finalization finally for function goto if implementation in inherited initialization inline interface is label library mod nil not object of or out packed procedure program property raise record repeat resourcestring set shl shr string then threadvar to try type unit until uses var while with xor

Direktiven

Direktiven sind Symbole die nur in bestimmten Kontexten reserviert sind, sonst aber als Namen für Variablen, Funktionen, usw. benutzt werden können.

absolute abstract assembler at automated cdecl default deprecated dispip dynamic export far implements index library near nodefault on overload override pascal platform private protected public automated published read register reintroduce safecall stdcall stored virtual write

Die Entwicklungsumgebung Delphi

Delphi EEP (Early Experience Program)

Die erste Vorabversion von Delphi wurde im Herbst 1994 von Borland an einen begrenzten Entwicklerkreis verkauft. Diese inkl. Quellcodes ausgelieferte Version zeigte noch deutliche Unterschiede zur kommenden Delphi 1 Version.

Delphi 1 (Codename: Delphi)

Die erste Version von Delphi wurde am 14.02.1995 veröffentlicht und erzeugte nur Code für 16-Bit-Anwendungen. Der Umfang der mitgelieferten Komponenten war relativ gering.

Delphi 2 (Codename: Polaris)

Delphi 2 wurde im März 1996 veröffentlicht und ist die erste Version, die 32-Bit-Anwendungen für Windows erzeugen konnte. Die Vorgängerversion Delphi 1 war zusätzlich auf der CD-ROM enthalten. Die englische Version von Delphi 2 lag ebenfalls bei.

Delphi 3 (Codename: Ivory)

Delphi 3 wurde im Mai 1997 veröffentlicht.

Delphi 4 (Codename: Allegro)

Delphi 4 wurde im Juli 1998 veröffentlicht.

Delphi 5 (Codename: Argus)

Delphi 5 wurde im August 1999 veröffentlicht. Mit Delphi 5 konnte erstmals über ADO auf Datenbanken zugegriffen werden. Diese Erweiterung musste in der Professional-Version allerdings als ADO Express zugekauft werden.

Delphi 6 (Codename: Iliad)

Delphi 6 wurde im Mai 2001 veröffentlicht. Mit Delphi 6 konnte erstmals mit dem zusätzlichen Modellierungswerkzeug Modelmaker aus UML-Modellen Delphi-Programmcode erzeugt werden. Modelmaker erlaubt das Erstellen von Diagrammen in der Unified Modeling Language UML, einer Standardsprache zur Modellierung objektorientierter Systeme. Die manuelle Programmierung kann so auf ein Minimum reduziert werden.

Delphi 7 (Codename: Aurora)

Delphi 7 wurde im August 2002 veröffentlicht. Mit Delphi 7 zog .NET-Entwicklung in Delphi ein. Das Modellierungswerkzeug Modelmaker wurde ab dieser Version in Delphi integriert.

Delphi 8 (Codename: Octane)

Delphi 8 wurde im Dezember 2003 veröffentlicht. Delphi 8 umfasste nur .NET-Entwicklung.

Delphi 2005 (Codename: DiamondBack)

Die Delphi 2005 wurde seit November 2004 ausgeliefert. Neben nativen Windows-32-Bit-Anwendungen können mit Delphi 2005 auch .NET-Anwendungen in Delphi und C# erstellt werden. Im Gegensatz zu den Vorversionen Delphi 7 (Win32) und Delphi 8 (.NET) gibt es nun nur noch eine Delphi-IDE oder auch "Borland Developer Studio".

Mit Delphi 2005 hielten umfassende Neuerungen in die IDE Einzug, wie z. B. Refactoring. Auch die Programmiersprache selbst wurde um einige Funktionen, wie z. B. das For-Each-Konstrukt erweitert. Der Compiler kann nun auch sprachspezifisch Zeichen interpretieren. So können im deutschen Quelltext auch die Sonderzeichen ä,ö,ü verwendet werden. Die IDE zeigt Programmfehler sowie auch umfassende Hilfetexte in einer nie dagewesenen Übersichtlichkeit an. Allerdings zeigten sich auch viele Fehler innerhalb der IDE und den mitgelieferten Komponenten, was zu einer gewissen Unzufriedenheit bei den Nutzern geführt hat.

Delphi 2006 (Codename: DeXter)

Die aktuelle Version hat neue Sprachunterstützung im Delphi für Win32-Compiler für Records mit Methoden, Operatorüberladung und Klassenvariablen enthalten; damit wird der Stand der bestehenden Features im Delphi für .NET-Compiler erreicht. Delphi 2006 enthält außerdem volle C++-Sprachunterstützung, inklusive VCL-Formdesigner (wie im Borland C++-Builder).

Die IDE enthält neue Funktionen wie z. B. die "Live Templates", Blockvervollständigung und Einrückung während des Tippens und veränderte Zeilen-Indikatoren am linken Editor-Rand.

Außerdem ist ein Kommandozeilen-Compiler für .NET-Compact-Framework-Anwendungen enthalten. Damit können prinzipiell Anwendungen für Windows CE und Pocket PCs erstellt werden, auch wenn der Formulardesigner noch nicht dafür ausgelegt ist.

Delphi 2007 (Codename: Highlander)

Die kommende Version soll Ende 2006 erscheinen.

Delphi-ähnliche Entwicklungsumgebungen

Für Linux/X11 ist ein ähnliches Paket unter dem Namen Kylix verfügbar.

Für die Sprache C++ bietet Borland ein ähnliches Entwicklungssystem namens C++ Builder an. Frühere Versionen (bis zur Version 6.0) basierten auf der Delphi-IDE, die neue Version des C++-Builder (C++ BuilderX) ist allerdings nicht mehr so stark mit Delphi sondern eher mit der Java-IDE JBuilderX von Borland verwandt.

Der C++ Builder ist - wie bereits der C# Builder - Teil des BDS (Borland Developer Studio) 2006 geworden. Urpsrünglich ist in BDS 2006 nur eine Vorschau der C++ Personality enthalten. Die endgültige Version der C++ Personality kann mit dem auch schon erhältlichen Update 1 nachgerüstet werden.

Lazarus ist eine stark Delphi-ähnliche IDE, die unter der GPL steht. Diese ist jedoch noch in einem frühen Stadium und mit der Entwicklung unter Delphi nicht vergleichbar. Die Lazarus-IDE basiert auf dem Freepascal-Compiler.

Die von Microsoft vertriebene Entwicklungsumgebung Visual Basic ist ebenfalls mit Delphi optisch bis zu einem gewissen Grad vergleichbar, wobei der Sprachumfang zur Zeit jedoch, insbesondere objektorientierte Aspekte betreffend, nicht an den von Borland Delphi heranreicht. Zusätzlich benötigt jedes Programm, das in Visual Basic geschrieben wurde, die spezielle Visual Basic Runtime (Laufzeitumgebung).

Der Name "Delphi"

Der Name Delphi hat seinen Ursprung in der starken Datenbankorientierung der Entwicklungsumgebung. Oracle ist sowohl der Name eines Datenbanksystems als auch das englische Wort für Orakel. Als bekanntestes Orakel gilt das Orakel von Delphi. Dieser Zusammenhang wird auch von Borland-Mitarbeitern als Ursprung des Namens genannt.

Literatur

  • Thomas Binzinger: Jetzt lerne ich Delphi. Der einfache Einstieg in Object Pascal - aktuell bis Delphi 7. Markt und Technik, München 2003, ISBN 3-8272-6514-2
  • Walter Doberenz, Thomas Kowalski: Delphi 7 Kochbuch. Hanser, München 2003, ISBN 3-446-22325-8
  • Richard Kaiser: Objekt Pascal mit Delphi - Eine Einführung in die objektorientierte Windows-Programmierung. Springer, Berlin 2001, ISBN 3-540-60340-9


Wikibooks: Programmierkurs: Delphi – Lern- und Lehrmaterialien


Hilfe


Foren und Portale

Events

Linksammlungen