Open Source im professionellen Einsatz

Objektorientierung mit Tcl

Klasse Federn

Tcl ist das bestgehütete Geheimnis der IT-Industrie - und sehr lebendig. Die im Auftakt unserer Tcl-Reihe "Feder-Lesen" vorgestellte objektorientierte Erweiterung mit dem sperrigen Namen [incr Tcl] hat einen guten Teil zur Verbreitung von Tcl beigetragen.

Mit "Feder-Lesen" startet das Linux-Magazin eine Reihe, die in loser Folge über Neuigkeiten aus der Tcl-Welt berichtet. Dabei werden jeweils Werkzeuge oder Erweiterungen vorgestellt, mit deren Hilfe sich Aufgaben in Tcl besonders leicht und elegant lösen lassen. Da sich in der letzten Zeit das Entwicklungsmodell von Tcl geändert hat, beginnt die erste Folge mit den Änderungen und Neuerungen. Im Anschluss wird die objektorientierte Erweiterung [incr Tcl] vorgestellt.

Schon seit Jahren trägt die Skriptsprache Tcl den Stempel "The IT-Industry's best kept secret". Obwohl die Gemeinde der Tcl-Programmierer weiter zunimmt, ist diese selbstironische Bezeichnung durchaus berechtigt. Während an jeder Ecke über Lösungen mit den Konkurrentinnen Perl oder Python geredet wird, verrichtet Tcl seinen Dienst ohne viel Aufhebens im Verborgenen.

Das hat seinen Gründe: So gibt es bis heute immer noch kein Äquivalent zum Perl-CPAN oder zu Python.org, die Suche nach Tcl-Erweiterungen oder nach Dokumentation für ein bestimmtes Problem kann sich daher schwierig gestalten. Der Kasten "Tcl: Was bisher geschah" beleuchtet deshalb den Stand der Dinge, wie es dazu kam und was die nahe Zukunft bringen wird.

Durch viele Änderungen in den letzten Monaten sind viele Erweiterungen und Informationen inzwischen noch schwerer zu finden, als sie das vorher schon waren. Die Informationsseite der Entwickler liegt nun bei Active State [1]. Sie enthält viele Verweise auf Dokumentation, Erweiterungen und Programme. Eine weitere Möglichkeit ist die Tcl-Foundry bei Sourceforge [2]. Bei vielen Problemen des Alltags bietet sich ein Blick ins Tcl'ers Wiki an [3]. Wer auch hier noch nicht fündig wird, für den ist die Newsgroup [4] die Ultima Ratio für alle Fragen zu Tcl.

Nicht nur in der Tcl-Newsgroup taucht immer wieder der alte Kritikpunkt an Tcl auf, nämlich die fehlende Objektorientierung. Glücklicherweise lässt sich diese Fähigkeit leicht durch eine Erweiterung nachrüsten - eine sehr ausgereifte und beliebte OO-Erweiterungen ist [incr Tcl], das Thema des Monats im Feder-Lesen.

Doppelplus gut: [incr Tcl]

Auch bei Skriptsprachen kommt häufig der Wunsch nach den Segnungen der objektorientierten Entwicklung auf: Klassen, Vererbung, Datenkapselung und mehr. Obwohl sich Tk schon sehr objektorientiert anfühlt, unterstützt Tcl außer den Namensräumen keine OO-Features. Hier springt die Erweiterung [incr Tcl] in die Bresche. Nicht nur der Name ähnelt dem von C++: Das Tcl-Kommando incr ist das Äquivalent zu dem Postfix ++ bei C, [incr Tcl] möchte ebenso wie C++ eine Erweiterung der Grundsprache um OO-Features sein. Die Erweiterung ist bei Sourceforge zu finden [5], sie ist aber auch in den meisten Linux-Distributionen enthalten.

Vor ihrer Verwendung muss die Erweiterung in eine tclsh oder wish geladen werden, das geschieht mit dem Kommando package require Itcl. Alle Kommandos von [incr Tcl] sind im Namensraum itcl definiert, entweder verwendet man sie mit vollem Namen oder importiert sie in den aktuellen Namensraum. Im Folgenden geht es am Beispiel eines Editors für Type-1-Schriften um die Programmierung mit dieser Erweiterung.

Klassenweise

Klassen sind der Grundbaustein der objektorientierten Programmierung, eine gewisse Vertrautheit mit dem Klassenkonzept wird hier vorausgesetzt. Bevor Objekte erzeugt und verwendet werden können, ist eine Klasse zu definieren. Die Klasseneinteilung legt fest, welche Variablen und Methoden existieren und welche Aufgaben sie erfüllen. Um Klassenvariablen zu definieren, reicht die Aufzählung der Namen mit dem Kommando variable.

Methoden werden ähnlich wie normale Tcl-Prozeduren definiert: Nach dem Namen folgen die Eingabeparameter und danach ein Block mit dem eigentlichen Quellcode. Innerhalb dieses Blocks kann direkt auf die Klassenvariablen zugegriffen werden. Außerdem existiert dort die Variable this, die eine Referenz auf das aktuelle Objekt enthält. Zusätzlich lassen sich zwei besondere Methoden definieren: der Konstruktor und der Destruktor. Sie werden beim Erzeugen beziehungsweise beim Löschen eines Objekts aufgerufen. Der Aufbau der beiden ähnelt wieder normalen Prozeduren, nur hat der Destruktor keine Eingabevariablen.

Als Beispiel dient im Listing 1 die Definition einer Punkt-Klasse. Jeder Punkt hat eine x- und eine y-Koordinate, die durch den Konstruktor gesetzt werden. Außerdem lässt sich ein Punktobjekt verschieben.

Die mit [incr Tcl] definierten Klassen sind so ähnlich wie die Tk-Widgets verwendbar. Wie Listing 2 zeigt, lautet der Aufruf zum Erzeugen eines neuen Objekts Klassenname Objektname ?Parameter?. Der Objektname lässt sich entweder explizit wählen oder mit #auto automatisch vergeben. Das Objekt steht nun unter diesem Namen als neues Kommando zur Verfügung, die Syntax ist Objektname Methode ?Argumente?. Bei jedem Objekt stehen die Methoden cget, configure und isa zur Verfügung.

Mit den ersten beiden lassen sich die als public definierten Variablen abfragen und setzen. Die Methode isa überprüft, ob ein Objekt Mitglied einer bestimmten Klasse ist. Dazu kommen noch die selbst definierten Methoden, hier die Methode verschieben. Die Kommandos delete object Objektname und delete class Klassenname löschen das Objekt oder die Klassen wieder.

Diesen Artikel als PDF kaufen

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook