| Object Pascal | |
|---|---|
| Basisdaten | |
| Paradigmen: | prozedural,objektorientiert |
| Erscheinungsjahr: | 1986 |
| Entwickler: | Apple,Niklaus Wirth,Anders Hejlsberg |
| Typisierung: | stark, explizit (auf Wunsch auch implizit), statisch |
| WichtigeImplementierungen: | Embarcadero Delphi (x86 undCLI),Free Pascal (diverse Architekturen), Oxygene (CLI,Java),Virtual Pascal (x86),TMT Pascal (x86),Turbo51 (Intel 8051) |
| Dialekte: | Free Pascal,Delphi.NET, Oxygene |
| Beeinflusst von: | Turbo Pascal,Simula,Smalltalk |
| Beeinflusste: | .Net-Framework,C#,Genie,Java,Nim,C/AL |
Object Pascal ist eine Sammelbezeichnung für mehrere teilweise miteinander kompatibleProgrammiersprachen-Derivate, diePascal umobjektorientierte Programmierung erweitern. Die bekannteste Variante ist die Programmiersprache derEntwicklungsumgebungEmbarcadero Delphi, die vom UnternehmenBorland entwickelt und zeitweiseDelphi Language genannt wurde und mittlerweile auch von anderen Entwicklungsumgebungen implementiert wird.
Die erste Object Pascal-Variante entstand Anfang 1985 beiApple, als ein Team umLarry Tesler in Zusammenarbeit mit dem Pascal-GründerNiklaus Wirth einen objektorientierten Pascal-Dialekt entwickelte, der für die Entwicklung des Entwicklungs-Frameworks MacApp fürMacintosh-Computer notwendig war[1]. Es handelte sich um eine Weiterentwicklung einer früheren objektorientierten Pascal-Variante namensClascal, die fürLisa-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.
1986 erweiterteBorland seineEntwicklungsumgebungTurbo Pascal für denApple Macintosh umobjektorientierte Sprachmerkmale, die anfangs der Apple-Implementierung stark ähnelten. Mit Turbo Pascal 5.5 folgte 1989 eine Version fürDOS. 1993 begann Borland mit der Entwicklung vonDelphi als Nachfolger von Turbo Pascal fürWindows. 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[2].
Mit der Zeit wurde die Sprache immer wieder weiterentwickelt und u. a. umGenerics undanonyme Funktionen erweitert.
Neben dem verbreiteten Delphi gibt es viele andereCompiler für Object Pascal wie u. a. dieOpen-Source-ProjekteFree Pascal undGNU 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.
Der Funktionsumfang von Object Pascal ist vergleichbar mit dem vonC++, wobei sich die Syntax stark unterscheidet. Variablen müssen deklariert und einem Datentyp zugeordnet werden. Es gibt Klassen mitKonstruktoren und Destruktoren, Methoden und Properties. Methoden könnenvirtuell sein. DieVererbung unterstützt nur eineBasisklasse;Interfaces ermöglichenMehrfachvererbung. Für dieSpeicherverwaltung 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 demHeap 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 imStack 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 auchRecords mit Methoden unterstützt, womit sich Stackobjekte ähnlich wie in C++ erstellen lassen.
(Für Delphi und Free Pascal)
programObjectPascalExample;typeTHelloWorld=classpublicprocedureGreet;end;procedureTHelloWorld.Greet;beginWriteln('Hello, World!');end;varHelloWorld:THelloWorld;{ impliziter Zeiger }beginHelloWorld:=THelloWorld.Create;{ Konstruktor gibt einen Zeiger auf eine Instanz der Klasse THelloWorld zurück }tryHelloWorld.Greet;finallyHelloWorld.Free;{ Freigeben der Instanz }end;end.
Compiler bzw.Interpreter, die Object Pascal unterstützen, sind u. a.:
Für Object Pascal existieren mehrereKlassenbibliotheken. Unter Delphi bilden dieRuntime Library (RTL) und dieVisual 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 dieComponent Library for Cross Platform (CLX). Diese wurde aber wieder eingestellt. Mit Delphi XE2 wurdeFiremonkey, 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 derCOM-Technik unterWindows. Der direkte Zugriff auf dieWindows-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 dieJEDI Class Library (JCL),JEDI Visual Component Library (JVCL) undInternet Direct (Indy).
FürFree Pascal/Lazarus existieren äquivalente Bibliotheken zu RTL und VCL, die sich in der Handhabung nur im Detail unterscheiden und dortFree Component Library FCL undLazarus Component Library LCL heißen.
Einige der Elemente und Ideen von Object Pascal wurden in die ProgrammierspracheC# 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-ProjektleiterAnders 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.[3] Hejlsberg wurde bei Microsoft Software-Architekturchef, Miterfinder von .NET und Chefentwickler von C#.