4.8 Statische Objekte und Instanzen

Solange noch eine Referenz auf ein Objekt besteht, kann auf seine Methoden und Eigenschaften zurückgegriffen werden. Dabei ist es egal, ob der aktuelle Film dieses Skript enthält oder nicht. Um dies nachzuprüfen, reicht es eine Instanz eines Objektes zu erzeugen und einen neuen Film zu erstellen. Da die Globalen auch in einem neuen Film oder bei einem Filmwechsel Gültigkeit haben, funktioniert das Objekt auch ohne dass der Skriptdarsteller im neuen Film vorkommt.

Interessanterweise gilt dieser Umstand auch für Skriptdarsteller, von denen keine Instanz erzeugt wurde. Wichtig ist nur, dass eine Referenz gespeichert ist.

In ein neues Parent-Skript schreiben wir folgende Methode:

on lebenszeichen me
put "Ich bin noch aktiv!"
end lebenszeichen

Dieses Skript geben wir im Eigenschaftsfenster den Namen StatischesObjekt. Nun speichern wir im Nachrichtenfenster eine Referenz in der Variablen gStatObjekt (alle Variablen, die im Nachrichtenfenster gesetzt werden, sind automatisch global):

gStatObjekt = script("StatischesObjekt ") -- es wird keine Instanz erzeugt!

Wenn wir in einen neuen, leeren Film wechseln, lässt sich die Methode Lebenszeichen trotzdem aufrufen:

gStatObjekt.lebenszeichen()
-- "Ich bin noch aktiv!"

Mit dieser Technik lässt sich das Verhalten nachahmen, dass man z.B. in Java von statische Klassen kennt. Von einem statischen Objekt gibt es nur eine einzige, globale Instanz. Dieses Objekt kann auch Eigenschaften definieren, es gibt aber nur eine einzige Ausführung dieser Eigenschaften. Auf diese Weise lassen sich z.B. bestimmte Funktionen in einem Objekt kapseln. Aufgrund des unterschiedlichen Namensraumes gibt es so keine Probleme mit gleichlautenden Eigenschaften anderer Objekte. Ein statisches Objekt kann immer dann eingesetzt werden, wenn es nur eine einzige Ausführung des Objektes geben muss. In diesem Fall muss keine Instanz mit new() erzeugt werden! Ob es sich bei einem Objekt um eine statischen Objekt oder eine Instanz handelt, lässt sich mit der Lingo-Eigenschaft ilk abfragen. Ein statischen Objekt gibt das Symbol #script zurück, eine Instanz das Symbol #instance:

statisch = script("StatischesObjekt")
-- die Referenz läßt sich einsetzen wie das Script selbst
instanz = statisch.new()
put statisch.ilk
-- #script
put instanz.ilk
-- #instance

4.7 Beispiel 2: Spielstände speichern mit Listen und Objekten 4.9 Beispiel 3: Der Objekt-Browser