
                                         Huntlosen, 6.9.89

Dies  ist  eine  PD-Version  der  graphischen  Programmiersprache
GOLEM, programmiert von Prof. Dr. W. Ebenh”h. Sie  ist  dadurch
eingeschr„nkt, daž keine selbsterzeugten Progamme abgespeichert
werden k”nnen. Golem soll ein kommerzielles Produkt werden, dazu
mssen noch einige Verbesserungen angebracht und Fehler beseitigt
werden. Wer Verbesserungsvorschl„ge oder gar Kaufinteresse hat,
den bitte ich um Kontaktaufnahme.
Bis Ende 1989 mit

Firma Trans-Data
Am Forst 2
2907 Huntlosen/Hosne
Tel. 04487/1406

Sp„ter auch direkt mit

Prof. Dr. W. Ebenh”h
Universit„t Oldenburg
Fachbereich Mathematik
29 Oldenburg
Tel. 0441/798 3231 (3237, 3219)

Hier noch ein kurzer Ausschnitt aus der Programmbeschreibung.
Die vollst„ndige Beschreibung liegt in Form eines Signum-Dokuments
vor, das bei Interesse auch angefordert werden kann. (Sowohl auf
Diskette als auch auf Papier fr Nicht-Signum-besitzer).


                   Prof. Dr. Wolfgang Ebenh”h
               Universit„t Oldenburg, FB Mathematik


  In  diesem  Teil  werden  allgemeine  Erkl„rungen  zur  graphischen
Programmiersprache und Programmierumgebung GOLEM gegeben. Im
zweiten  Teil  werden  die  elementaren  Techniken  an  Hand  von
einfachen Beispielen vorgestellt. Der dritte Teil besteht aus einer
systematischen  Darstellung  der  Struktur  von  GOLEM-Programmen
und der Programmerstellung mit GOLEM. Im vierten Teil sind  die
System-Bausteine aufgelistet, erl„utert und durch Beispiele illustriert.
Der abschliežende Teil enth„lt noch mehr Beispielprogramme und
kleine  Anwendungen,  die  die   andersartige   Denkweise   beim
Programmieren  mit  GOLEM  demonstrieren.  Die  kursiv  gedruckten
Begriffe werden im dritten Teil ausfhrlicher erl„utert und k”nnen
dort  nachgeschlagen  werden.  GOLEM  soll  in  dieser  Einfhrung
Beispiel-orientiert  vorgestellt  werden.  Der  interessierte  Anf„nger
wird zuerst den allgemeinen, ersten Teil lesen, dann im zweiten
Teil an Hand von einfachen Beispielen erfahren, "wie es gemacht
wird".  Gelegentliches  Studium  im  systematischen  Mittelteil  sowie
Betrachtung  (w”rtlich)  von  weiteren  Anwendungen  sollten  dem
fortgeschrittenen Benutzer spezifische Fragen schnell beantworten.
So wird die praktische Arbeit mit GOLEM nach einem Minimum an
theoretischem Vorlauf erm”glicht und kann hoffentlich Spaž machen.




1) Eigenschaften - Einsatzbereiche von GOLEM

1.1) Arbeiten mit GOLEM
___________________________________

    GOLEM ist eine vollst„ndig graphische Programmiersprache. Die
Programme werden als Fluždiagramme auf dem Bildschirm konstruiert.
Dadurch k”nnen sie aužerordentlich bersichtlich gestaltet werden -
oder bei schlechter Programmierung auch als verworrenes Kn„uel
erscheinen. Um die Progammerstellung zu erleichtern, ist GOLEM in
erster  Linie  eine  Programmierumgebung:  Das  Erzeugen  und  die
Zusammenstellung  von  Programmteilen  (Diagrammen)  auf  dem
Bildschirm,  sowie  ihre  Ver„nderung  wird  von  GOLEM  nicht  nur
untersttzt, vielmehr erfolgt die Programmierung in GOLEM gerade
durch solche Arbeiten. Die fertigen Programme werden interpretiert,
GOLEM kompiliert also nicht, sondern es agiert als Interpreter der
Informationsfluž-Diagramme. Die Diagramme sind "das  Programm",
sie  werden  von  GOLEM  durchlaufen  und  dabei  ausgefhrt.  Da
GOLEM  in  PASCAL  geschrieben  wurde,  ist  es  etwa  3-5  mal
langsamer als PASCAL. Unvermeidlich ist das Erlernen von GOLEM
mit  einer  erheblichen  Umgew”hnung  verbunden,  wenn  man  mit
anderen Programmiersprachen aufgewachsen ist. Doch gibt es unter
den Programmierern viele Žsthetiker - gerade die werden sich durch
GOLEM angesprochen fhlen, da sie mit dieser Programmiersprache
nicht nur  funktionelle  sondern  auch  „užerlich  sch”ne  Programme
gestalten k”nnen.

1.2) GOLEM fr die mathematische Modellierung
_____________________________________________________________________

    GOLEM ist fr sehr allgemeine Aufgabenstellungen verwendbar.
Es  wurde  jedoch  besonders  fr  Probleme  der  mathematischen
Modellierung,  fr  die  Simulation  dynamischer  Systeme,  seien  es
technische   Regelungssysteme   oder   z.B.   ™kosystemmodelle,
geschaffen. Solche Systeme werden oft mathematisch in Form von
Rekursionsformeln  oder  Differentialgleichungen  beschrieben.  Diese
sind  mit  GOLEM  wirkungsvoll  und  bequem  darzustellen.  Da  sich
Programmteile rekursiv aufrufen lassen, kann GOLEM auch gut fr
die  Simulation  von  Fraktalen  verwendet  werden.  GOLEM  erlaubt
sowohl die top-down als auch  die  bottom-up  Modellierung.  Das
heižt: man kann sich entweder von den globalen Beschreibungen zu
den Einzelheiten hinunter arbeiten und dabei Subprogramme als leere
Hlsen einbauen, die sp„ter gefllt werden. Oder man kann einfachere
Programmteile zu immer komplexeren Prozeduren zusammenfgen.

1.3) GOLEM als Unterrichtswerkzeug
____________________________________________________

    Durch   die   M”glichkeit,   Programme   oder   Algorithmen
zweidimensional  bersichtlich  darzustellen,  ist  GOLEM  auch  ein
hervorragendes  Werkzeug,  um  effektiv  Programmiertechniken  zu
unterrichten. GOLEM fhrt ganz automatisch zu einem Programmierstil,
bei  dem  Programmteile  hinsichtlich  Wiederverwendbarkeit  und
Unabh„ngigkeit geprft werden. Der Programmierer erzeugt Bausteine,
die alle einfach zu berblicken sind und vielfach verwendet werden
k”nnen. GOLEM zwingt ihn zu solchen Konstruktionen, ohne daž er
den  Zwang  fhlt.  Spagetthi-Programme  sind   unm”glich.   Der
Programmierer   wird   auch   dahin   gelenkt,   zusammengeh”rige
Informationen  als  Einheit  aufzufassen  (Records),  und  nur  da
aufzutrennen, wo es wirklich erforderlich ist.

1.4) GOLEM als Kommunikationshilfe
___________________________________________________

    In einem GOLEM-Programm sind die oberen Ebenen, auf denen
die Probleme global angegangen werden, und die Ebenen, auf denen
im  Detail  gearbeitet  wird,  bis  hinunter  zu  den  arithmetischen
Operationen,  separiert,  und  ein  Auf-  und  Absteigen  durch  die
Hierarchie ist leicht m”glich. Gerade weil die technischen Details in
tieferen Schichten versteckt werden k”nnen, und natrlich weil es
in   bersichtlicher   Diagrammform   vorliegt,   eignet   sich   ein
GOLEM-Programm  sehr  gut  als  Basis  fr  eine  Diskussion  mit
Nichtprogrammierern ber  das  programmierte  Problem.  Bei  einem
Programm aus Buchstaben und Zeichen ist das fast unm”glich, es
muž erst in ein Diagramm bersetzt  werden.  Bilder  haben  eben
eine starke, auch suggestive Aussagekraft.


2) Grundstruktur von GOLEM-Programmen

    Ein Programm in GOLEM besteht aus Diagrammen, deren Bausteine
in zweifacher Weise vernetzt sind:
  - Die eine Vernetzung geschieht optisch durch Linien, die die von
    den  Bausteinen  gemeinsam  verwendeten  und  durch  sie  v~
    er„nderlichen Informationen repr„sentieren (die Variablen), durch
    sie sind GOLEM-Programme Informationsfluž-Diagramme.
  - Die andere  Vernetzung  definiert  die  Reihenfolge,  in  der  die
    Bausteine  "ausgefhrt"  werden.  Diese  Vernetzung  umfažt
    Verzweigungen und Schleifenkonstruktionen.

Ein Diagramm enth„lt
  - Bausteine (unterschiedlich geformte Boxen mit Eing„ngen),
  - Variablen (Verbindungslinien, die an den Eing„ngen ansetzen),
 - die Ausfhrungsreihenfolge (Numerierung und Angabe bedingter
    Sprnge) sowie
 -  erl„uternde, nichtfunktionelle Informationen (III.3.9 und 10).

2.1) Bausteine
____________________

    Bausteine  verwerten  und  „ndern  die  ihnen  zug„nglichen
Informationen. Sie sind entweder einfache Operatoren ( wie + oder
sin ) oder Subprogramme, die sehr komplex sein k”nnen. In diesem
Fall ist der Baustein eine black box, die  ge”ffnet  werden  kann
(III.1.2): Dann erweist sich, daž er in sich ein GOLEM-Subprogramm
enth„lt, ein Diagramm, das wieder aus Variablen und  Bausteinen
besteht. Man kann die Leiter der Bausteine (Subprogramme) immer
weiter hinuntersteigen, bis entweder
 - nur noch elementare Operationen wie die Grundrechenarten oder
       die Basisfunktionen auftreten ("System-Bausteine", zu deren
       Innenleben der GOLEM-Benutzer  keinen  Zugang  hat  (IV)  )
       oder
 - bis man auf einen schon weiter oben in der Leiter stehenden,
       rekursiv verwendeten Baustein st”žt (in diesem Falle setzt
       sich die Leiter periodisch fort).
An der Spitze der Leiter steht der ausfhrbare Programm-Baustein.
Alle brigen Bausteine eines Programmes sind - wie die Prozeduren
in PASCAL - in der Regel nicht selbst„ndig ausfhrbar. Sie haben
Eing„nge, ber die sie die Informationen erreichen, die anderswo
bereitgestellt  werden,  und  ber  die  sie  Informationen  anderen
Bausteinen zur Verfgung stellen. Der Programm-Baustein zeigt seine
Selbst„ndigkeit, indem er keine solchen Eing„nge hat.
    Ein GOLEM-Programm ist also nicht ein Diagramm, sondern eine
ganze Hierarchie von Informationsfluž-Diagrammen. Sie ist durch die
Subprogrammstruktur geordnet, aber  es  ist  kein  Baum:  rekursive
Aufrufe sind m”glich, und das gleiche Diagramm, das heižt,  der
gleiche Baustein, kann an verschiedenen Stellen in der Hierarchie, in
unterschiedlich tiefen Schichten erscheinen.

2.2) Variablen
___________________

    Die  Variablen  sind  die  Informationstr„ger.  Sie  verbinden  die
Eing„nge der Bausteine (III.1.1). Variablen sind immer lokal, das heižt,
ihre Werte gelten nur innerhalb des Bausteines, dessen Subbausteine
sie verbinden. Wird der gleiche Baustein an anderen Stellen verwendet,
so sind die Werte der Variablen dort unabh„ngig von der Setzung
hier. Hierzu gibt es aber eine wichtige Ausnahme: Datei-Bausteine
(IV.9) sollen intern oder extern festgelegte Informationen (Datenfelder)
berall zug„nglich machen.
    Obwohl die Variablen als Verbindungslinien auftreten, haben sie
von selbst keine "Richtung", in der sie die Information transportieren.
Die Richtung des Informationstransportes wird durch die Reihenfolge
festgelegt, in der die Bausteine die Informationen produzieren und in
den Variablen (bildlich: auf den Linien) ablegen bzw. dort ablesen
und intern verwenden.
    Die Variablen tragen eine Variablentyp,  der  festlegt,  ob  die
Information aus einer Zahl oder einem String oder einem Booleschen
Wert  besteht,  oder  aus  mehreren  Zahlen  oder  aus  beliebigen
anderen Kombinationen der einfachen Typen Real, Integer, Boolean,
Char,   String.   Besondere   Bausteine   stehen   zur   Verfgung
(Record-Bausteine,  (IV.8)),  um  Variablen  mit  kombinierten  Typen
(Records) ganz oder teilweise in Teilvariablen aufzutrennen bzw.
aus ihnen zusammenzusetzen. Diese Bausteine werden nicht ausgefhrt
sondern wirken als Žquivalenzen aužerhalb der Ausfhrungsreihenfolge.
Durch Verwendung von kombinierten Variablen (Records) wird die
Zahl der Verbindungslinien auf das funktionell Notwendige beschr„nkt:
Es ist unn”tig, eine Linie fr die x- und eine fr die y-Koordinate
eines Punktes zu ziehen, wenn die Information "Punktkoordinaten"
bertragen  werden  soll.  (Solche  simplen  aber  fundamentalen
Einsichten  dr„ngen  sich  dem  GOLEM-Programmierer  schnell  auf
- darin liegt der didaktisch- methodische Wert von GOLEM).

2.3) Ausfhrungsreihenfolge
_______________________________________

    Die  ausfhrbaren  Bausteine  tragen  eine  Nummer,  wobei  die
Numerierung in jedem Teildiagramm bei 1 beginnt. Deshalb treten
immer nur kleine Zahlen auf - meistens wird 10 nicht berschritten,
selten  20.  GOLEM-Programme  sind  auch  gerade  dadurch  sehr
bersichtlich,  daž  jede  Ebene  der  Diagrammhierarchie  nur  eine
geringe, sofort berschaubare Anzahl von Bausteinen mit m”glichst
wenigen Verbindungslinien  enth„lt,  oder  vielmehr  enthalten  sollte.
Wird ein Diagramm zu verworren, dann ist fast stets eine st„rkere
Strukturierung m”glich und vorzuziehen.
    Die  normale  Ausfhrungsreihenfolge  entlang  dieser  Nummern
kann  durch   Schleifenkonstruktionen,   durch   bedingte   Sprnge,
durchbrochen werden (III.1.5 und IV.5). Dazu tragen die Bausteine
durch Festlegung des Programmierers gegebenenfalls einen weiteren
Hinweis,  der  angibt,  bei  welchem  Baustein  die  Ausfhrung
fortgesetzt wird, falls eine vorgegebene Bedingung erfllt ist.
    Die Schleifenkonstruktionen mit GOLEM sind sehr flexibel und -
wenn man sich erst einmal daran gew”hnt hat - sehr bequem, denn
eine Reihe  von  verschiedenen  Hilfsbausteinen  (Flaggen-Bausteine)
erm”glicht Strukturen analog zu repeat, while, loop und do. GOLEM
gibt  mehr  Freiheit  fr  den  Zeitpunkt,  an  dem  die  Bedingung
abgefragt wird, die zur Beendigung der Wiederholungen erfllt sein
muž.
    Weil die Ausfhrungsreihenfolge vom Programmierer vorgegeben
wird, ist GOLEM zu den prozeduralen Sprachen zu z„hlen. In einer
zuknftigen  Version  von  GOLEM  wird  jeder  Baustein  von  selbst
wissen, wann er seine Aufgabe erfllen soll oder darf. Besonders
im Hinblick auf eine parallele Berechnung von Teilaufgaben w„re
das wnschenswert.  Als  Zwischenl”sung  wird  das  gegenw„rtige
GOLEM durch eine flexiblere Festlegung der Ausfhrungsreihenfolge
dahin  erweitert  werden,  daž  die  Stellen,  in  denen  parallele
Berechnung  m”glich  ist,  vom  Programmierer  angegeben  werden
k”nnen.

2.4) Nichtfunktionelle Hinweise
____________________________________________

    Die GOLEM-Programme sind bersichtliche Diagramme, trotzdem
mssen sie beschriftet werden. Da in GOLEM Variablen-Namen nicht
funktionell sind, sollten die wichtigsten Variablen informell auf dem
Diagramm benannt werden. Dann kann man die Formel angeben, um
die Aktion des Bausteins zu beschreiben. Immer sollte mit grožen
Buchstaben der Baustein-Name aufgefhrt werden. Erst durch eine
geschickte   Dokumentation   gewinnt   ein   Diagramm   die   volle
Aussagekraft.
