POW! (Programmers Open Workbench)POW! – Programmers Open Workbench ist eine in Oberon-2 geschriebene Programmierumgebung. Oberon und Oberon-2 sind konsequente Weiterentwicklungen der Programmiersprache Pascal, wobei es auch noch den Zwischenschritt Modula-2 gibt. Die integrierte Entwicklungsumgebung hat Ähnlichkeiten mit der IDE des Vorläufers Turbo Pascal. POW! wurde in den 1990er Jahren an der Johannes Kepler Universität Linz, vorwiegend durch Studenten unter der Leitung von Jörg R. Mühlbacher für Microsoft Windows entwickelt. POW! ist kostenlos erhältlich und die Quelltexte sind sowohl auf der Homepage als auch auf Github zu finden.Github/Spirit of Oberon/POW abgerufen im Juli 2020 Der Installer lässt sich unter Windows 10 nicht ohne Weiteres starten, eine mit Wine (Version 4.0) unter Linux (Debian 10, Buster) installierte Version startet aber problemlos. POW! unterstützt die Programmiersprachen Oberon-2, C, C++ und Java.Das Projekt POW! (Microsoft Word; 1,5 MB) abgerufen im Juni 2011

Verwendung POW! eignet sich vorwiegend zum Programmieren von einfachen und komplexeren, mathematischen Programmen. Im Modul ColorPlane sind zwar auch einfache Grafikoptionen zu programmieren, dennoch sind keine komplexen grafisch-orientierten Programme möglich. Die Darstellung von Objekten und Grafiken beansprucht eine hohe Rechenleistung und benötigt daher viel Zeit. POW! eignet sich trotz seiner einfachen Struktur zum objektorientierten und rekursiven Programmieren. Damit kann das Programm Sachverhalte schneller lösen. Die Stärke dieser Programmiersprache liegt in der Erfüllung der Aufgaben, auch von komplexen Programmen. Die Darstellung gestaltet sich hingegen schwieriger, da es keine Optionen für Tabellen oder ähnliche Vorlagen gibt. Durch die Verwendung von einfachen und komplexen Datentypen kann der benötigte Speicherplatz sehr gering gehalten werden. Durch die Aufteilung in verschiedene Module kann die Aufgabe auf verschiedene Weisen mit den bestehenden Mitteln bestmöglich erfüllt werden. Es werden nur die benötigten Funktionen aktiviert. Dadurch wird Arbeitsspeicher sowie Zeit für das Lösen der Algorithmen gespart.

Funktionen miniatur|Einfaches Matheprogramm im Modul Display Ein Programm kann in mehrere Teilprogramme gesplittet werden, die wiederum verschiedene Module enthalten. Dabei kann ein Modul ein bereits existierendes Teilprogramm sein oder ein selbst geschriebenes Programm. Jedes Teilprogramm kann aus einzelnen Prozeduren bestehen, die wiederum in anderen Modulen aufgerufen werden können oder aber auch nur für das Modul, in dem es enthalten ist, zugänglich ist.

Module Oberon-POW! verfügt über eine Anzahl von einfachen sowie komplexeren Modulen. Mithilfe von einfachen Modulen, wie zum Beispiel Display, Import, Export, können Zeichen, Zahlen und Texte ausgegeben werden. Unter Verwendung des Moduls ColorPlane können Objekte grafisch dargestellt werden. Komplexe grafische Objekte wie Kreise müssen berechnet und punktweise (pixelweise) ausgegeben werden. Die führt zu einer langen Rechenzeit. Daher ist POW! für die Ausgabe solcher Objekte eher ungeeignet. Durch die Benutzung von weiteren Modulen sind Funktionen wie Wurzelziehen, Zeit ermitteln, Speichern, Laden oder Zufallszahl ermitteln möglich. Dem User stehen von Anfang an durch POW! bereits einige Module zur Verfügung.Module in POW! Dabei erzeugen einige Module ein eigenes Fenster und dienen der Darstellung, andere hingegen sind nur für die reinen Rechenoperationen vorgesehen. miniatur|Vier gewinnt im Modul ColorPlane Die sogenannten „Grundbausteine“ sind: Strings Float Utils OOBase Param Process

Dann gibt es bestimmte „Benutzerschnittstellen“. Das sind die Module, die für eine Ausgabe von Zeichen und Grafiken benötigt werden: Display ColorPlane

Des Weiteren sind Module für das Speichern und Laden der eingegebenen Dateien vorhanden. Zu diesem „Dateisystem-Zugang“ zählen: File Volume miniatur|Ausgabe des ASCII-Code im Module Out POW! verfügt auch über ein Modul, das das Ausdrucken der Ausgabe ermöglicht. Dies ist im folgenden Modul enthalten: Print

Zu guter Letzt verfügt POW! über weitere Module, die den sogenannten „Kompatibilitätsmodule entsprechend den Oakwook-Richtlinien“ zugeordnet werden können. Dazu zählen: In Out XYplane

Es gibt weitere Module, die nicht von POW! aus zur Verfügung stehen, die aber kostenlos geladen, benutzt und verändert werden können. Diese Programme wurden von Michael W. Kühn entwickelt und laufen unter dem Namen MK Software.Michael Kühn Software Folgende Module stehen zur Verfügung: MK TurtleMK Turtle Stoppuhr ZufallsgeneratorPOW! Zufallsgenerator

Prozeduren Prozeduren dienen dazu, den Quelltext übersichtlicher zu gestalten und dass immer wiederkehrende Aufgaben nicht mehrere Male geschrieben werden müssen. Eine Prozedur kann Informationen entgegennehmen und ausgeben sowie bestimmte Zustände ändern. Je mehr Parameter entgegengenommen werden, umso weitläufiger lässt sich die Prozedur einsetzen.

Jede Prozedur kann auf ihre lokalen und die globalen Variablen bzw. Datentypen zugreifen. Eine Prozedur entsteht durch die sinnvolle Aneinanderreihung von einzelnen Befehlen, die die Programmiersprache zur Verfügung stellt. Solche Befehle können Aus- oder Eingabebefehle sein, es können Rechenoperationen oder Schleifen. Wobei Schleifen, Rechenoperationen und Umwandelbefehle in jedem Modul gleich, Aus- und Eingabebefehle jedoch unterschiedlich sein können. Darüber hinaus gibt es Befehle, die nur in einzelnen Modulen enthalten sind, wie zum Beispiel das Wurzelziehen oder die Übergabe einer bestimmten Koordinate.

Prozeduren können entweder Modul-intern oder -extern sein. Interne Prozeduren können in dem ganzen Modul genutzt werden. Dafür muss die entsprechende Prozedur im Hauptprogramm aufgerufen werden. Des Weiteren gibt es die Möglichkeit, Prozeduren im Hauptprogramm zu nutzen, auch wenn diese in anderen Modulen enthalten sind. Dafür muss die entsprechende Prozedur freigegeben werden. Dies erfolgt durch das Sternsymbol (*). Außerdem muss das Modul, in dem die besuchte Prozedur ist, in dem Modul importiert werden, welches das Hauptprogramm enthält.

Die wichtigste Prozedur in einem POW!-Programm ist das Hauptprogramm (ProgMain*). Dieses Programm ist für die Ausgabe verantwortlich. Im Hauptprogramm müssen die verwendeten Prozeduren direkt oder indirekt, durch andere Prozeduren, in denen sie verwendet werden, aufgerufen werden. Das Hauptprogramm kommuniziert mit dem Compiler und der Windows-Oberfläche. Es muss daher auch veröffentlicht werden und wird daher auch mit dem Sternsymbol erweitert.

Befehle

Jede Programmiersprache besteht aus Befehlen, die sinnvoll aneinandergereiht die Prozeduren und den Quelltext ergeben. Solche Befehle können entweder modulabhängig sein oder von der Programmiersprache vorgegeben sein. Modulabhängig sind Einlese- oder Ausgabebefehle. Diese unterscheiden sich unter den verschiedenen Modulen. Unabhängig sind hingegen Wiederholungsanweisungen, Wertzuweisungen und Auswahlanweisungen. Bei den Wertzuweisungen wird den Variablen ein bestimmter Zustand oder Wert, je nach Datentyp, zugeordnet. Die Wiederholungsanweisungen dienen dazu, eine bestimmte Bedingung abzuwarten oder sich selbst so lange zu wiederholen, bis die Abbruchbedingung zutrifft. Die einfachste dieser Anweisungen ist die FOR-Schleife. Hierbei wird von vornherein eine bestimmte Anzahl an Durchläufen vorgegeben. Der Inhalt der Schleife wird so oft wiederholt, bis die Anzahl der Wiederholungen erreicht ist. Eine zweite Art von Wiederholungsanweisungen ist die REPEAT-Anweisung. Diese Schleife läuft so oft durch, bis die Abbruchbedingung bei UNTIL zutrifft. Dabei ist zu beachten, dass diese Schleife mindestens einmal durchläuft. Im Gegensatz dazu gibt es die WHILE-Schleife. Diese überprüft ganz am Anfang, ob die Bedingung für einen Schleifendurchlauf zutrifft oder nicht. Diese Anweisung kann auch keinmal durchlaufen werden. Wenn die Auswahlbedingung nicht zutrifft, läuft die Schleife nicht. Die letzte Möglichkeit ist der LOOP. Diese Anweisung verfügt über keine Abbruchbedingung und muss durch eine separate Prüfung abgebrochen werden. Wenn die Prüfung ein Ergebnis bringt, dann wird der Befehl EXIT gegeben, wodurch diese Schleife beendet wird.

Eine weitere Art von Befehlen sind die Auswahlanweisungen. Zu ihnen gehören CASE und IF. Bei der CASE-Anweisung wird eine Variable überprüft, ob sie eine der entsprechenden Bedingungen erfüllt. Je nach Lösung wird der besagte "Zweig" ausgeführt. Die IF-Anweisung ist die Überprüfung, ob eine Bedingung zutrifft oder nicht. Trifft die Bedingung zu, wird der Inhalt der IF-Anweisung ausgeführt. Ansonsten wird der ELSE-Zweig ausgeführt. Sollte dieser nicht vorhanden sein, wird die Anweisung übersprungen.

Datentypen Im Gegensatz zu manch anderen Programmiersprachen muss bei Oberon-POW! der Datentyp, in den die Informationen gespeichert werden, festgelegt werden. Ähnlich wie Prozeduren können auch Datentypen für andere Module freigegeben werden. Es gibt drei Möglichkeiten, die Variablen zu vereinbaren. Die erste Möglichkeit ist die lokale Vereinbarung. Hierbei kann die Variable ausschließlich für die Prozedur verwendet werden. Vor allem Hilfsvariablen (Laufvariablen) werden lokal vereinbart. Die zweite Möglichkeit ist die globale Bestimmung des Datentyps. Die Variablen müssen dafür im Hauptprogramm oder vor der ersten Prozedur festgelegt werden. Diese Variablen können im ganzen Modul verwendet werden und stellen den überwiegenden Teil der Speicherplatzzuweisungen dar. Die dritte Art von Variablen können in allen Modulen benutzt werden. Hierfür muss wie bei den Prozeduren verfahren werden. Die Variable muss mit dem Sternsymbol (*) freigegeben werden und das Modul, in dem die Variable bestimmt wird, muss importiert werden. Diese Art der Zuweisung erfolgt bei langen Programmen, die über mehrere Module arbeiten.

Einfache Datentypen Einfache Datentypen sind diejenigen, in denen nur ein Wert gespeichert werden kann. Dabei wird nach der Art der Datei unterschieden.

Folgende Strukturen sind einfache Datentypen:

Typ Bereich Speicherbedarf Art der Dateistruktur Shortinteger −128 bis 127 1 Byte ganze Zahlen Integer −32768 bis 32767 2 Byte ganze Zahlen Longinteger −2.15*e9 bis 2.15*e9 4 Byte ganze Zahlen Real −3.4*e28 bis 3.4*e28 4 Byte reelle Zahlen Longreal −1.79*e308 bis 1.79*e308 8 Byte reelle Zahlen Boolean TRUE / FALSE 1 Byte Wahrheitswert Charakter ASCII CODE 32–255 1 Byte Zeichen des ASCII-Code Set Menge der Zahlen von 0 bis 31 max. 64 Byte Wird für bestimmte Operationen benötigt

Es gibt die Möglichkeit, die einzelnen, einfachen Datenstrukturen in andere abstrakte Datenstrukturen umzuwandeln. Diese Befehle sind modulextern und können immer angewandt werden.

Abstrakte Datentypen Komplexe Datentypen können sowohl einfache als auch komplexe Datentypen enthalten. Dies können sein ARRAY RECORD Liste

Array Ein Array ist eine Aneinanderreihung von einfachen Datentypen desselben Typs. Arrays, Listen, Matrizen und Strings sind solche komplexen Datentypen. Ein Array besteht aus einer vorherbestimmten Anzahl an Elementen, welche systematisch durchnummeriert sind, wodurch jedem Element eine Zahl zugeordnet werden kann. Der Inhalt dieses Elements ist die gespeicherte Datei. Eine Liste hingegen enthält nur so viele Elemente, wie auch "besetzt" sind. Dadurch kann Speicherplatz gespart werden. Jedoch sind die Elemente nicht durchnummeriert. Um an den Inhalt eines Elementes zu gelangen, muss erst die ganze Liste durchgegangen werden bis zu dem besagten Element.