Andreas Rozek Lesehinweise letzte Änderungen Gästebuch-Eintrag Mitteilungen an den Autor  English Version  zur Leitseite zum vorherigen Thema zum nächsten Thema  zur ersten Seite zur vorherigen Seite zur nächsten Seite

Lua_03 - Experimente mit Tag-gestützter Vererbung

"Lua_03" implementiert ein einfaches Verfahren für (einfache) "Vererbung" unter Zuhilfenahme von "Tag-Methoden". Das Grundprinzip ist hinreichend beschrieben [1,2,3,4] und braucht deshalb an dieser Stelle nur kurz skizziert zu werden: jeder Versuch, auf ein nicht existierendes Tabellen-Element zuzugreifen, hat - sofern definiert - den Aufruf einer passenden Tag-Methode zur Folge. In dieser Methode wird nun nach einem passenden Prototypen für das aktuelle Objekt und innerhalb dieses Prototypen nach dem gewünschten Element gesucht. Erst wenn auch diese Suche fehlschlägt, gilt das Element als unauffindbar.

Zusätzlich zum skizzierten Vererbungsmechanismus enthält "Lua_03" eine Reihe von Routinen, die die Vererbung flankieren:

  • eine erweiterte type-Funktion unterscheidet zwischen "einfachen" Tabellen und solchen mit dem beschriebenen Vererbungsmechanismus,

  • eine generische clone-Methode ermöglicht die Duplizierung von Objekten,

  • eine inheritsfrom-Methode vereinfacht die Überprüfung von Ableitungsbeziehungen zwischen Objekten,

  • eine new-Methode gestattet die Instanzierung neuer, von einem Prototypen abgeleiteten Objekten. Als kleine Besonderheit wird die Methode so "installiert", daß sie beim "Aufruf" des Objektes selbst (welches selbst eigentlich nicht ausführbar ist) an dessen statt aufgerufen wird.

Zur Demonstration der genannten Funktionen und Methoden werden in "Lua_03" zwei miteinander in Beziehung stehende Prototypen angelegt: ein "User"-Objekt beschreibt einen einzelnen "Benutzer", während ein "Group"-Objekt eine Benutzergruppe repräsentiert. Da "User" als Prototyp von "Group" fungiert, lassen sich die darin definierten Methoden auch auf "Group"-Objekte anwenden.

"Lua_03" wird ohne Angabe von Kommandozeilen-Argumenten aufgerufen

  lua Lua_03.lua

und liefert folgende Ausgabe:

  Lua_03 - first experiments with tag-based (single) inheritance

  firstUser  = Rozek, Elena
  secondUser = Rozek, Andreas
  Phantom    = (unknown), (unknown)
  UserGroup  = Rozek Family [Rozek, Elena; Rozek, Andreas]

  UserGroup:inheritsfrom(User)? 1
  UserGroup:inheritsfrom(Object)? 1

  type(UserGroup) = object

Die Programmausgabe wird zweckmäßigerweise in Verbindung mit dem zugehörigen Quelltext analysiert und verdeutlicht die korrekte Funktion der zuvor beschriebenen Funktionen und Methoden.

Quelltext

Das Programm steht im Quelltext zur Verfügung:

Da die innerhalb von "Lua_03.lua" definierten Funktionen auch in anderen Beispielen eingesetzt werden sollen, können sie als eigene Skript-Datei heruntergeladen werden:

Literaturhinweise

[1] Roberto Ierusalimschy, Luiz Henrique de Figueiredo, Waldemar Celes
Reference Manual of the Programming Language Lua 4.0
(siehe http://www.lua.org/manual)
das Referenzhandbuch enthält alle wesentlichen Informationen zur Sprache selbst, den zugehörigen Standardbibliotheken und der Schnittstelle zur Laufzeitumgebung;
[2] Roberto Ierusalimschy, Luiz Henrique de Figueiredo, Waldemar Celes Filho
Lua - an extensible extension language
Software: Practice & Experience (Ausgabe 6, Jahrgang 26, 1996), Seiten 635-652
(siehe http://www.lua.org/spe.html)
dieser Beitrag beschreibt die Grundzüge von Lua (und seiner Integration in C-Anwendungen), u.a. auch anhand einer Reihe von Programmausschnitten;
[3] Roberto Ierusalimschy, Luiz Henrique de Figueiredo, Waldemar Celes
Lua: an Extensible Embedded Language
A few metamechanisms replace a host of features
Dr. Dobb's Journal (Ausgabe 12, Jahrgang 21, Dezember 1996), Seiten 26-33
(siehe http://www.lua.org/ddj.html)
dieser Zeitschriften-Artikel beschreibt die wesentlichen Merkmale von Lua und TkLua. Eine Reihe von Programmausschnitten verdeutlichen die erwähnten Mechanismen;
[4] Reuben Thomas et al.
Technical Notes
(siehe http://www.lua.org/notes)
die (von Benutzern erweiterbare) Reihe der "Technical Notes" beschreibt einzelne sprach- und anwendungsspezifische Problemstellungen und deren Lösung unter Lua;

Haftungsausschluß

Bitte beachten Sie auch den Haftungsausschluß des Autors!

http://www.Andreas-Rozek.de/Lua/Acquainting/Lua_03.html    (letzter Stand: 14.04.2002)