3.5 Ist Lingo eine objektorientierte Programmiersprache?

3.5.1 Globale Variablen
3.5.2 Vererbung
3.5.3 Kapselung von Eigenschaften und Methoden
3.5.4 Überladen von Methoden

Ob Lingo tatsächlich eine objektorientierte Programmiersprache ist, wird in Internet-Foren häufig diskutiert. Da die Kriterien, nach denen eine Programmiersprache tatsächlich als objektorientiert gilt, von jedem anders definiert werden, lässt sich diese Frage nicht ohne weiteres beantworten. Fest steht, dass Lingo, wie auch C++, eine hybride Sprache ist. Der Lingo-Programmierer ist an keiner Stelle gezwungen, objektorientierte Techniken einzusetzen, sondern sieht sich häufig gezwungen, auf herkömmliche Programmierkonzepte zurückgreifen, da die Struktur von Director dies an einigen Stellen fordert.

Im folgenden sind einige Konzepte erläutert, die gegen Lingo als objektorientierte Sprache sprechen.

3.5.1 Globale Variablen

Strenggenommen darf es in einer objektorientierten Programmiersprache keine Global geben. In diesem Sinne ist C++ aber auch keine objektorientierte Sprache. An die Stelle von Globalen treten in Java statische Klassen und Variablen, sowie Vererbung. Gerade diese beiden Konzepte jedoch sind in Lingo schwach umgesetzt, so dass man kaum ohne Globale auskommen wird. Durch die Nutzung von Objekten gelingt es aber, die Globalen auf eine überschaubare Zahl zu reduzieren, was sehr zur Übersichtlichkeit des Programms beiträgt.

3.5.2 Vererbung

Vererbung, also dass übernehmen von Eigenschaften und Methoden aus einer übergeordneten Klasse, ist in Lingo nur unzureichend umgesetzt. Es bietet zwar die Möglichkeit, zur Laufzeit Objekte um Funktionen anderer Objekte zu erweitern, aber diese Beziehung lässt sich jederzeit wieder aufheben bzw. auf ein anderes Objekt übertragen (durch Setzen der ancestor-Eigenschaft). Dieser Mechanismus spielt sich also auf Objektebene, und nicht auf Klassenebene ab. Es soll nicht verschwiegen werden, dass Vererbung in Lingo eine sehr untergeordnete Rolle spielt und seltener zum Einsatz kommt als in anderen Sprachen.

3.5.3 Kapselung von Eigenschaften und Methoden

Die Definition eines Parent-Skripts stellt in Lingo eine einfache Form der Kapselung dar. Eigenschaften und Methoden können nicht wie globale Variablen und Handler angesprochen werden, sondern nur über ihre entsprechende Objektreferenz. Der Zugriff über diese Referenz kann jedoch nicht eingeschränkt werden. Es kann z.B. eine Eigenschaft, die nur über eine Methode gesetzt werden soll, nicht davor geschützt werden, direkt verändert zu werden.

3.5.4 Überladen von Methoden

Aufgrund der schwachen Typisierung (der Typ einer Variablen steht erst zur Laufzeit fest) und der nicht festgelegten Zahl von übergebenen Parametern an einen Handler können Methoden nicht überladen werden, d.h. es ist nicht möglich, zwei oder mehr Methoden mit gleichem Namen zu definieren, die sich durch den Typ oder die Zahl ihrer Parameter unterscheiden. In Java entscheidet in solchen Fällen der Compiler, welche Methode aufgerufen wird.

 

Aufgrund dieser Defizite kann Lingo nicht als uneingeschränkt objektorientierte Sprache bezeichnet werden. Viele Techniken sind zwar umsetzbar, aber oft nicht im gleichen Maße wie bei einer rein objektorientierten Programmiersprache, z.B. Java. Director und Lingo sind dennoch Teil eines auf Objekten gründenden Systems. Aus diesem Grund ist die Bezeichnung objektbasierte Programmiersprache für Lingo zutreffender6. Da Lingo eine Skriptsprache ist und somit der Grundstruktur des Autorensystems Macromedia Director gerecht werden muss, ist der Programmierer immer wieder dazu gezwungen, objektorientierte Ansätze mit nicht-objektorientierten zu verbinden.

3.4 Lingo vs. Java: ein Vergleich 4 Objekte in Lingo