Scheinbar neuartige Konzepte der objektorientierten Programmierung stammen häufig aus der Smalltalk-Welt. Obwohl Firmen damit durchaus professionelle Software schreiben, führt die Sprache ein Nischendasein. Dabei eignet sich Smalltalk gut für Einsteiger, denn sie vermittelt die objektorientierte Lehre in Reinkultur. Alle Smalltalk-Implementierungen bringen eine Vielzahl von Klassen mit, die der Programmierer für eigene Anwendungen erweitert.
Sprache mit System
Die meisten Smalltalk-Systeme sind Entwicklungsumgebungen mit vielen Komponenten wie einem Workspace zur Eingabe und zum interaktiven Test, einem Klassenbrowser und noch einigem mehr. In diesem Artikel kommen das freie Squeak[1] und Visual Age Smalltalk von IBM zum Einsatz. Letzteres gibt es als Trial-Version[2] zum Download. Der Einstieg ist aber nicht ganz einfach: Das System ist für große Entwicklerteams ausgelegt und unterstützt verteiltes Entwickeln mit vielen Usern. Entsprechend viele Optionen bringt die Entwicklungsumgebung mit, die beinahe einen eigenen Systemverwalter erfordert.
IBMs Smalltalk ist stark auf Business-Applikationen ausgelegt und besitzt für den professionellen Bereich ein schier unerschöpfliches Potenzial. Für erste Schritte eignet sich Squeak besser, da es weniger komplex ist und sich schon die Installation einfacher gestaltet. Squeaks GUI ist zwar textorientiert, Applikationen können aber auch eine Grafikbibliothek (für so genannte Morphs) benutzen (siehe Abbildung 1).
Abbildung 1: Transcript-Fenster, Workspace und Klassenbrowser auf Squeaks bunter Oberfläche.
Andere Implementierungen, teils Open Source, teils proprietär, sind Cincom Smalltalk[3], Smalltalk/X[4] oder Little Smalltalk[5]. Auch das GNU-Projekt führt einen eigenen Smalltalk-Compiler, allerdings ohne grafische Oberfläche. Weitere Implementierungen finden sich in den Smalltalk-FAQ[6].
Objekte überall
Smalltalk ist strikt objektorientiert, im Gegensatz zu Sprachen wie C++ und Java, die auch nicht objektorientierte Elemente besitzen. Es gibt zwei Standards, die den Sprachumfang festlegen: Smalltalk-80 und den neueren Ansi-Standard. Squeak erfüllt nur den ersten, aber es gibt Patches, die es Ansi-kompatibel machen. IBMs Produkt dagegen ist ein Ansi-Smalltalk.
Jede Entität in Smalltalk ist ein Objekt und alle Objekte sind Elemente einer Klasse. Die Vererbungshierarchie beginnt bei der Klasse »Object«. Prozeduren und Funktionen heißen in der Smalltalk-Welt Meldungen (Messages). Jedes Objekt kann Meldungen erhalten oder versenden. Im Code steht zuerst der Empfänger, also das Objekt, und dann die Nachricht:
Objekt Meldung
In Smalltalk geben alle Nachrichten ein Objekt zurück, das wiederum Empfänger einer Nachricht sein kann. Es ergeben sich Messagekaskaden, die auch von funktionalen Programmiersprachen bekannt sind.
Der Smalltalk-Programmierer gibt seinen Code im so genannten Workspace ein, der ähnlich funktioniert wie eine Shell, allerdings nicht zeilenorientiert: egal wo der eingegebene Smalltalk-Code steht, er ist beispielsweise mit einem Mausklick ausführbar. Damit lassen sich an jeder Stelle Smalltalk-Ausdrücke auswerten, ausführen, anhalten oder debuggen. Ausgaben erfolgen auf dem Transcript, einem speziellen Ausgabefenster.