Objektiv gesehen: OT/OB-Library

Eines der mysteriöseren Produkte von RUN!Software ist die OT/OB-Library. Wir haben sie uns einmal angeschaut.

Erstaunlicherweise wurde diese Library in der GFA-Welt bisher kaum wahrgenommen. So ist bei Produkten von RUN!Software fast immer die Rede von faceVALUE, BASTARD und ergo!pro. Die OT/OB-Library wurde hingegen nie getestet, wenn auch, im Rahmen eines GFA-Kurses, kurz vorgestellt.

Die OT/OB-Library ermöglich objektorientiertes Programmieren mit GFA-Basic. Dieses Konzept, was mittlerweile zur Grundausstattung jeder modernen Basic-Variante gehört, muss mit Hilfe einer Library "draufgepflanzt" werden.

Neue Variablentypen

Einfach gesagt lassen sich mit der OT/OB-Library neue Variablentypen anlegen. Bei der Typbildung wird zunächst ein allgemeines Objekt programmiert (z.B. für ein Menü), das dann später konkret für einen Fall gebraucht wird. Das Objekt wird dann später konkret für eine Sache eingesetzt. Da es mehrfach verwendbar ist, sind globale Variablen allerdings tabu - wobei dies auch ohne OT/OB-Library schon eine Art goldene Regel war.

Intern besteht das Objekt aber dann doch wieder aus bekannten und neuen Variablentypen. Das Objekt "bündelt" diese und wird wie ein neuer Variablentyp behandelt. Dadurch erhöht sich auch die Übersichtlichkeit.

Die neuen Variablentypen, die von der OT/OB-Library eingeführt werden, sind obtyp (Speicherung des Objekttyps) und link (Speicherung von Verweisen auf andere Objekte).

Für ihre Operationen benutzt die OT/OB-Library nicht den Variablenspeicher des Betriebssystems, sondern fordert dynamisch Speicher vom Betriebssystem an - zumindest darum muss sich aber der Programmierer nicht kümmern.

Draufgepropft

Was in anderen Programmiersprachen ganz intuitiv geht, da sie von Anfang an auf objektorientierte Programmierung ausgerichtet sind, ist in GFA-Basic etwas umständlich. Die OT/OB-Lib patcht GFA-Basic nicht, sondern kann nur versuchen, das Konzept in Form von Prozeduren und Funktionen in eine Library zu packen. Das gelingt zwar, aber die Programmierung bleibt dennoch eher umständlich und die Einarbeitungszeit ist höher. In der Anleitung befindet sich deshalb ein Beispiel über ein Fußballmanager-Spiel.

Dort wird ein Fußballspieler mit seinen Eigenschaften, wie etwa Spielstärke, Transferwert und Anzahl der Kneipenbesuche in einem Monat, definiert. Aus diesem Spieler-"Objekt" wird wiederum eine Mannschaft gebildet und aus den Mannschaften eine ganze Liga. Es ist dann ein leichtes, in einer Simulation die Mannschaften gegeneinander antreten zu lassen, wobei noch ein Zufallsgenerator hinzugefügt werden müsste, da die Ergebnisse sonst sehr vorhersehbar ausfallen.

Zum Setzen der Werte von einzelnen Eigenschaften kann natürlich nicht einfach LET genommen werden, da GFA von Objekten keine Ahnung hat. Deshalb hat die Library Funktionen wie word_set, string_set und einige andere, die Zuweisungen übernehmen.

Fazit

Die OT/OB-Library ist sicherlich ihr Geld wert. Es steckt schon ein grosser Aufwand dahinter, GFA-Basic Objekten beizubringen und zusätzlich noch die dafür notwendige dynamische Speicherverwaltung zu erstellen. Wenn man sich denn auch erst einmal an das System gewöhnt hat, lässt es sich gut damit programmieren.

Der Hauptnachteil aber bleibt, denn Libraries werden normalerweise für neue Befehle und Funktionen verwendet, und nicht, um einer Sprache ein neues Konzept beizubringen. Ein GFA-Basic mit eingebauter OT/OB-Library wäre deshalb erheblich einfacher zu durchschauen. Das dürfte auch ein Grund für die relativ geringe Resonanz auf die OT/OB-Libary sein. Natürlich löst sich niemand gerne von seinen Denkstrukturen und ein bereits fertiges Programm auf die OT/OB-Library umzustellen, wäre noch aufregender.

Am idealsten wäre es, wenn RUN!-Software um die Library herum einen neuen Basic-Interpreter aufbauen würden, im Idealfall auch gleich mit eingebautem faceVALUE. Dann wären GFA-Basic-Programme wieder, zumindest nach außen hin, klein und übersichtlich.

http://www.run-software.de


Mia Jaap
Aus: ST-Computer 01 / 2004, Seite 11

Links

Copyright-Bestimmungen: siehe Über diese Seite