<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://demowiki.knowlus.com/index.php?action=history&amp;feed=atom&amp;title=Oberon_%28Programmiersprache%29</id>
	<title>Oberon (Programmiersprache) - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://demowiki.knowlus.com/index.php?action=history&amp;feed=atom&amp;title=Oberon_%28Programmiersprache%29"/>
	<link rel="alternate" type="text/html" href="https://demowiki.knowlus.com/index.php?title=Oberon_(Programmiersprache)&amp;action=history"/>
	<updated>2026-04-04T08:08:29Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Demo Wiki</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://demowiki.knowlus.com/index.php?title=Oberon_(Programmiersprache)&amp;diff=2676&amp;oldid=prev</id>
		<title>imported&gt;Player2072: Schreibweise.</title>
		<link rel="alternate" type="text/html" href="https://demowiki.knowlus.com/index.php?title=Oberon_(Programmiersprache)&amp;diff=2676&amp;oldid=prev"/>
		<updated>2025-07-30T11:37:06Z</updated>

		<summary type="html">&lt;p&gt;Schreibweise.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Infobox Programmiersprache&lt;br /&gt;
| Name                         = &lt;br /&gt;
| Logo                         = [[Datei:Oberon programming language logo.svg|150px]]&lt;br /&gt;
| Beschreibung                 = &lt;br /&gt;
| Paradigma                    = [[Imperative Programmierung|imperativ]], [[Strukturierte Programmierung|strukturiert]], [[Objektorientierte Programmierung|objektorientiert]]&lt;br /&gt;
| Erscheinungsjahr             = 1987&lt;br /&gt;
| Designer                     = &lt;br /&gt;
| Entwickler                   = [[Niklaus Wirth]], [[Jürg Gutknecht]]&lt;br /&gt;
| AktuelleVersion              = &lt;br /&gt;
| AktuelleVersionFreigabeDatum = &lt;br /&gt;
| AktuelleVorabVersion         = &lt;br /&gt;
| AktuelleVorabVersionFreigabeDatum = &lt;br /&gt;
| Typisierung                  = &lt;br /&gt;
| Implementierung              = &lt;br /&gt;
| Dialekte                     = &lt;br /&gt;
| Standardisierungen           = &lt;br /&gt;
| Beeinflusst_von              = [[Pascal (Programmiersprache)|Pascal]], [[Modula-2]]&lt;br /&gt;
| Beeinflusste                 = [[Component Pascal]], [[Active Oberon]], [[Zonnon]]&lt;br /&gt;
| Betriebssystem               = &lt;br /&gt;
| Lizenz                       = unbekannt&lt;br /&gt;
| Website                      = &lt;br /&gt;
}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Oberon&amp;#039;&amp;#039;&amp;#039; ist eine von [[Niklaus Wirth]] und [[Jürg Gutknecht]] entwickelte, [[Objektorientierte Programmierung|objektorientierte]], streng strukturierte [[Programmiersprache]]. Sie ist den ebenfalls von Wirth entworfenen Vorgängern [[Pascal (Programmiersprache)|Pascal]] und [[Modula-2]] recht ähnlich, allerdings strukturierter und [[Mächtigkeit (Mathematik)|mächtiger]] als Pascal, gleichzeitig aber erheblich weniger umfangreich als Modula-2. Die Definition der Sprache war Anfang 1986 abgeschlossen. Das [[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 war.&lt;br /&gt;
&lt;br /&gt;
== Überblick ==&lt;br /&gt;
&lt;br /&gt;
=== Einordnung ===&lt;br /&gt;
Oberon ist das Ergebnis eines Forschungsprojekts, eine Programmiersprache und ein Betriebssystem für Arbeitsplatzrechner zu entwickeln. Wirth und Reiser führten die Motivation für das Projekt auf die Zeit der Implementierung des [[Personal Computer|persönlichen Rechners]] zurück. So hätten die damaligen üblichen Betriebssysteme beim Umsetzen der Prinzipien der [[Softwaretechnik]] versagt. Dazu seien eine voreilige Flucht in Standards gekommen sowie [[Computerprogramm|Programme]], die Schichten auf veraltete Grundsysteme stapelten. Die Softwaretechnik habe einen wirtschaftlichen Mitteleinsatz und die Einfachheit der Lösungen vermissen lassen. Als Leitmotiv für das Projekt zitierten sie [[Albert Einstein|Einstein]]: „Mach es so einfach wie möglich, aber nicht einfacher.“&amp;lt;ref&amp;gt;{{Literatur |Autor=Martin Reiser, Niklaus Wirth |Titel=Programmieren in Oberon – Das neue Pascal |Auflage=1. |Verlag=Addison-Wesley |Datum=1995 |ISBN=3-89319-657-9 |Seiten=XV–XVI}}&amp;lt;/ref&amp;gt; Das Projekt wurde nach dem größten Mond des Planeten [[Uranus (Planet)|Uranus]] benannt, dessen Monde zu dieser Zeit von der Raumsonde [[Voyager&amp;amp;nbsp;2]] fotografiert wurden. Oberon sei auch der Name des [[Oberon (Elfenkönig)|Elfenkönigs]].&amp;lt;ref&amp;gt;{{Literatur |Autor=Niklaus Wirth, Jürg Gutknecht |Titel=Project Oberon. The Design of an Operating System and Compiler |Verlag=Addison-Wesley |Datum=1992 |Sprache=en |ISBN=0-201-54428-8 |Seiten=3}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Entwicklung von Oberon begann 1985 und mündete in einer vollständigen Definition der Sprache Anfang 1986 als Ergebnis einer Kooperation zwischen Niklaus Wirth und Jürg Gutknecht. Der dazu veröffentlichte Report umfasst lediglich circa 16&amp;amp;nbsp;Seiten.&amp;lt;ref&amp;gt;{{Literatur |Autor=Niklaus Wirth |Titel=Modula-2 and Oberon |Sammelwerk=HOPL III: Proceedings of the third ACM SIGPLAN conference on History of programming languages |Verlag=ACM, Inc. |Datum=2007-06-09 |Sprache=en |Seiten=3-8}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{Literatur |Autor=Niklaus Wirth |Titel=From Modula to Oberon and the programming language Oberon |Sammelwerk=Institut für Informatik, Fachgruppe Computer-Systeme |Band=82 |Verlag=Eidgenössische Technische Hochschule Zürich |Datum=1987-09 |Sprache=en |Umfang=27 Seiten |DOI=10.3929/ethz-a-005363226 |Online=https://www.research-collection.ethz.ch/bitstream/handle/20.500.11850/68917/eth-3189-01.pdf |Format=PDF |KBytes=1485 |Abruf=2020-01-02}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein Ziel der Programmiersprache Oberon war es, den erweiterbaren [[Entwerfen|Entwurf]] zu unterstützen. Während ihr Vorgänger [[Modula-2]] zwar strukturierte, modulare und hierarchische Programmierung erlaubt, um Abstraktionsebenen einzuführen, fügt Oberon die Erweiterbarkeit von [[Datentyp]]en hinzu und zwar derart, dass erweiterte Typen kompatibel mit ihren Ausgangstypen bleiben. Modula-2 bietet dieses Merkmal nicht. Reiser und Wirth sahen darin die eigentliche Neuerung der „in den achtziger Jahren zur Modewelle avancierten [[Objektorientierte Programmierung|objektorientierten Sprachen]].“ Diese hätten darüber hinaus mit dem Ziel eines Paradigmenwechsels altbekannte Konzepte umbenannt. Aus [[Variable (Programmierung)|Variablen]] wurden [[Objekt (Programmierung)|Instanzen]], aus [[Prozedur (Programmierung)|Prozeduren]] [[Methode (Programmierung)|Methoden]] und aus dem Prozeduraufruf das Senden von Meldungen. Oberon hingegen blieb bei den Begriffen des Datentyps und der Prozedur, um einen „Bruch mit der Tradition“ zu vermeiden.&amp;lt;ref&amp;gt;{{Literatur |Autor=Martin Reiser, Niklaus Wirth |Titel=Programmieren in Oberon – Das neue Pascal |Auflage=1. |Verlag=Addison-Wesley |Datum=1995 |ISBN=3-89319-657-9 |Seiten=4–5}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die nachfolgende Tabelle zeigt einen Terminologienvergleich zwischen der objektorientierten Programmierung (OOP) und Oberon.&amp;lt;ref&amp;gt;{{Literatur |Autor=Martin Reiser, Niklaus Wirth |Titel=Programmieren in Oberon – Das neue Pascal |Auflage=1. |Verlag=Addison-Wesley |Datum=1995 |ISBN=3-89319-657-9 |Seiten=249}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;margin-top: 0; margin-left: 2em; text-align: left;&amp;quot;&lt;br /&gt;
|+ Terminologienvergleich&lt;br /&gt;
|-&lt;br /&gt;
! OOP-Terminologie&lt;br /&gt;
! Oberon-Terminologie&lt;br /&gt;
|-&lt;br /&gt;
| Klasse&lt;br /&gt;
| Zeigertyp, der einen Record-Typ mit Prozedurvariablen referenziert, welcher einen abstrakten Datentyp definiert&lt;br /&gt;
|-&lt;br /&gt;
| Objekt&lt;br /&gt;
| Zeigervariable, die auf eine Record-Variable dieses Typs zeigt&lt;br /&gt;
|-&lt;br /&gt;
| Methode&lt;br /&gt;
| Eine Prozedur des Record-Typs&lt;br /&gt;
|-&lt;br /&gt;
| Meldung senden&lt;br /&gt;
| Aufruf einer dynamisch gebundenen Prozedur&lt;br /&gt;
|-&lt;br /&gt;
| Unterklasse (Subclass)&lt;br /&gt;
| Erweiterter Record-Typ&lt;br /&gt;
|-&lt;br /&gt;
| Oberklasse (Superclass)&lt;br /&gt;
| Basistyp einer Erweiterung&lt;br /&gt;
|-&lt;br /&gt;
| Vererbung (Inheritance)&lt;br /&gt;
| Typerweiterung&lt;br /&gt;
|-&lt;br /&gt;
| Überschreiben einer Methode&lt;br /&gt;
| Ändern der einem Record-Feld zugewiesenen Prozedur in einer Erweiterung&lt;br /&gt;
|-&lt;br /&gt;
| Empfänger (Receiver)&lt;br /&gt;
| Das als Parameter übergebene Objekt bei einem Prozeduraufruf&lt;br /&gt;
|-&lt;br /&gt;
| Super-Aufruf&lt;br /&gt;
| Aufruf einer Prozedur, die an den Basistyp einer Erweiterung gebunden ist&lt;br /&gt;
|-&lt;br /&gt;
| Dynamisches Binden&lt;br /&gt;
| Aufruf einer Prozedurvariablen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Oberon hat im Vergleich zu seinem Vorgänger Modula-2 einen verminderten Befehlsumfang. In der damit erreichten Vereinfachung und Vereinheitlichung sahen Reiser und Wirth „echten Fortschritt“ beim Vermitteln wissenschaftlicher Grundlagen, da die Ausdruckskraft Oberon erhalten bliebe.&amp;lt;ref&amp;gt;{{Literatur |Autor=Martin Reiser, Niklaus Wirth |Titel=Programmieren in Oberon – Das neue Pascal |Auflage=1. |Verlag=Addison-Wesley |Datum=1995 |ISBN=3-89319-657-9 |Seiten=5}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oberon wurde wie auch schon Modula-2 parallel zu einer Workstation, in diesem Fall [[Ceres (Computersystem)|Ceres]], entwickelt. Oberon fand nach seiner Veröffentlichung unter anderem zu Bildungszwecken in Lehreinrichtungen Verwendung. Es existierten seinerzeit auf Oberon basierende, ebenfalls kostenlos verfügbare Werkzeuge, die auch kommerziell eingesetzt wurden, wie zum Beispiel die Programmiersprache [[Component Pascal]] und die [[integrierte Entwicklungsumgebung]] [[BlackBox Component Builder]].&lt;br /&gt;
&lt;br /&gt;
Wirth veröffentlichte Revisionen von Oberon in den Jahren 2007 und 2016.&amp;lt;ref&amp;gt;{{Literatur |Autor=Niklaus Wirth |Titel=The Programming Language Oberon |Datum=2016 |Sprache=en |Seiten=1 |Online=https://people.inf.ethz.ch/wirth/Oberon/Oberon07.Report.pdf}}&amp;lt;/ref&amp;gt; Im Rückblick wies er darauf hin, dass Oberon (im Jahr 2021) an „vielen Stellen“ im Einsatz gewesen sei, konstatierte jedoch, dass ein Durchbruch von Oberon im Gegensatz zu Pascal aufgrund „komplexer, kommerzieller Systeme mit weiter Verbreitung“ nicht stattgefunden habe.&amp;lt;ref&amp;gt;{{Literatur |Autor=Niklaus Wirth |Titel=Viewpoint: 50 Years of Pascal |Sammelwerk=Communications of the ACM |Band=64 |Nummer=3 |Verlag=Association for Computing Machinery |Datum=2021-03 |Sprache=en |Seiten=41}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Besonderheiten ===&lt;br /&gt;
[[Hanspeter Mössenböck]] und Wirth haben Oberon mit wenigen Ergänzungen zur Programmiersprache &amp;#039;&amp;#039;&amp;#039;Oberon-2&amp;#039;&amp;#039;&amp;#039; weiterentwickelt, die kompatibel zu Oberon ist. Wesentlich ist die Aufnahme von Prozeduren in den Befehlsumfang, die als Teil des Datentyps eines Objekts definiert werden können. Eine solche Prozedur erhält stets bei ihrem Aufruf eine Referenz auf das Objekt, über das ihr Aufruf erfolgt ist. Bei Oberon muss in diesem Fall eine Prozedur zunächst einer Prozedurvariablen des Objekts zur Laufzeit zugewiesen und, sofern benötigt, eine Referenz auf das Objekt als [[Parameter (Informatik)|Parameter]] der Prozedur bei ihrem Aufruf übergeben werden. Ferner wurden unter anderem die [[For-Schleife]] und die Exportmarkierung &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt; (als Alternative zu &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;) eingeführt, letzteres, um Variablen oder Objektkomponenten schreibgeschützt sichtbar zu machen.&amp;lt;ref name=&amp;quot;:0&amp;quot;&amp;gt;{{Literatur |Autor=Martin Reiser, Niklaus Wirth |Titel=Programmieren in Oberon – Das neue Pascal |Auflage=1. |Verlag=Addison-Wesley |Datum=1995 |ISBN=3-89319-657-9 |Seiten=277–279, 288}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mössenböck bezeichnet die Frage, ob die Konzepte des [[Modul (Software)|Moduls]] und der [[Klasse (Objektorientierung)|Klasse]] in Oberon gleichzeitig vorhanden sein müssten, als berechtigt, da beide eine Datenstruktur verstecken und nur über Prozeduren zugänglich machen können. Er begründet das gleichzeitige Vorhandensein mit einer unterschiedlichen Sichtbarkeit. Das Modul regelt die Sichtbarkeit von außen, während innerhalb eines Moduls sämtliche Bestandteile der enthaltenen Klassen sichtbar sind.&amp;lt;ref&amp;gt;{{Literatur |Autor=Hanspeter Mössenböck |Titel=Object-Oriented Programming in Oberon-2 |Auflage=2 |Verlag=Springer-Verlag |Datum=1994 |Sprache=en |Seiten=43 |Online=https://ssw.jku.at/Research/Books/Oberon2.pdf}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oberon sieht verglichen beispielsweise mit dem standardmäßigen Verhalten von [[C++]]&amp;lt;ref&amp;gt;{{Literatur |Autor=Bjarne Stroustrup |Titel=A Tour of C++ – Third Edition |Verlag=Pearson Education, Inc. |Datum=2023 |Sprache=en |ISBN=978-0-13-681648-5 |Seiten=79 |Zitat=In C++, you can plug in a garbage collector. However, I consider garbage collection the last choice after cleaner, more general, and better localized alternatives to resource management have been exhausted.}}&amp;lt;/ref&amp;gt; eine [[Garbage Collection|automatischen Speicherbereinigung]] (&amp;#039;&amp;#039;garbage collection&amp;#039;&amp;#039;) vor.&amp;lt;ref&amp;gt;{{Literatur |Autor=Martin Reiser, Niklaus Wirth |Titel=Programmieren in Oberon – Das neue Pascal |Auflage=1. |Verlag=Addison-Wesley |Datum=1995 |ISBN=3-89319-657-9 |Seiten=146}}&amp;lt;/ref&amp;gt; Damit wird die Verwendung von Programmanweisungen zur [[Allokation (Informatik)|Deallokation]] des von Objekten im [[Dynamischer Speicher|Heap]] belegten Speichers obsolet. Wird erneut freier Speicher für ein Objekt im Heap benötigt, wird dort zunächst der Speicher von allen Objekten freigegeben, die aus keinem der geladenen Module mehr referenziert werden.&amp;lt;ref&amp;gt;{{Literatur |Autor=Niklaus Wirth, Jürg Gutknecht |Titel=Project Oberon. The Design of an Operating System and Compiler |Verlag=Addison-Wesley |Datum=1992 |Sprache=en |ISBN=0-201-54428-8 |Seiten=241}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oberon verlangt, dass Operanden in Ausdrücken und die Bestandteile von Wertzuweisungen kompatibel sind, und nennt diese Forderung strenge [[Typisierung (Informatik)|Typisierung]]. Ein [[Compiler]] kann so prüfen, ob Ausdrücke oder Zuweisungen sinnvoll sind, so dass Programmierfehler bereits vor der Programmausführung erkannt werden.&amp;lt;ref&amp;gt;{{Literatur |Autor=Martin Reiser, Niklaus Wirth |Titel=Programmieren in Oberon – Das neue Pascal |Auflage=1. |Verlag=Addison-Wesley |Datum=1995 |ISBN=3-89319-657-9 |Seiten=48}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der im Rahmen des Oberon-Projekts von Wirth und Gutknecht entwickelte Compiler – Wirth hielt die Entwicklung einer Programmiersprache ohne einen dazugehörigen Compiler für anmaßend und unprofessionell –&amp;lt;ref&amp;gt;{{Literatur |Autor=Niklaus Wirth |Titel=From Programming Language Design to Computer Construction |Sammelwerk=Communications of the ACM |Band=28 |Nummer=2 |Verlag=Association for Computing Machinery |Datum=1985-02 |Sprache=en |Seiten=164}}&amp;lt;/ref&amp;gt; für die [[NS320xx|NS-32000-Mikroprozessorarchitektur]] hatte zum Ziel, selbst kompakt zu sein und eine schnelle Übersetzung von [[Quelltext]] in effizienten und knappen [[Maschinensprache|Maschinencode]] aufzuweisen.&amp;lt;ref&amp;gt;{{Literatur |Autor=Niklaus Wirth, Jürg Gutknecht |Titel=Project Oberon. The Design of an Operating System and Compiler |Verlag=Addison-Wesley |Datum=1992 |Sprache=en |ISBN=0-201-54428-8 |Seiten=VI}}&amp;lt;/ref&amp;gt; Der erzeugte Maschinencode überprüft standardmäßig zur Laufzeit, ob der für einen Zugriff auf ein [[Array (Datentyp)|Array]]-Element verwendete Index in dem Bereich liegt, der bei der [[Deklaration (Programmierung)|Deklaration]] des Arrays im Quelltext angegeben wurde. Ist dies nicht der Fall, liegt ein Fehler vor und die Programmausführung wird abgebrochen. Da die Indexprüfung einen zusätzlichen Laufzeitaufwand nach sich zieht, erlauben dieser und andere Compiler, sie per Option abzuschalten.&amp;lt;ref&amp;gt;{{Literatur |Autor=Niklaus Wirth, Jürg Gutknecht |Titel=Project Oberon. The Design of an Operating System and Compiler |Verlag=Addison-Wesley |Datum=1992 |Sprache=en |ISBN=0-201-54428-8 |Seiten=338, 360}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{Literatur |Autor=Martin Reiser, Niklaus Wirth |Titel=Programmieren in Oberon – Das neue Pascal |Auflage=1. |Verlag=Addison-Wesley |Datum=1995 |ISBN=3-89319-657-9 |Seiten=120}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Compiler erzeugt ebenso eine Liste von Zuordnungen zwischen Prozeduren und Variablen im Quelltext und dem entsprechend erzeugten Maschinencode. Damit kann im Fehlerfall bei einem Programmabbruch der letzte Zustand der Programmausführung angezeigt werden hinsichtlich der Folge der aufgerufenen Prozeduren und deren Variablen. Das dazu verwendete Werkzeug ist üblicherweise ein symbolischer [[Debugger]].&amp;lt;ref&amp;gt;{{Literatur |Autor=Niklaus Wirth, Jürg Gutknecht |Titel=Project Oberon. The Design of an Operating System and Compiler |Verlag=Addison-Wesley |Datum=1992 |Sprache=en |ISBN=0-201-54428-8 |Seiten=449, 451}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Quelltexte der Compiler waren in der Regel frei verfügbar. Es gab verschiedene integrierte Entwicklungsumgebungen wie zum Beispiel [[POW!]].&amp;lt;ref&amp;gt;{{Internetquelle |autor=Peter René Dietmüller |url=http://www.fim.uni-linz.ac.at/pow/pow.htm |titel=Pow! - Programmers Open Workbench |datum=2005-09-08 |sprache=en |abruf=2022-10-05 |kommentar=eine IDE zu Oberon}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Zeit, die ein Compiler benötigt, um seinen eigenen Quelltext in Maschinencode zu übersetzen, auch Selbstübersetzungszeit genannt, kann als Maß für die Qualität des Compilers angesehen werden.&amp;lt;ref&amp;gt;{{Literatur |Autor=Michael Franz |Titel=Oberon – The Overlooked Jewel |Hrsg=László Böszörményi, Jürg Gutknecht, Gustav Pomberger |Sammelwerk=The School of Niklaus Wirth: The Art of Simplicity |Verlag=dpunkt-Verlag |Ort=Heidelberg |Datum=2000 |Sprache=en |ISBN=3-932588-85-1 |Seiten=44 |Online=https://people.cis.ksu.edu/~danielwang/Investigation/System_Security/download.pdf |Zitat=He [Wirth] used the compiler’s self-compilation speed as a measure of the compiler’s quality.}}&amp;lt;/ref&amp;gt; Die Selbstübersetzungszeit eines Oberon-2-Compilers betrug im Jahr&amp;amp;nbsp;1991 mit einer [[DECstation|DECstation 5000]] ([[MIPS-Architektur|MIPS R3000]], 25&amp;amp;nbsp;[[Megahertz]]) lediglich 7&amp;amp;nbsp;Sekunden.&amp;lt;ref&amp;gt;{{Literatur |Autor=Marc M Brandis, Régis Crelier, Michael Franz, Josef Templ |Online=https://fruttenboel.nl/Oberon/data/p_obesys.pdf |Titel=The Oberon System Family |Sammelwerk=Software - Practice and Experience |Band=25 (12) |Hrsg=Institut für Computersysteme, ETH Zürich, Schweiz |Datum=1995-12 |Seiten=1331–1366 |Sprache=en |Abruf=2024-11-29}}&amp;lt;/ref&amp;gt; (&amp;#039;&amp;#039;Anmerkung:&amp;#039;&amp;#039; Auf modernen Computern ist die [[Taktsignal|Taktrate]] über einhundert Mal schneller, und die Selbstübersetzungszeit beträgt damit deutlich weniger eine Zehntelsekunde. &amp;#039;&amp;#039;Zum Vergleich&amp;#039;&amp;#039;: Im Jahr 1985 dauerte die Selbstübersetzung für den Modula-2-Compiler von Niklaus Wirth auf einem [[Lilith (Computersystem)|Lilith-Computer]] (vergleichbare Rechenleistung wie eine [[Virtual Address eXtension|VAX 750]]) knapp zwei Minuten.&amp;lt;ref&amp;gt;{{Literatur |Autor=Niklaus Wirth |Titel=A Fast and Compact Compiler for Modula-2 |Hrsg=ETH Zürich - Institut für Informatik |Ort=Zürich |Datum=1985-07 |Sprache=en |Seiten=2 |Online=https://www.research-collection.ethz.ch/bitstream/handle/20.500.11850/69199/eth-3296-01.pdf?sequence=1&amp;amp;isAllowed=y}}&amp;lt;/ref&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Code-Beispiele ==&lt;br /&gt;
Hello World im Ulmer Oberon-System:&amp;lt;ref&amp;gt;{{Internetquelle |autor=Andreas Borchert |url=https://www.mathematik.uni-ulm.de/oberon/0.5/lib/man/Streams.html |titel=Ulm&amp;#039;s Oberon Library: Streams |datum=2004-05-22 |sprache=en |abruf=2024-11-24}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;componentpascal&amp;quot;&amp;gt;&lt;br /&gt;
MODULE HelloWorld;&lt;br /&gt;
&lt;br /&gt;
IMPORT Write;&lt;br /&gt;
&lt;br /&gt;
BEGIN&lt;br /&gt;
&lt;br /&gt;
   Write.Line (&amp;quot;Hello World&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
END HelloWorld.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die objektorientierte Programmierung wird mit erweiterten [[Verbund (Datentyp)|Datenverbünden]] vom [[Datentyp]] &amp;lt;code&amp;gt;RECORD&amp;lt;/code&amp;gt; erreicht. Die Definition von Methoden wird durch typengebundene Prozeduren, und die Definition von Sichtbarkeiten durch Exportmarkierungen (&amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; für Schreib- und Lesezugriff und &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt; für Lesezugriff) erwirkt. Beispiel in Oberon-2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;componentpascal&amp;quot;&amp;gt;&lt;br /&gt;
MODULE Vererbung;&lt;br /&gt;
&lt;br /&gt;
TYPE&lt;br /&gt;
&lt;br /&gt;
   GraphischesObjekt* = POINTER TO GraphischesObjektBeschreibung; (* Das nachgestellte Malzeichen kennzeichnet einen Datentyp, der exportiert wird *)&lt;br /&gt;
   GraphischesObjektBeschreibung = RECORD farbe*: LONGINT; END; (* Das nachgestellte Malzeichen kennzeichnet ein exportiertes Attribut, auf das wahlfrei zugegriffen werden kann *)&lt;br /&gt;
&lt;br /&gt;
   Punkt* = POINTER TO PunktBeschreibung;&lt;br /&gt;
   PunktBeschreibung = RECORD (GraphischesObjekt) x*, y*: LONGINT; END; (* Punkt erbt die Eigenschaft &amp;quot;farbe&amp;quot; von GraphischesObjekt *)&lt;br /&gt;
&lt;br /&gt;
   Linie* = POINTER TO LinienBeschreibung;&lt;br /&gt;
   LinienBeschreibung = RECORD (GraphischesObjekt) xStart*, yStart*, xEnde*, yEnde*: LONGINT; END; (* Linie erbt die Eigenschaft &amp;quot;farbe&amp;quot; von GraphischesObjekt *)&lt;br /&gt;
&lt;br /&gt;
PROCEDURE (punkt: Punkt) Zeichne*; (* typgebundene Methode &amp;quot;Zeichne&amp;quot; für Instanzen vom Typ &amp;quot;Punkt&amp;quot; *)&lt;br /&gt;
BEGIN&lt;br /&gt;
   ...&lt;br /&gt;
END Zeichne;&lt;br /&gt;
&lt;br /&gt;
PROCEDURE (linie: Linie) Zeichne*; (* typgebundene Methode &amp;quot;Zeichne&amp;quot; für Instanzen vom Typ &amp;quot;Linie&amp;quot; *)&lt;br /&gt;
BEGIN&lt;br /&gt;
   ...&lt;br /&gt;
END Zeichne;&lt;br /&gt;
&lt;br /&gt;
CONST&lt;br /&gt;
&lt;br /&gt;
   ROT = 00000FFH; (* RGB *)&lt;br /&gt;
&lt;br /&gt;
VAR&lt;br /&gt;
&lt;br /&gt;
   punkt: Punkt;&lt;br /&gt;
   linie: Linie;&lt;br /&gt;
&lt;br /&gt;
BEGIN&lt;br /&gt;
&lt;br /&gt;
   NEW (punkt);&lt;br /&gt;
   punkt.farbe := ROT;&lt;br /&gt;
   punkt.x := 1;&lt;br /&gt;
   punkt.y := 1;&lt;br /&gt;
   punkt.Zeichne ();&lt;br /&gt;
&lt;br /&gt;
   NEW (linie);&lt;br /&gt;
   punkt.farbe := ROT;&lt;br /&gt;
   linie.xStart := 1;&lt;br /&gt;
   linie.yStart := 1;&lt;br /&gt;
   linie.xEnde  := 2;&lt;br /&gt;
   linie.yEnde  := 2;&lt;br /&gt;
   linie.Zeichne ();&lt;br /&gt;
&lt;br /&gt;
END Vererbung.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attribute, die nur einen Lesezugriff haben, können durch typengebundene Prozeduren (Methoden) verändert werden. Beispiel in Oberon-2:&amp;lt;ref&amp;gt;{{Literatur |Autor=Martin Reiser, Niklaus Wirth |Titel=Programmieren in Oberon – Das neue Pascal |Auflage=1. |Verlag=Addison-Wesley |Datum=1995 |ISBN=3-89319-657-9 |Seiten=144}}&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;componentpascal&amp;quot;&amp;gt;&lt;br /&gt;
MODULE Schreibschutz;&lt;br /&gt;
&lt;br /&gt;
TYPE&lt;br /&gt;
&lt;br /&gt;
   Objekt* = POINTER TO Objektbeschreibung; (* Das nachgestellte Malzeichen kennzeichnet einen Datentyp, der exportiert wird *)&lt;br /&gt;
   Objektbeschreibung = RECORD x-: INTEGER; END; (* Das nachgestellte Minuszeichen kennzeichnet ein exportiertes Attribut, auf das nur lesend zugegriffen werden kann *)&lt;br /&gt;
&lt;br /&gt;
PROCEDURE (objekt: Objekt) SetzeX* (wert: INTEGER); (* typgebundene Methode &amp;quot;SetzeX&amp;quot; *)&lt;br /&gt;
BEGIN&lt;br /&gt;
   objekt.x := wert; (* Schreibzugriff auf das Attribut &amp;quot;x&amp;quot; nur in typgebundener Methode *)&lt;br /&gt;
END SetzeX;&lt;br /&gt;
&lt;br /&gt;
VAR&lt;br /&gt;
&lt;br /&gt;
   objekt: Objekt;&lt;br /&gt;
   int: INTEGER;&lt;br /&gt;
&lt;br /&gt;
BEGIN&lt;br /&gt;
&lt;br /&gt;
   NEW (objekt); (* Erzeugen einer anonymen Variable vom Typ &amp;quot;Objektbeschreibung&amp;quot; und Initialisieren des Zeigers &amp;quot;objekt&amp;quot;, der damit diese Variable referenziert *)&lt;br /&gt;
   objekt.SetzeX (1); (* Schreibzugriff auf das Attribut &amp;quot;x&amp;quot; nur über Methodenaufruf *)&lt;br /&gt;
   int := objekt.x; (* Lesezugriff auf das Attribut &amp;quot;x&amp;quot; auch über Zuweisung *)&lt;br /&gt;
&lt;br /&gt;
END Schreibschutz.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weiterentwicklungen ==&lt;br /&gt;
Ausgehend von Oberon und Oberon-2 sind die Programmiersprachen [[Component Pascal]], [[Active Oberon]] und [[Zonnon]] entstanden.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Oberon microsystems]]&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* Hanspeter Mössenböck: [https://ssw.jku.at/Research/Books/Oberon2.pdf &amp;#039;&amp;#039;Object-Oriented Programming in Oberon-2.&amp;#039;&amp;#039;] 2. Auflage. Springer-Verlag, 1993, 1994 (englisch)&lt;br /&gt;
* {{BibISBN|3-89319-657-9|Kommentar=2. korrigierter Nachdruck 1997}}&lt;br /&gt;
* {{BibISBN|0-201-56543-9}}&lt;br /&gt;
* {{BibISBN|0-201-54428-8}}&lt;br /&gt;
* {{BibISBN|0-201-54422-9}}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* {{Internetquelle&lt;br /&gt;
   |url=http://projectoberon.net/&lt;br /&gt;
   |titel=Project Oberon&lt;br /&gt;
   |datum=2021-01-10&lt;br /&gt;
   |abruf=2023-11-16&lt;br /&gt;
   |kommentar=Project Oberon is a design for a complete desktop computer system from scratch.}}&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Normdaten|TYP=s|GND=4248282-3}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Freeware]]&lt;br /&gt;
[[Kategorie:Imperative Programmiersprache]]&lt;br /&gt;
[[Kategorie:Objektorientierte Programmiersprache]]&lt;br /&gt;
[[Kategorie:Bildungsorientierte Programmiersprache]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Player2072</name></author>
	</entry>
</feed>