Moderne ZeitenVon der Variablen zum Objekt Das ATOS-Magazin 1/99Die OT/OB-Lib wird - wie eingangs erwähnt - das Definieren neuer Vari-
ablentypen ermöglichen. Aber was heißt das eigentlich?
Etwas hochtrabend formuliert meint der Begriff der Variablen (oder der
Veränderlichen) einen Ort, an dem zu verschiedenen Zeiten möglicher-
weise verschiedene Werte gemessen werden können. Diese Orte sind übri-
gens genau die passiven Komponenten, die im vorigen Kapitel angespro-
chen wurden. Orte, an denen sich der dort vorliegende Wert nicht
ändern kann, heißen Konstanten.
SpeicherWenn Sie in Ihrem Programm eine Variable anlegen, dann wird für diese
Variable ein Stück des Hauptspeichers reserviert. An diesem "Ort"
liegt dann der veränderliche Wert vor, den Sie über den Variablenbe-
zeichner ansprechen und auslesen ("messen") können. In der Regel
können Sie den Wert auch selbst beeinflussen, indem Sie der Variablen
(also diesem Ort) einen neuen Wert zuweisen. Man sagt, bei dieser An-
wendung liegt die Variable in einem Speicher.
KanäleFerner gibt es noch solche Orte, die nicht zur Speicherung, sondern
zur Übertragung (z.B. zur Wertübergabe an Unterprogramme) dienen. In
diesem Fall spricht man davon, daß die Variable in einem Kanal liegt.
VariablentypSie wissen, daß der Wert einer Variable immer in einem bestimmten
Wertebereich liegen muß. Diesen Bereich nennt man nun Variablentyp.
Genauergenommen nennt man einen Wertebereich eigentlich nur dann Vari-
ablentyp, wenn auch alle Elemente des Wertebereichs "vom gleichen Typ"
sind. Auf den Begriff des Typs wird aber später noch einmal eingegan-
gen.
Bsp.: Der Variablentyp "WORD" von GFA-Basic steht für den Wertebereich
"Ganze Zahl aus dem Intervall von -32768 bis 32767".
Im Folgenden werden nun auf dieser Grundlage die Begriffe "Objekt",
sowie "konkretes" bzw. "abstraktes Attribut" eingeführt.
Mit der OT/OB-Lib sollen nämlich nun nicht nur neue Variablentypen
(und damit neue Wertebereiche) definiert werden. Der eigentliche
Einsatz der OT/OB-Lib soll darüber hinausgehen. Während eine Variable
eigentlich nur genau einen Wert aus ihrem Wertebereich annehmen kann,
und derjenige, der Zugriff auf die Variable hat, ihren Wert auslesen
und vielleicht auch setzen kann, sollen die Variablen, die mit der
OT/OB-Lib erschaffen werden, mit einem eingeschränkten Zugriff verse-
hen werden. Wer Zugriff darauf hat, soll nicht den kompletten Wert
sehen (oder verändern dürfen), sondern nur Zugriff haben auf die für
die Benutzung wesentlichen Teile. Daß eine solche Einschränkung in
Wahrheit ein Fortschritt ist, soll im Folgenden erläutert werden.
Die Konzentration richtet sich zunächst auf den einfachen Variablentyp
WORD und wir betrachten, welche grundlegenden Operationen für Variab-
len diesen Typs zur Verfügung stehen:
∙ Variablenspeicher anlegen
∙ Variablenwert setzen
∙ Variablenwert auslesen
∙ Variablenspeicher freigeben
Als Beispiel diene nun ein Programm, das noch zu langsam ausgeführt
wird und zeitoptimiert werden muß. Zu Test- und Meßzwecken soll daher
eine WORD-Variable so präpariert werden, daß jederzeit ermittelt wer-
den kann, wie oft auf sie zugegriffen wurde. So kann man später
herausfinden, ob auf die Variable besonders oft zugegriffen wurde und
ob sich daher vielleicht Optimierungen lohnen könnten.
Mit einer solchen, neuen WORD-Variablen kann man nun mehr tun als mit
einer normalen WORD-Variablen:
∙ Variablenspeicher anlegen (und Zugriffszähler auf den Wert 0
setzen)
∙ Variablenwert setzen (und Zugriffszähler erhöhen)
∙ Variablenwert auslesen (und Zugriffszähler erhöhen)
∙ Zugriffszähler auslesen
∙ Variablenspeicher freigeben
Der Wert einer solchen Variablen besteht offenbar aus zwei Teilwerten,
nämlich dem Wert der WORD-Variablen und dem Wert des Zugriffszählers.
ModularitätZunächst wird noch der Begriff der Modularität benötigt. Damit ist
gemeint, einzelne Komponenten des Systems lediglich nach außen hin zu
spezifizieren und demjenigen, der die Komponente realisiert, jede
Freiheit bei der Wahl der Mittel zu lassen. Einzige Bedingung für ihn
ist also, daß die Komponente später in dem Rahmen funktioniert, in dem
man sie zuvor spezifiziert hatte. Dadurch kann die Komponente für sich
betrachtet werden, und umgekehrt kann das System für sich betrachtet
werden, ohne den genauen Aufbau der Komponente berücksichtigen zu
müssen.
Dieser Gedanke soll auf das Beispiel übertragen werden. Es wird die
Komponente "WORD-mit-Zugriffszähler" so spezifiziert, daß nur festge-
legt wird, wie sie sich nach außen verhält. Mit der sehr knappen
Beschreibung von eben wurde das schon erledigt. Alle für die Benutzung
der Variablen dieses Typs wesentlichen Dinge wurden genannt. Nun liegt
es am Konstrukteur, eine Komponente so zu bauen, daß sie diese Eigen-
schaften hat. Wie der Konstrukteur der Komponente konkret dafür sorgt,
daß Zugriffszähler und Variablenwert richtig verwaltet werden, bleibt
ihm also überlassen. Das einzige, was man im voraus sagen kann, ist,
daß er seinerseits Speicher irgendeiner Art innerhalb der Komponente
benötigen wird, denn sonst könnte sich die von ihm entworfene Kompo-
nente die Werte des Zählers und der eigentlichen Variablen nicht
merken. Der konkrete Aufbau bleibt aber seine Sache.
Die AttributeDie nach außen hin "sichtbaren" Variablen dieser Komponente nennt man
nun abstrakte Attribute. Die Speichervariablen, die der Konstrukteur
aber in der Komponente tatsächlich angebracht hat, nennt man konkrete
Attribute.
Mit der Bezeichnung "abstrakt" wird hier angedeutet, was realisiert
wurde, mit der Bezeichnung "konkret" wird angedeutet, wie es reali-
siert wurde.
Damit wurde der Zugriff auf die Variable - wie oben angedeutet - ein-
geschränkt. Von außen kommt man nicht an die konkreten Attribute
heran. Lediglich das für die Benutzung Wesentliche, die abstrakten
Attribute, sind erreichbar. Der Vorteil liegt auf der Hand. Wenn man
sich aus irgendeinem Grund dafür entscheiden muß, die Komponente auf
eine andere Weise zu realisieren, kann der Rest des Systems unangeta-
stet bleiben.
Die Begriffe sollen anhand einer Realisierung einer Variablen des Typs
"WORD-mit-Zugriffszähler" in GFA-Basic noch einmal verdeutlicht wer-
den:
PROCEDURE myword_create
LET myword_value&=0
LET myword_counter&=0
RETURN
PROCEDURE myword_set(new_value&)
INC myword_counter&
LET myword_value&=new_value&
RETURN
FUNCTION myword_get
INC myword_counter&
RETURN myword_value&
ENDFUNC
FUNCTION myword_counter
RETURN myword_counter&
ENDFUNC
PROCEDURE myword_delete
' Hier nur ein Dummy
RETURN
Die konkreten Attribute sind hier die beiden globalen WORD-Variablen
myword_value& und myword_counter&. Sie dürfen von außen nicht benutzt
werden. Stattdessen darf man nur über die abstrakten Attribute,
nämlich die Prozeduren und Funktionen myword_create, myword_set,
myword_get, myword_counter und myword_delete auf die "Variable"
zugreifen.
So kann jederzeit an der Komponente "myword" gebastelt werden, ohne
daß an den Stellen, an denen die Komponente benutzt wird, ebenfalls
Änderungen gemacht werden müssen.
Warum aber spricht man nun von Attributen statt von Variablen?
Der ObjektbegriffSeit geraumer Zeit versucht man die Erkenntnisse der Philosophie über
das menschliche Denken auch beim Programmieren anzuwenden. Die Philo-
sophie lehrt nun, daß der Mensch seine Welt als eine Struktur aus ein-
zelnen konkreten Objekten erfährt. Diese Objekte sind Gegenstände oder
Prozesse (abgeschlossene Vorgänge) mit meßbaren Eigenschaften. Diese
Eigenschaften werden üblicherweise als Attribute bezeichnet (Nur der
Vollständigkeit halber sei angemerkt, daß zu diesen Attributen auch
die über ein Objekt entscheidbaren Dinge, die sich durch die Struktur,
in die es eingebettet ist, ergeben, mit einbezogen werden.).
Man sieht nun auch eine Variable als ein konkretes Objekt an, von dem
man eine Eigenschaft messen, also ein Attribut ermitteln kann. Das
Auslesen des Variablenwertes wird also als Messen eines Attributes
dieses Objektes angesehen. Verbundvariablen (also Variablen, die sich
aus mehreren Teilvariablen zusammensetzen) rechtfertigen diese Be-
zeichnung schon eher. Man liest ja fast nie den Wert einer Verbundva-
riablen aus, als viel öfter den Wert einer ihrer Teilvariablen. Eine
Variable hat aber genau einen Wert. Wenn nun auch ein Teil von diesem
Wert abgelesen werden kann, ist es im eigentlichen Sinne keine Variab-
le mehr. Im Beispiel von oben war die Word-"Variable" sogar in der
Lage, einen Zugriffszähler zu verwalten. In diesem Fall paßt der
Begriff der Variablen also definitiv nicht mehr, denn eine Variable
ist ein Ort, und ein Ort kann natürlich nichts tun, also auch keinen
Zähler verwalten.
Daher spricht man allgemein von Objekten mit Attributen und zugehöri-
gen Werten statt von Variablen mit zugehörigem Wert. Besser und ver-
ständlicher eignen sich wohl analog dazu die Begriffe "Komponente" und
"Schnittstelle" (anstatt "Objekt" und "Attribut"), womit man dann
sofort auch einen Aufbau verbindet und sich den Systemaufbau mit einem
Schaltplan verständlich machen kann. Später wird noch genauer erklärt,
was unter einem Objekt im Sinne des Programmierers zu verstehen ist.
Zunächst soll dieser Einblick genügen. Es bleibt nämlich noch die
Frage offen, was sich hinter der Idee des objektorientierten Pro-
grammierens versteckt.
Die Idee des objektorientierten Programmierens