Component Pascal
aus Wikipedia, der freien Enzyklopädie
| Component Pascal | |
|---|---|
| Paradigmen: | imperativ, modular, objektorientiertert, komponentenorientiert |
| Erscheinungsjahr: | 1990 |
| Entwickler: | Niklaus Wirth / Oberon microsystems |
| Aktuelle Version: | 1.6 (2007) |
| Typisierung: | dynamisch, sehr stark |
| wichtige Implementierungen: | BlackBox Component Builder, Gardens Point Component Pascal |
| Einflüsse: | Modula-2 / Oberon |
| Betriebssystem: | Windows, Laufzeitsysteme .NET und JVM |
| Lizenz: | frei |
| Oberon microsystems | |
Component Pascal ist eine seit 2004 kostenlose, seit 1990 entwickelte, imperative, modulare, objekt- und komponentenorientierte Programmiersprache für das von Oberon microsystems entwickelte, komponentenbasierte Entwicklungssystem BlackBox Component Builder. Inzwischen gibt es unter dem Namen Gardens Point Component Pascal auch Versionen, die unter .NET und unter der Java Virtual Machine lauffähig sind.
Component Pascal ist aus der Programmiersprache Oberon entwickelt worden und firmierte bei der Veröffentlichung 1994 noch unter dem Namen Oberon/F.
Inhaltsverzeichnis |
[Bearbeiten] Eigenschaften
Component Pascal hat eine ausgesprochen kurze und einfache Sprachbeschreibung mit einer vollständig strukturierten Syntax. Sie erlaubt statische Typen und Objekte genauso wie dynamische Typen, sowie dynamische Bindung. Es handelt sich um eine sehr stark typisierte und typsichere Programmiersprache, solange das Modul SYSTEM nicht explizit importiert wird, was in der Regel nur für Systemprogrammierung vorgesehen ist, und ist daher leicht portabel. Mehrfache Vererbung ist nicht erlaubt, um zusätzliche Belastung für die Compiler zu vermeiden und die Sprachsemantik so eindeutig wie möglich zu gestalten. Component Pascal unterstützt automatische Speicherbereinigung und dynamisches Laden von Modulen respektive Komponenten.
[Bearbeiten] Einsatzgebiete
Component Pascal zeichnet sich durch seine geringen Ansprüche an die Hardware, hohe Stabilität, Einfachheit und Schnelligkeit sowohl bei der Laufzeit als auch bei der Softwareentwicklung aus. Es wird vor allem für wissenschaftliche und technische Anwendungen, in Lehre und Forschung, aber auch für kommerzielle Anwendungen eingesetzt. Die Programmiersprache Component Pascal und das Entwicklungs- und Laufzeitsystem BlackBox Component Builder sind seit 2005 quelloffen.
[Bearbeiten] Das Programm Hallo Welt in Component Pascal
Im Modul HalloWelt wird das (parameterlose) Kommando Output definiert. Der Stern (*) hinter dem Prozedurnamen definiert den Export der Prozedur Output, so dass diese außerhalb des Moduls mit der Syntax HalloWelt.Output referenziert werden kann. Der folgende Quelltext stellt ein einfaches Programm dar, das die Meldung Hallo Welt! gefolgt von einem Zeilenumbruch ausgibt:
MODULE HalloWelt;
IMPORT Out;
PROCEDURE Output*;
BEGIN
Out.Open;
Out.String ("Hallo Welt!");
Out.Ln;
END Output;
END HalloWelt.
[Bearbeiten] Beispiele für die Implementierung von Vererbung
Die Implementierung von vererbbaren Strukturen ist bei Component Pascal gegenüber seinem Vorgänger Oberon etwas vereinfacht und noch klarer und sicherer strukturiert worden. Die Bemerkungen zwischen "(*" und "*)" dienen zur Erläuterung und werden vom Compiler ignoriert. Beispiele:
MODULE Vererbung1; TYPE (* Typendefinitionen *) GraphischesObjekt* = POINTER TO ABSTRACT RECORD farbe*: INTEGER; END; Punkt* = POINTER TO RECORD (GraphischesObjekt) x*, y*: INTEGER; END; Linie* = POINTER TO RECORD (GraphischesObjekt) xStart*, yStart*, xEnde*, yEnde*: INTEGER; END; VAR (* Variablendefinitionen *) punkt1: Punkt; linie1: Linie; PROCEDURE (g: GraphischesObjekt) Zeichne* (), NEW, EXTENSIBLE; BEGIN (* Leere, erweiterbare Methode *) END Zeichne; PROCEDURE (punkt: Punkt) Zeichne* (); BEGIN (* ... *) END Zeichne; PROCEDURE (linie: Linie) Zeichne* (); BEGIN (* ... *) END Zeichne; BEGIN NEW (punkt1); punkt1.farbe := 0FFH; (* Objektfarbe wird auf 0FF (hexadezimal) gesetzt *) punkt1.x := 1; punkt1.y := 1; punkt1.Zeichne (); NEW (linie1); linie1.farbe := 07FH; (* Objektfarbe wird auf 07F (hexadezimal) gesetzt *) linie1.xStart := 1; linie1.yStart := 1; linie1.xEnde := 2; linie1.yEnde := 2; linie1.Zeichne (); END Vererbung1.
Attribute, die nur einen Lesezugriff haben, können durch typengebundene Prozeduren (Methoden) verändert werden. Der Export entsprechender Identifizierer, die außerhalb der objekteigenen Methoden nur gelesen werden können, wird nicht durch "*", sondern durch "-" gekennzeichnet. Beispiel:
MODULE Vererbung2; TYPE Objekt* = POINTER TO RECORD x-: INTEGER; END; VAR objekt1: Objekt; int: INTEGER; PROCEDURE (objekt: Objekt) SetzeX* (wert: INTEGER), NEW; BEGIN objekt.x := wert; END SetzeX; BEGIN NEW (objekt1); (* Kommentar: Die Anweisung objekt1.x := 1 ist nicht möglich *) objekt1.SetzeX (1); int := objekt1.x END Vererbung2.

