•  Back 
  •  Moderne Zeiten 
  •  Index 
  •  Tree View 
  •  Cross references 
  •  ATOS Hilfe 
  •  Show info about hypertext 
  •  View a new file 
Topic       : Das ATOS-Magazin 1/99
Author      : Das ATOS-Team
Version     : 28.5.1999
Subject     : ATOS Diskettenmagazine
Nodes       : 206
Index Size  : 8104
HCP-Version : 5
Compiled on : Atari
@charset    : atarist
@lang       : 
@default    : 
@help       : ATOS Hilfe
@options    : -i -s -h+zz -t2
@width      : 70
View Ref-File
index=190
ATOS Programmierpraxis
index=190
Moderne Zeiten Objekttypen in informationellen Systemen Das ATOS-Magazin 1/99 Die im Folgenden gemachten Aussagen lassen sich im Allgemeinen auch auf beliebige technische Systeme übertragen. Hier soll die Konzentra- tion aber verständlicherweise auf informationellen Systemen liegen, also auf Systemen, die Information darstellen, übertragen oder verar- beiten. Und damit wurden auch schon die drei Systemtypen, die in der Informa- tionstechnik auftreten, genannt: informationsdarstellende Systeme: Systeme, die der Darstellung von Information dienen, nennt man Strukturpläne. Das Aufbaubild der GFA-Basic-Entwicklungsumgebung, das eingangs gezeigt wurde, ist ein solcher Strukturplan. Struktur- pläne sind also statische Systeme, die nichts mit dem Ablauf der Zeit zu tun haben. Sie vermitteln lediglich Information, und zwar Information über andere Systeme. Deshalb sind Strukturpläne von großer Bedeutung, wenn es darum geht, andere Systeme zu entwerfen und zu beschreiben. informationsübertragende Systeme: Diese Systeme dienen der Übertragung von Information. Mal abgesehen davon, daß es im Falle der Telepathie vielleicht anders sein mag, wird zur Informationsübertragung immer ein verformbares Medium be- nötigt. Bspw. ist ein Blatt Papier durch Bekritzeln mit einem Bleistift "verformbar". Auch die Luft läßt sich durch Druckänderun- gen (Schallwellen) verformen, so daß sie sich als Medium eignet. Ein Medium kann zur Informationsübertragung genutzt werden, in dem man sich verschiedene mögliche Formen herausgreift und diesen eine Bedeutung zuordnet. Es muß also eine Sprache vereinbart werden. Die Formen, die durch die Sprache eine Bedeutung erhalten, nennt man Werte. In der Tat haben sie nur für jemanden, der die Sprache kennt, auch einen Wert, für alle anderen sind diese Formen wertlos. Zur Informationsübertragung muß man also letztendlich Formen übertragen. Wichtig ist, daß man zwischen zwei grundverschiedenen Übertragungsarten unterscheidet: örtliche Übertragung: Ein Medium, das Information über eine örtliche Distanz überträgt, nennt man (wie schon angesprochen) Kanal. Bekannte Medien diesen Typs wären Fernsehen, Rundfunk oder Telefon. zeitliche Übertragung: Die zeitliche Übertragung findet hingegen in Speichern statt. Beispiele wären etwa ein Geschichtsbuch oder das RAM eines Rechners. informationsverarbeitende Systeme: Systeme diesen Typs verarbeiten Information. Man könnte zum Bei- spiel die Information "Steffi hat am 19. August Geburtstag" mit seinem Wissen über Astrologie derart "verarbeiten", daß man am Ende weiß, daß Steffis Sternzeichen der Löwe ist. Informationsverarbei- tung bringt keinen faktischen Wissenszuwachs. Das Wissen wird aber in eine neue Form gebracht, mit der man dann vielleicht besser umzugehen weiß. Diese neue Form dann ebenfalls (sozusagen auswen- dig) zu kennen, bringt also schon einen Wissenszuwachs, nur eben keinen faktischen. Maschinen verarbeiten natürlich keine Informationen, sondern nur Formen. Die Formverarbeitungsprozesse lassen sich dabei aber als Informationsverarbeitungsprozesse interpretieren. Wenn z.B. ein Taschenrechner nur durch Hin- und Herbewegen von Ladungen in seinen elektrischen Bauteilen und durch Umdrehen von Kristallen in seinem Display uns "mitteilt", daß die Quadratwurzel aus 16 vier ist, dann weiß er nicht wirklich, wie man Wurzeln zieht. Aber sein Konstruk- teur wußte, wie man Formen maschinell so verarbeiten kann, daß als Bedeutung der Ausgangsform die Quadratwurzel der Bedeutung der Eingangsform herauskommt. Der Grund, weshalb hier so viel über die verschiedenen Systemtypen geredet wird ist, daß auch die Komponenten der Systeme von diesen Typen sind. Rufen Sie sich noch einmal das Aufbaubild in Erinnerung. Passive Komponenten (die rund gezeichneten) sind nämlich vom Typ "informationsübertagend", wohingegen die aktiven Komponenten (in Anlehnung an eine Blackbox rechteckig gezeichnet) vom Typ "informationsverarbeitend" sind. Schrittweise Verfeinerung Solche Komponenten können dann wie schon angedeutet ihrerseits als Systeme aufgefaßt werden und abermals in Komponenten zerlegt werden. Dieses Spiel geht so lange, bis man auf die elementaren Komponenten stößt, also die Komponenten, die sich nicht weiter verfeinern lassen. Diese Komponenten sind demnach die Grundbausteine des Systems, die hier als gegeben vorausgesetzt werden. Bei programmierten Systemen werden diese Komponenten durch die Programmiersprache festgelegt. Man kann z.B. WORD-Variablen anlegen und benutzen, ohne deren inneren Aufbau näher betrachten zu müssen. Alle in einem System auftauchenden Komponenten sind also Objekte jeweils eines der folgenden Typen: ∙ Speicherobjekte ∙ Kanalobjekte ∙ Verarbeitungsobjekte, im Folgenden nochmals unterteilt in: - Operationsobjekte - Steuerobjekte Die Operationsobjekte Eine Operation ist ein abgeschlossener Vorgang, bei dem der Vorgang an sich nicht von Belang ist. Wichtig sind bei einer Operation nur der Zustand vor und nach der Operation, die sog. pre- und post-Zustände (Blinddarm ist drin/ Blinddarm ist draußen). Demnach sind Operations- objekte solche Objekte, die den Zustand von Speichern auf Kommando verändern können und melden, wann die Veränderung abgeschlossen ist. Ein Listensortierer wäre ein solches, typisches Objekt, aber auch ein "Inkrementierer", der eine Zahl erhöht. Operationsobjekte bearbeiten also ergebnisorientierte Anweisungen. Ein Operationsobjekt arbeitet dabei nach außen hin bei jedem Aufruf gleich. Seine Benutzung führt also (bei gleichen Eingangswerten) immer zum gleichen Ergebnis - egal zu welchem Zeitpunkt es aufgerufen wird. Die Steuerobjekte Steuerobjekte sind Objekte, die bestimmen, wann und unter welchen Bedingungen welche Operationen zu tun sind. So verfügt der Listensor- tierer intern beispielsweise über ein Steuerobjekt, welches den Ablauf des Sortierens kennt und steuert. Daneben gibt es ein Operations- objekt, das Listenelemente vertauschen kann. Das Steuerobjekt bestimmt also, wann welche Elemente vertauscht werden sollen, läßt die Vertauschung selber aber vom Operationsobjekt durchführen. Ein Steuer- objekt wird also immer durch einen Ablauf beschrieben. Eine GFA- Basic-Prozedur ist z.B. eine Beschreibung für ein Steuerobjekt. Ein Steuerobjekt muß nicht immer den Ablauf einer ergebnisorientierten Operation steuern, große Bedeutung haben vor allem die Steuerobjekte, die die Bearbeitung prozeßorientierter Anweisungen steuern. Prozeßorientierte Anweisungen sind solche, bei denen man nicht nur auf das Ergebnis der Abarbeitung warten möchte, um mit dem Ergebnis weiterzuarbeiten (s. Operationsobjekte), sondern durch die ein Prozeß ausgelöst werden soll, an dem man teilnehmen möchte. Beispiele wären "Spiele ein Musikstück!", "Öffne ein Editorfenster!" oder "Schalte den Videorekorder auf >>Play<<!". Die Steuerungsvorgänge mehrerer, gleich- zeitig vorhandender Steuerobjekte müssen nun nämlich nebenläufig ablaufen, was bei nur einem zur Verfügung stehenden Abwickler ein Pro- blem hervorbringt. In diesem Fall muß man den Abwickler dann im Multiplex betreiben, also hin- und wieder zwischen den verschiedenen Aufgaben (engl. "Tasks") umschalten (Multitasking). Dieses Umschalten wird bei programmierten Systemen überlicherweise von einem Betriebssy- stem übernommen, so daß man dem Betriebssystem nur zu sagen braucht, welche prozeßorientierten Steuerobjekte anzulegen sind, welche Abläufe also nebenläufig abgearbeitet werden sollen. Alle verschiedenden Typen (Kanal-, Speicher-, Steuer- und Operations- objekte) unterscheiden sich also in grundlegenden Eigenschaften. Deshalb sollten die Objekte dieser Typen auch mit verschiedenen Struk- turierungen beschrieben werden (Sie erinnern sich, daß die Objekt- orientierung nur eine besondere Strukturierung des Programms war). Normalerweise greift man bei objektorientierten Programmiersprachen auf eine einzige Strukturierung zurück, mit der sich alle Objekttypen beschreiben lassen. Dabei verwischt man als Programmierer aber natür- lich gerne die Grenzen und kann am Ende gar nicht mehr so leicht fest- stellen, von welchem Typ denn nun ein bestimmtes Objekt wirklich ist. Versucht man als Beispiel eine Parallele zum strukturierten Pro- grammieren zu ziehen, so wäre diese Begebenheit vielleicht damit vergleichbar, daß es dann dort ebenfalls nur einen Strukturtyp gäbe, der unter anderem Schleifen und Fallunterscheidungen zugleich abdeckt. Statt der Schleifenvielfalt von WHILE/WEND, REPEAT/UNTIL oder FOR/NEXT und den Entscheidungstypen IF/ELSE/ENDIF, SELECT/CASE oder ON x GOSUB gäbe es dann vielleicht nur noch WHILE anzahl bedingung/WEND. Statt IF bedingung schreibt man dann WHILE 1 bedingung, und statt FOR i=1 to 10 schreibt man WHILE 10 TRUE usw. Denkbar wäre ein solches Konstrukt also. Eine Verallgemeinerung bringt hier aber - wie sofort ersichtlich ist - den Nachteil mit sich, daß die Verständlichkeit stark darunter leidet. Genauso leidet beim objektorientierten Programmieren die Verständlich- keit, wenn man Objekten nicht ihren Typ ansieht. Wichtig ist also nur, daß der Typ entsprechend zu erkennen ist. Ob das durch die Syntax der Programmiersprache bereits ermöglicht wird oder ob man es irgendwie sonst dokumentieren muß, ist demnach nicht so wichtig. Im zweiten Fall wird es nur ganz gerne nicht gemacht. Realisierung von Objekten dieser Typen Im nächstem Schritt müßte nun eigentlich ermittelt werden, wie sich Objekte der vier genannten Typen beschreiben und zu einem System verschalten lassen. Mit Unterstützung der OT/OB-Lib lassen sich aber zunächst nur Speicherobjekte anlegen. Wie das funktioniert, wird in den folgenden Abschnitten genauer dargelegt. Nach den Überlegungen, daß die "Operandenorientierung" (s.o.) einen sinnvollen Ansatz zum Entwurf liefert, wird das erste, was man in seinem Programm definiert, eine Reihe von Speicherobjekttypen sein. Für die eingangs angesprochene Bildverarbeitungssoftware wurden z.B. Speicherobjekte vom Typ Bild benötigt. Auf die drei anderen Objekttypen soll nun noch kurz eingegangen wer- den, um zu erläutern, daß auch sie - aufbauend auf den Speicherobjek- ten - in GFA-Basic realisert werden können. Diese Abhandlung ist al- lerdings sehr knapp. Kanalobjekte können im Regelfall sehr leicht auch durch Speicherobjek- te realisiert werden. Zur Übertragung legt dazu der Absender ein Spei- cherobjekt des gewünschten Typs an und übergibt es an den Empfänger. Zum Beschreiben von Operationsobjekten reicht die GFA-Syntax bereits aus, da Operationsobjekte im Prinzip einfach durch Prozeduren be- schrieben werden können, die nicht auf globale Variablen zugreifen dürfen. Ergebnisorientierte Steuerobjekte stellen sich auf die gleiche Weise dar, denn die Prozedur eines Operationsobjektes ist nichts anderes, als ein ergebnisorientiertes Steuerobjekt innerhalb des Operationsobjektes, welches die Abarbeitung der Operation steuert. Auch die prozeßorientierten Steuerobjekte sind in GFA-Basic ohne weiteres beschreibbar, leider nur im Form eines einzigen Hauptpro- gramms, wobei keine Nebenläufigkeiten beschrieben werden können. Steht man vor dem Dilemma, mehrere Steuerobjekte anlegen zu müssen (weil der Benutzer vielleicht auch mal ein zweites Editorfenster öffnen möchte), muß man einige Umwege machen. Manchmal empfiehlt es sich, dazu auf mehrere, einzelne Programme auszuweichen. Eine andere Möglichkeit ist, sich die Bearbeitungszustände der einzel- nen Steuerobjekte in Speicherobjekten zu merken und für diese Spei- cherobjekte ferner eine Operation "bearbeite ein Ereignis" zu definieren. Das Hauptprogramm baut man dann als eine Hauptschleife (die idle- Loop), in der auf ein Ereignis gewartet wird. Ein eintreffendes Ereignis wird nacheinander den relevanten "Steuerspeicherobjekten" durch Aufruf der jeweiligen Operation "bearbeite ein Ereignis" gemel- det, worauf diese eine Operation ausführen, sich in ihren Speicherob- jekten den neuen Bearbeitungszustand vermerken, und anschließend wieder ins Hauptprogramm zurückkehren. Das Hauptprogramm wartet danach auf das nächste Ereignis und das Spiel beginnt von vorne. In Wirklich- keit sind dann also die Steuerobjekte als Kombination aus Speicher- und Operationsobjekt realisiert. Wichtig war in diesem Abschnitt, daß Ihnen die Unterschiede zwischen den vier Objekttypen bekannt sind, und daß Sie wissen, daß im Folgen- den nur über einen dieser Typen gesprochen wird: die Speicherobjekte. Das Objekt und der Objekttyp im Sinne des Programmierers