<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Component_Pascal</id>
	<title>Component Pascal - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Component_Pascal"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Component_Pascal&amp;action=history"/>
	<updated>2026-05-17T10:02:43Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Component_Pascal&amp;diff=726894&amp;oldid=prev</id>
		<title>imported&gt;Treutwein: /* Weblinks */ toten link zum Tutorium nach archive.org verlinkt</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Component_Pascal&amp;diff=726894&amp;oldid=prev"/>
		<updated>2026-01-26T10:40:53Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Weblinks: &lt;/span&gt; toten link zum Tutorium nach archive.org verlinkt&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 = Component Pascal&lt;br /&gt;
| Logo = &lt;br /&gt;
| Beschreibung = Effizienter, schlanker Compiler für sicheren Programmcode&lt;br /&gt;
| Paradigma = [[Imperative Programmierung|imperativ]], [[Modulare Programmierung|modular]], [[Objektorientierte Programmierung|objektorientiert]], komponentenorientiert&lt;br /&gt;
| Erscheinungsjahr = 1990&lt;br /&gt;
| Entwickler = [[Niklaus Wirth]] /&amp;lt;br /&amp;gt; [[Oberon microsystems]]&lt;br /&gt;
| AktuelleVersion = 1.5&lt;br /&gt;
| AktuelleVersionFreigabeDatum = 2005, Release Candidate 1.6: 2007&lt;br /&gt;
| Typisierung = statisch und dynamisch, stark&lt;br /&gt;
| Implementierung = [[BlackBox Component Builder]], Gardens Point Component Pascal&lt;br /&gt;
| Dialekte = &lt;br /&gt;
| Beeinflusst_von = [[Modula-2]] / [[Oberon (Programmiersprache)|Oberon]]&lt;br /&gt;
| Beeinflusste = &lt;br /&gt;
| Betriebssystem = [[Windows]], Laufzeitsysteme [[.Net-Framework]] und [[Java Virtual Machine|JVM]]&lt;br /&gt;
| Lizenz = frei&lt;br /&gt;
| Website = [https://blackboxframework.org BlackBox Framework]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Component Pascal&amp;#039;&amp;#039;&amp;#039; ist eine seit 2004 kostenlose, seit [[1990]] entwickelte, [[Imperative Programmiersprache|imperative]], [[Modul (Software)|modulare]], [[Objektorientiert|objekt-]] und [[Komponente (Software)|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 dem [[.Net-Framework]] und unter der [[Java Virtual Machine]] lauffähig sind.&lt;br /&gt;
&lt;br /&gt;
Component Pascal ist aus der Programmiersprache [[Oberon (Programmiersprache)|Oberon]] entwickelt worden und firmierte bei der Veröffentlichung 1994 noch unter dem Namen Oberon/L. Das dazugehörende Framework wurde Oberon/F genannt. Mit dem Release 1.3 (das etwa zum Jahreswechsel 1996/1997 freigegeben wurde) wurde aus der Sprache Oberon/L Component Pascal und aus dem Framework Oberon/F der BlackBox Component Builder.&lt;br /&gt;
&lt;br /&gt;
Seit 2019 findet keine wesentliche Entwicklung mehr von Component Pascal statt.&amp;lt;ref&amp;gt;[https://blackboxframework.org/stable/blackbox-1.7.2-changes.html Letzte Stable-Version BlackBox Framework]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Eigenschaften ==&lt;br /&gt;
&lt;br /&gt;
Component Pascal hat eine ausgesprochen kurze und einfache Sprachbeschreibung mit einer vollständig strukturierten [[Syntax]]. Sie erlaubt [[Statische Typisierung|statische Typen]] und [[Objekt (Programmierung)|Objekte]] genauso wie [[Dynamische Typisierung|dynamische Typen]], sowie [[dynamische Bindung]]. Es handelt sich um eine sehr [[Starke Typisierung|stark typisierte]] und [[Typsicherheit|typsichere]] Programmiersprache, solange das Modul &amp;#039;&amp;#039;SYSTEM&amp;#039;&amp;#039; nicht explizit importiert wird, was in der Regel nur für [[Systemprogrammierung]] vorgesehen ist, und ist daher leicht [[Plattformunabhängigkeit|portabel]]. [[Vererbung (Programmierung)|Vererbung]] ist in der Programmiersprache verankert, nicht jedoch [[Vererbung (Programmierung)#Mehrfachvererbung|mehrfache Vererbung]], um zusätzliche Belastung für die [[Compiler]] zu vermeiden und die [[Formale Semantik|Sprachsemantik]] so eindeutig wie möglich zu gestalten und das [[Diamond-Problem]] zu vermeiden.&lt;br /&gt;
&lt;br /&gt;
Component Pascal unterstützt auch zur [[Laufzeit (Informatik)|Laufzeit]] [[automatische Speicherbereinigung]] und [[Linker (Computerprogramm)#Dynamisches Linken|dynamisches Laden und Entfernen]] von [[Modul (Software)|Modulen]] respektive [[Komponente (Software)|Komponenten]], auch während [[Objekt (Programmierung)|Instanzen]] bereits existieren und weiterverwendet werden sollen.&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus erlaubt Component Pascal [[Assertion (Informatik)|Assertionen]], [[generische Programmierung]] und das [[Überschreiben (Programmierung)|Überschreiben]] von Datentypen und somit auch [[Methode (objektorientierte Programmierung)|Methoden]] (sogenannte typengebundene [[Prozedur (Programmierung)|Prozeduren]]). Im Sinne der Einfachheit und besseren Nachvollziehbarkeit des Quellcodes ist das [[Überladen]] von Operatoren oder Methoden jedoch nicht möglich.&lt;br /&gt;
&lt;br /&gt;
Die Programmiersprache Component Pascal und das Entwicklungs- und Laufzeitsystem &amp;#039;&amp;#039;BlackBox Component Builder&amp;#039;&amp;#039; sind seit 2005 [[Open Source|quelloffen]].&lt;br /&gt;
&lt;br /&gt;
== Einsatzgebiete ==&lt;br /&gt;
&lt;br /&gt;
Component Pascal zeichnet sich durch seine geringen Ansprüche an die [[Hardware]], hohe Stabilität, [[Einfachheit]] und Schnelligkeit sowohl bei der [[Laufzeit (Informatik)|Laufzeit]] als auch bei der [[Softwaretechnik|Softwareentwicklung]] aus. Es wird vor allem für [[wissenschaftlich]]e und [[technisch]]e Anwendungen, in [[Lehren|Lehre]] und [[Forschung]], aber auch für [[kommerz]]ielle Anwendungen eingesetzt.&lt;br /&gt;
&lt;br /&gt;
== Programme ==&lt;br /&gt;
&lt;br /&gt;
=== Hallo Welt ===&lt;br /&gt;
&lt;br /&gt;
==== Das Programm &amp;#039;&amp;#039;Hallo Welt&amp;#039;&amp;#039; in Component Pascal 1. Beispiel ====&lt;br /&gt;
&lt;br /&gt;
Im [[Modul (Software)|Modul]] &amp;#039;&amp;#039;[[Hallo-Welt-Programm|HalloWelt]]&amp;#039;&amp;#039; wird das ([[Parameter (Informatik)|parameterlose]]) [[Kommandozeile|Kommando]] &amp;#039;&amp;#039;Output&amp;#039;&amp;#039; definiert. Der Stern (*) hinter dem [[Prozedur (Programmierung)|Prozedurnamen]] definiert den Export der Prozedur &amp;#039;&amp;#039;Output&amp;#039;&amp;#039;, so dass diese außerhalb des Moduls mit der [[Syntax]] &amp;#039;&amp;#039;HalloWelt.Output&amp;#039;&amp;#039; [[Referenz (Programmierung)|referenziert]] werden kann. Der folgende [[Quelltext]] stellt ein einfaches Programm dar, das die Meldung &amp;#039;&amp;#039;Hallo Welt!&amp;#039;&amp;#039; gefolgt von einem Zeilenumbruch ausgibt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ComponentPascal&amp;quot;&amp;gt;&lt;br /&gt;
 MODULE HalloWelt;&lt;br /&gt;
&lt;br /&gt;
 IMPORT Out;&lt;br /&gt;
&lt;br /&gt;
 PROCEDURE Output*;&lt;br /&gt;
 BEGIN&lt;br /&gt;
    Out.Open;&lt;br /&gt;
    Out.String (&amp;quot;Hallo Welt!&amp;quot;);&lt;br /&gt;
    Out.Ln;&lt;br /&gt;
 END Output;&lt;br /&gt;
&lt;br /&gt;
 END HalloWelt.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Das Programm &amp;#039;&amp;#039;Hallo Welt&amp;#039;&amp;#039; in Component Pascal 2. Beispiel ====&lt;br /&gt;
&lt;br /&gt;
Im [[Modul (Software)|Modul]] &amp;#039;&amp;#039;HalloWelt2&amp;#039;&amp;#039; wird eine Variable definiert, die später in einer Dialogbox ausgegeben wird. Der Stern (*) hinter dem [[Prozedur (Programmierung)|Prozedurnamen]] definiert den Export der Prozedur &amp;#039;&amp;#039;Output&amp;#039;&amp;#039;, so dass diese außerhalb des Moduls mit der [[Syntax]] &amp;#039;&amp;#039;HalloWelt.Output&amp;#039;&amp;#039; [[Referenz (Programmierung)|referenziert]] werden kann. Der folgende [[Quelltext]] stellt ein einfaches Programm dar, das die Meldung &amp;#039;&amp;#039;Hallo Welt!&amp;#039;&amp;#039; in einer Dialogbox ausgibt, die über &amp;quot;IMPORT Dialog;&amp;quot; importiert wurde. In der Dialogbox werden u.&amp;amp;nbsp;a. alle mit einem * gekennzeichneten Variablen ausgegeben. Mit &amp;quot;VAR ausgabe*: ARRAY 50 OF CHAR&amp;quot; wird festgelegt, dass eine &amp;lt;code&amp;gt;VAR&amp;lt;/code&amp;gt; Variable &amp;quot;ausgabe&amp;quot; angelegt werden soll, die 1.&amp;amp;nbsp;im Dialog sichtbar ist (&amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;) und 2.&amp;amp;nbsp;aus einer Aneinanderreihung von 50 Schriftzeichen besteht (ARRAY 50 OF CHAR)&lt;br /&gt;
Durch die Zeile &amp;quot;Dialog.UpdateString(ausgabe);&amp;quot; wird angeordnet, dass der Inhalt der Variable &amp;quot;ausgabe&amp;quot; der Dialogbox zugewiesen wird und sofort angezeigt wird.:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ComponentPascal&amp;quot;&amp;gt;&lt;br /&gt;
  MODULE HalloWelt2;&lt;br /&gt;
&lt;br /&gt;
  IMPORT Dialog;&lt;br /&gt;
&lt;br /&gt;
  VAR ausgabe*: ARRAY 50 OF CHAR;&lt;br /&gt;
&lt;br /&gt;
  PROCEDURE Output*;&lt;br /&gt;
  BEGIN&lt;br /&gt;
    ausgabe:= &amp;quot;Hallo Welt!&amp;quot; ;&lt;br /&gt;
    Dialog.UpdateString(ausgabe);&lt;br /&gt;
  END Output;&lt;br /&gt;
&lt;br /&gt;
 END HalloWelt2.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rechner ===&lt;br /&gt;
&lt;br /&gt;
==== Das Programm &amp;#039;&amp;#039;Additions-Rechner&amp;#039;&amp;#039; in Component Pascal 1. Beispiel ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ComponentPascal&amp;quot;&amp;gt;&lt;br /&gt;
 MODULE Kurs10Rechner;&lt;br /&gt;
 IMPORT Dialog;&lt;br /&gt;
&lt;br /&gt;
 VAR zahl1*, zahl2*, ergebnis*: INTEGER;&lt;br /&gt;
&lt;br /&gt;
   PROCEDURE add*;&lt;br /&gt;
   BEGIN&lt;br /&gt;
      ergebnis := (zahl1 + zahl2);&lt;br /&gt;
      Dialog.UpdateInt (ergebnis);&lt;br /&gt;
   END add;&lt;br /&gt;
&lt;br /&gt;
 END Kurs10Rechner.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Beispiele für die Implementierung von Vererbung ==&lt;br /&gt;
Die [[Implementierung]] von vererbbaren Strukturen ist bei Component Pascal gegenüber seinem Vorgänger [[Oberon (Programmiersprache)|Oberon]] etwas vereinfacht und noch klarer und sicherer strukturiert worden. Die Bemerkungen zwischen &amp;lt;code&amp;gt;(*&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;*)&amp;lt;/code&amp;gt; dienen zur Erläuterung und werden vom Compiler ignoriert. Beispiele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ComponentPascal&amp;quot;&amp;gt;&lt;br /&gt;
 MODULE Vererbung1;&lt;br /&gt;
&lt;br /&gt;
 TYPE (* Typendefinitionen *)&lt;br /&gt;
&lt;br /&gt;
    GraphischesObjekt* = POINTER TO ABSTRACT RECORD farbe*: INTEGER; END;&lt;br /&gt;
    Punkt* = POINTER TO RECORD (GraphischesObjekt) x*, y*: INTEGER; END;&lt;br /&gt;
    Linie* = POINTER TO RECORD (GraphischesObjekt) xStart*, yStart*, xEnde*, yEnde*: INTEGER; END;&lt;br /&gt;
&lt;br /&gt;
 VAR (* Variablendefinitionen *)&lt;br /&gt;
&lt;br /&gt;
    punkt1: Punkt;&lt;br /&gt;
    linie1: Linie;&lt;br /&gt;
&lt;br /&gt;
 PROCEDURE (g: GraphischesObjekt) Zeichne* (), NEW, EXTENSIBLE;&lt;br /&gt;
 BEGIN&lt;br /&gt;
    (* Leere, erweiterbare Methode *)&lt;br /&gt;
 END Zeichne;&lt;br /&gt;
&lt;br /&gt;
 PROCEDURE (punkt: Punkt) Zeichne* ();&lt;br /&gt;
 BEGIN&lt;br /&gt;
    (* ... *)&lt;br /&gt;
 END Zeichne;&lt;br /&gt;
&lt;br /&gt;
 PROCEDURE (linie: Linie) Zeichne* ();&lt;br /&gt;
 BEGIN&lt;br /&gt;
    (* ... *)&lt;br /&gt;
 END Zeichne;&lt;br /&gt;
&lt;br /&gt;
 BEGIN&lt;br /&gt;
&lt;br /&gt;
    NEW (punkt1);&lt;br /&gt;
    punkt1.farbe := 0FFH; (* Objektfarbe wird auf 0FF (&amp;quot;H&amp;quot; für hexadezimal) gesetzt *)&lt;br /&gt;
    punkt1.x := 1;&lt;br /&gt;
    punkt1.y := 1;&lt;br /&gt;
    punkt1.Zeichne ();&lt;br /&gt;
&lt;br /&gt;
    NEW (linie1);&lt;br /&gt;
    linie1.farbe := 07FH; (* Objektfarbe wird auf 07F (&amp;quot;H&amp;quot; für hexadezimal) gesetzt *)&lt;br /&gt;
    linie1.xStart := 1;&lt;br /&gt;
    linie1.yStart := 1;&lt;br /&gt;
    linie1.xEnde  := 2;&lt;br /&gt;
    linie1.yEnde  := 2;&lt;br /&gt;
    linie1.Zeichne ();&lt;br /&gt;
&lt;br /&gt;
 END Vererbung1.&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. Der Export entsprechender Identifizierer, die außerhalb der objekteigenen Module nur gelesen werden können, wird nicht durch &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;, sondern durch &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt; gekennzeichnet. Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ComponentPascal&amp;quot;&amp;gt;&lt;br /&gt;
 MODULE Vererbung2;&lt;br /&gt;
&lt;br /&gt;
 TYPE&lt;br /&gt;
&lt;br /&gt;
    Objekt* = POINTER TO RECORD x-: INTEGER; END; (* Kommentar: außerhalb des Moduls &amp;quot;Vererbung2&amp;quot; ist kein direkter Schreibzugriff auf das Attribut &amp;quot;x&amp;quot; möglich *)&lt;br /&gt;
&lt;br /&gt;
 PROCEDURE (objekt: Objekt) setzeX* (wert: INTEGER), NEW; (* Kommentar: für den indirekten Schreibzugriff auf das Attribut &amp;quot;x&amp;quot; *)&lt;br /&gt;
 BEGIN&lt;br /&gt;
    objekt.x := wert;&lt;br /&gt;
 END setzeX;&lt;br /&gt;
&lt;br /&gt;
 END Vererbung2.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ComponentPascal&amp;quot;&amp;gt;&lt;br /&gt;
 MODULE AnderesModul;&lt;br /&gt;
&lt;br /&gt;
 IMPORT Vererbung2;&lt;br /&gt;
&lt;br /&gt;
 VAR&lt;br /&gt;
&lt;br /&gt;
    objekt1: Vererbung2.Objekt;&lt;br /&gt;
    int: INTEGER;&lt;br /&gt;
&lt;br /&gt;
 BEGIN&lt;br /&gt;
&lt;br /&gt;
    NEW (objekt1);&lt;br /&gt;
    objekt1.setzeX (1); (* Kommentar: die Anweisung &amp;quot;objekt1.x := 1&amp;quot; ist außerhalb des Moduls &amp;quot;Vererbung2&amp;quot; nicht möglich *)&lt;br /&gt;
    int := objekt1.x;  (* Kommentar: direkter Lesezugriff auf das Attribut &amp;quot;&amp;quot;x ist möglich *)&lt;br /&gt;
&lt;br /&gt;
 END AnderesModul.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* Karlheinz Hug: &amp;#039;&amp;#039;Module, Klassen, Verträge. Ein Lehrbuch zur komponentenorientierten Softwarekonstruktion mit Component Pascal&amp;#039;&amp;#039;. Vieweg Verlagsgesellschaft, 2001&lt;br /&gt;
* J. Stanley Warford: &amp;#039;&amp;#039;Computing Fundamentals - The Theory and Practice of Software Design with BlackBox Component Builder&amp;#039;&amp;#039;. Vieweg, 2002&lt;br /&gt;
* Markus Bautsch: &amp;#039;&amp;#039;Cycles of Software Crises&amp;#039;&amp;#039;. In: [http://www.enisa.europa.eu/publications/eqr/issues/eqr-q4-2007-vol.-3-no.-4 ENISA Quarterly on &amp;#039;&amp;#039;Secure Software&amp;#039;&amp;#039;] (PDF; 2 MB)&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [https://blackboxframework.org BlackBox Framework] &lt;br /&gt;
* [http://www.zinnamturm.eu/ Sammlung von Quellen für Component Pascal]&lt;br /&gt;
* {{Webarchiv|url=http://www.cfbsoftware.com/gpcp | wayback=20150119165207 | text=Component Pascal Resources}}&lt;br /&gt;
* {{Webarchiv|url=http://plas.fit.qut.edu.au/gpcp/Downloads.aspx | wayback=20120324161020 | text=Gardens Point Component Pascal}}&lt;br /&gt;
* {{Webarchiv|url=http://www.lahini.de/daten/tutorium/tutorium.pdf | wayback=20070706175140 | text=Tutorium Component Pascal}}&lt;br /&gt;
* {{Webarchiv|url=http://www.oberon.ch/pdf/CP-Lang.pdf | wayback=20191021025943 | text=Sprachdefinition (PDF; 221 kB)}}&lt;br /&gt;
* {{Webarchiv|url=http://www.oberon.ch/news/newnames.html | wayback=19970227054638 | text=Ankündigung BlackBox 1.3 (1997)}}&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Freeware]]&lt;br /&gt;
[[Kategorie:Objektorientierte Programmiersprache]]&lt;br /&gt;
[[Kategorie:Pascal (Programmiersprache)]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Treutwein</name></author>
	</entry>
</feed>