Oberon (Programmiersprache)

Oberon ist eine von Niklaus Wirth und Jürg Gutknecht entwickelte, objektorientierte, streng strukturierte Programmiersprache. Sie ist den ebenfalls von Wirth entworfenen Vorgängern Pascal und Modula-2 recht ähnlich, allerdings strukturierter als Pascal und mächtiger, gleichzeitig aber erheblich weniger umfangreich als Modula-2. Die Erstpublikation erfolgte 1987. Das ETH Oberon System ist ein eigenständiges Betriebssystem der ETH Zürich, das in der Sprache Oberon implementiert ist, als Entwicklungsgrundlage für die Sprache diente und ebenso wie der Compiler kostenlos erhältlich ist.

Überblick 
Oberon wurde – wie sein Vorgänger Modula-2 – parallel zu einer Workstation (Ceres) entwickelt.

Oberon fand nach seiner Veröffentlichung recht schnell unter anderem zu Bildungszwecken in Schulen und Universitäten Verwendung. Es existieren inzwischen allerdings auch auf Oberon basierende, ebenfalls kostenlos verfügbare Werkzeuge, die auch kommerziell eingesetzt werden, wie zum Beispiel die Programmiersprache Component Pascal und die integrierte Entwicklungsumgebung BlackBox Component Builder.

Die Vorteile von Oberon liegen besonders im modularen Aufbau, der großen Sicherheit und in der Einfachheit der Sprache, die eindeutig und vergleichsweise kurz definiert werden kann (siehe auch EBNF). Mit Oberon ist es besonders leicht und sicher, das Programmieren auf verschiedene Personen aufzuteilen und die Arbeit später zusammenzufügen.

Hanspeter Mössenböck hat Oberon mit wenigen Änderungen zur Programmiersprache Oberon-2 weiterentwickelt, wobei zusätzlich im Wesentlichen explizit typgebundene Prozeduren erlaubt wurden, so dass die entsprechenden Objekte nicht mehr implizit in der formalen Parameterliste der Methoden aufgeführt werden müssen. Ferner wurde die Exportmarke "-" (als Alternative zu "*") zur Unterdrückung von Schreibrechten auf Objekte oder deren Komponenten eingeführt.

Die Quelltexte der Compiler sind in der Regel frei verfügbar. Es gibt verschiedene integrierte Entwicklungsumgebungen, genannt werden kann zum Beispiel auch POW!. Neben dem Einsatz als Programmiersprache ist auch die Nutzung als Betriebssystem (Native Oberon) möglich.

Anders als bei anderen vollwertigen, objektorientierten Programmiersprachen wird der Quelltext nicht interpretiert (zum Beispiel Ruby) oder in Bytecode übersetzt (zum Beispiel Java), sondern in der Regel in einem einzigen Compilerdurchlauf sehr schnell in Maschinensprache übersetzt. Der kompilierte Code ist typsicher, und Speicherbereichsprüfungen sind obligatorisch. Die Verwendung von Programmanweisungen zur Deallokation von Zeigervariablen ist obsolet.

Es ist möglich, Haltepunkte zu setzen (Anweisung HALT) und auch alle lokalen Variablen nach dem Abbruch des Programms zu analysieren. Globale Variablen können im Laufzeitsystem jederzeit analysiert werden. Die Entwicklungszeiten mit Oberon sind daher sehr kurz, und der Maschinencode ist dennoch sehr effizient und robust. Auch Echtzeitanwendungen können mit Oberon implementiert werden.

Die Programmiersprache Oberon zeichnet sich dadurch aus, dass sie die objektorientierte Architektur im Gegensatz zum Beispiel zu C++ unter anderem mit einem integrierten Laufzeitsystem Oberon System und einer Automatischen Speicherbereinigung (garbage collection) vollständig unterstützt. Auf Mehrfachvererbung wurde bewusst verzichtet, um den Compiler von komplexen Verwaltungsaufgaben zu entlasten und den Programmierer vor unerwarteten Ergebnissen im Zusammenhang mit dem Diamond-Problem zu bewahren.

Code-Beispiele 
Hello World im Ulmer OBERON-System:

MODULE HelloWorld;

IMPORT Write;

BEGIN

   Write.Line ("Hello World");

END HelloWorld.

Die objektorientierte Programmierung wird mit erweiterten Datenverbünden vom Datentyp RECORD erreicht. Die Definition von Methoden wird durch typengebundene Prozeduren, und die Definition von Sichtbarkeiten wird durch Exportmarken ("*" für Schreibzugriff und "-" für Lesezugriff) erwirkt. Beispiel in Oberon-2:

MODULE Vererbung;

TYPE

   GraphischesObjekt* = POINTER TO GraphischesObjektBeschreibung;
   GraphischesObjektBeschreibung = RECORD farbe*: LONGINT; END;

   Punkt* = POINTER TO PunktBeschreibung;
   PunktBeschreibung = RECORD (GraphischesObjekt) x*, y*: LONGINT; END; (* Punkt erbt die Eigenschaft "farbe" von GraphischesObjekt *)

   Linie* = POINTER TO LinienBeschreibung;
   LinienBeschreibung = RECORD (GraphischesObjekt) xStart*, yStart*, xEnde*, yEnde*: LONGINT; END; (* Linie erbt die Eigenschaft "farbe" von GraphischesObjekt *)

PROCEDURE (punkt: Punkt) Zeichne*; (* typgebundene Methode "Zeichne" für Instanzen vom Typ "Punkt" *)
BEGIN
   ...
END Zeichne;

PROCEDURE (linie: Linie) Zeichne*; (* typgebundene Methode "Zeichne" für Instanzen vom Typ "Linie"*)
BEGIN
   ...
END Zeichne;

CONST

   ROT = 00000FFH; (* RGB *)

VAR

   punkt: Punkt;
   linie: Linie;

BEGIN

   NEW (punkt);
   punkt.farbe := ROT;
   punkt.x := 1;
   punkt.y := 1;
   punkt.Zeichne ();

   NEW (linie);
   punkt.farbe := ROT;
   linie.xStart := 1;
   linie.yStart := 1;
   linie.xEnde  := 2;
   linie.yEnde  := 2;
   linie.Zeichne ();

END Vererbung.

Attribute, die nur einen Lesezugriff haben, können durch typengebundene Prozeduren (Methoden) verändert werden. Beispiel:

MODULE Schreibschutz;

TYPE

   Objekt* = POINTER TO Objektbeschreibung;
   Objektbeschreibung = RECORD x-: INTEGER; END; (* Das nachgestellte Minuszeichen kennzeichnet ein Attribut, das nur gelesen werden kann *)

PROCEDURE (objekt: Objekt) SetzeX* (wert: INTEGER); (* typgebundene Methode "SetzeX" *)
BEGIN
   objekt.x := wert; (* Schreibzugriff auf das Attribut "x" nur in typgebundener Methode *)
END SetzeX;

VAR

   objekt: Objekt;
   int: INTEGER;

BEGIN

   NEW (objekt1);
   objekt1.SetzeX (1); (* Schreibzugriff auf das Attribut "x" nur über Methodenaufruf *)
   int := objekt1.x; (* Lesezugriff auf das Attribut "x" auch über Zuweisung *)

END Schreibschutz.

Weiterentwicklungen 
Ausgehend von Oberon und Oberon-2 sind die Programmiersprachen Component Pascal, Active Oberon und Zonnon entstanden.

Siehe auch 
 Oberon microsystems

Literatur

Weblinks

Einzelnachweise 

Freeware
Imperative Programmiersprache
Objektorientierte Programmiersprache
Bildungsorientierte Programmiersprache