# Object Pascal

Object Pascal ist eine Sammelbezeichnung für mehrere teilweise miteinander kompatible Programmiersprachen-Derivate, die Pascal um objektorientierte Programmierung erweitern. Die bekannteste Variante ist die Programmiersprache der Entwicklungsumgebung Embarcadero Delphi, die vom Unternehmen Borland entwickelt und zeitweise Delphi Language genannt wurde und mittlerweile auch von anderen Entwicklungsumgebungen implementiert wird.

## Entwicklung
### Frühe Entwicklung bei Apple

Die erste Object Pascal-Variante entstand Anfang 1985 bei Apple, als ein Team um Larry Tesler in Zusammenarbeit mit dem Pascal-Gründer Niklaus Wirth einen objektorientierten Pascal-Dialekt entwickelte, der für die Entwicklung des Entwicklungs-Frameworks MacApp für Macintosh-Computer notwendig war. Es handelte sich um eine Weiterentwicklung einer früheren objektorientierten Pascal-Variante namens Clascal, die für Lisa-Computer verfügbar war.
Eine zur Apple-Version ähnliche und weitgehend kompatible Object Pascal-Version stand kurz darauf in der THINK Pascal-Entwicklungsumgebung für Macintosh-Computer zur Verfügung.

### Weiterentwicklung bei Borland, Inprise, Codegear und Embarcadero

1986 erweiterte Borland seine Entwicklungsumgebung Turbo Pascal für den Apple Macintosh um objektorientierte Sprachmerkmale, die anfangs der Apple-Implementierung stark ähnelten. Mit Turbo Pascal 5.5 folgte 1989 eine Version für DOS. 1993 begann Borland mit der Entwicklung von Delphi als Nachfolger von Turbo Pascal für Windows. 1995 veröffentlichte Borland Delphi 1.0 und führte damit neue Spracherweiterungen wie ein neues Objektmodell mit erweiterter Klassenunterstützung und vielfältigeren Sichtbarkeitsregeln ein. Das alte Objektmodell von Apple und Turbo Pascal („Old-Style Object Types“) wurde und wird aber weiterhin unterstützt.
Mit der Zeit wurde die Sprache immer wieder weiterentwickelt und u. a. um Generics und anonyme Funktionen erweitert.
Neben dem verbreiteten Delphi gibt es viele andere Compiler für Object Pascal wie u. a. die Open-Source-Projekte Free Pascal und GNU Pascal. Sie streben teilweise Kompatibilität zu Delphi an, pflegen aber eine eigene Sprachdefinition mit eigenen Erweiterungen. Die aktuelle Free Pascal-Version 3.0 unterstützt sowohl Old-Style-Objekte als auch die mit Delphi eingeführten moderneren Klassenkonzepte.

## Eigenschaften

Der Funktionsumfang von Object Pascal ist vergleichbar mit dem von C++, wobei sich die Syntax stark unterscheidet. Variablen müssen deklariert und einem Datentyp zugeordnet werden. Es gibt Klassen mit Konstruktoren und Destruktoren, Methoden und Properties. Methoden können virtuell sein. Die Vererbung unterstützt nur eine Basisklasse; Interfaces ermöglichen Mehrfachvererbung. Für die Speicherverwaltung von Objekten ist der Programmierer selbst verantwortlich. Strings sind davon nicht betroffen, da sie als elementarer Datentyp unterstützt werden.
Bis Delphi 2005 wurden Objekte grundsätzlich auf dem Heap angelegt. Dies ermöglicht es, in Delphi jedes Objekt als Ergebnis einer Funktion an den Aufrufenden zu übergeben. In anderen Programmiersprachen, wie z. B. C++, können Objekte sowohl im Heap als auch im Stack angelegt werden. Objekte im Stack können nicht als Rückgabewert übergeben werden, da diese beim Verlassen der Funktion zusammen mit dem restlichen Stackframe der Funktion gelöscht werden. Somit wurde hier eine Designentscheidung getroffen, die dem Delphi-Programmierer die Entscheidung zwischen Heap/Stack abnimmt und immer die flexiblere Lösung wählt. Als Nachteil dieser Technik ergibt sich unmittelbar, dass der Programmierer seine erzeugten Objekte selbst aus dem Speicher entfernen muss. Bei Objekten im Stack ist dies nicht notwendig. Seit Delphi 2006 werden auch Records mit Methoden unterstützt, womit sich Stackobjekte ähnlich wie in C++ erstellen lassen.

### Programmbeispiel

(Für Delphi und Free Pascal)

## Implementierungen

Compiler bzw. Interpreter, die Object Pascal unterstützen, sind u. a.:
* Turbo Pascal (kommerziell)
* Embarcadero Delphi (ehemals Borland Delphi, kommerziell, Windows)
* Borland Kylix (kommerziell, Linux)
* Free Pascal (Open Source, multiplattform)
* GNU Pascal (Open Source)
* Virtual Pascal (Closed Source Freeware)
* Oxygene
* DWScript (Open Source)

## Klassenbibliotheken

Für Object Pascal existieren mehrere Klassenbibliotheken. Unter Delphi bilden die Runtime Library (RTL) und die Visual Component Library (VCL) traditionell die Basis für die Entwicklung. Während erstere grundlegende Funktionalitäten wie beispielsweise Verarbeitungsfunktionen für Zeichenketten enthält, ist letztere eine Klassenbibliothek, insbesondere für visuelle Komponenten (Buttons etc.). Zeitweise gab es neben der VCL noch die Component Library for Cross Platform (CLX). Diese wurde aber wieder eingestellt. Mit Delphi XE2 wurde Firemonkey, eine im Gegensatz zur VCL plattformunabhängige, vektorbasierte Komponentenbibliothek eingeführt.
Der größte Teil der Funktionalität beruht auf Klassenbibliotheken, andere sehr häufig benötigte Funktionen werden aber direkt vom Compiler umgesetzt, so z. B. die nahtlose Integration der COM-Technik unter Windows. Der direkte Zugriff auf die Windows-API ist möglich. Von anderen Anbietern gibt es eine Vielzahl von Komponenten für die unterschiedlichsten Anwendungen. So haben sich auch einige Open-Source-Bibliotheken und -Komponentensammlungen etabliert, insbesondere die JEDI Class Library (JCL), JEDI Visual Component Library (JVCL) und Internet Direct (Indy).
Für Free Pascal/Lazarus existieren äquivalente Bibliotheken zu RTL und VCL, die sich in der Handhabung nur im Detail unterscheiden und dort Free Component Library FCL und Lazarus Component Library LCL heißen.

## Einfluss auf andere Programmiersprachen

Einige der Elemente und Ideen von Object Pascal wurden in die Programmiersprache C# von Microsoft übernommen. Einer der Gründe ist, dass zahlreiche Mitentwickler von Delphi bei Borland von Microsoft abgeworben wurden und maßgeblich an der Entwicklung von C# beteiligt waren. Darunter waren unter anderem der Delphi-Projektleiter Anders Hejlsberg, welchem der Wechsel zu Microsoft mit einem Bonus in Millionenhöhe schmackhaft gemacht wurde, sowie Chuck Jazdzewski (Delphi Chief Architect), Corbin Dunn (Entwickler der Delphi-IDE), Danny Thorpe (Delphi, Borland Chief Scientist), Eddie Churchill und Ramin Halviatti. Hejlsberg wurde bei Microsoft Software-Architekturchef, Miterfinder von .NET und Chefentwickler von C#.