Wenn Objekte Smalltalk machen

Seite 2: Objekte als Grundlage

Inhaltsverzeichnis

Ob Entwickler alle Zeilen markieren und evaluieren oder Zeile für Zeile vorgehen, führt zum selben Ergebnis. Es spielt zudem keine Rolle, ob sie im Playground einen Ausdruck markieren und evaluieren oder in einem Systembrowserfenster. Auf die Weise demonstriert Smalltalk schnell seine großartige Interaktivität: Überall wo Nutzer Text eingeben und markieren können, können sie Objekten interaktiv Nachrichten senden.

Als kleines Experiment kann man zunächst die erste, dann die dritte und erst zuletzt die zweite Zeile evaluieren und kommt zu einem anderen Ergebnis.

Alles ist in Smalltalk ein Objekt – auch Zahlen – und allen Objekten lassen sich Nachrichten senden. Das funktioniert sowohl in der beschriebenen Weise interaktiv als auch in einem Programm. Folgerichtig ist im obigen Listing die Klasse OrderedCollection ebenfalls ein Objekt, denn sie bekommt die Nachricht new. Willkommen im Kaninchenbau.

Ein kleines Experiment demonstriert, was passiert, wenn das Objekt eine Nachricht nicht versteht. Wie in Abbildung 2 zu sehen ist, meldet das Objekt, die Nachricht könne es nicht verstehen ("does not understand").

Das Objekt meldet fehlendes Verständnis (Abb. 2).

Das Programm stürzt jedoch weder ab, noch bleibt es in einer Schleife stecken. Das Objekt existiert weiterhin und kann weitere Nachrichten entgegennehmen. Da sich die Meldung "does not understand" programmtechnisch nutzen lässt, können Entwickler fehlertolerante Software schreiben.

Im Alltag stellt sich oft die Frage, welche Nachrichten ein Objekt versteht. Die Suche in Dokumentationsportalen und Wikis ist eine Möglichkeit. Smalltalk bietet jedoch eine praktische Abkürzung: Wer im Playground die OrderedCollection markiert und Ctrl + B drückt, öffnet einen Systembrowser, der die Klasse OrderedCollection mit all ihren Nachrichten (Methoden), dem Sourcecode und anderen Details zur Untersuchung anzeigt. Das Vorgehen funktioniert erneut mit allen Objekten und in jedem Fenster.

In der gleichen Weise lassen sich Sourcecode oder Sender von Nachrichten schnell ermitteln: Dazu markieren Entwickler sie und wählen den Befehl Implenters of beziehungsweise Senders of im Kontextmenü aus oder aktivieren ihn per Tastenkombination. Smalltalk hütet nicht nur keine Geheimnisse, sondern unterstützt beim Finden und Verstehen des Codes. Ob Systemklassen oder das frisch heruntergeladene Paket – alles ist transparent. Smalltalk ist ein Lernsystem, indem es Nutzern hilft, von anderen Programmierern zu lernen. Das ist Open Source im besten Wortsinne.

Smalltalk ist nicht nur interaktiv, sondern auch live. Beim Anlegen eines Objekts einer Klasse mit der Nachricht new bleibt es im Speicher, bis kein anderes Objekt mehr darauf zugreift. Das gilt sogar beim zwischenzeitlichen Verlassen von Smalltalk mit Save und dem späteren Neustart. Alle Objekte existieren im sogenannten Image und sind Teil des Gesamtsystems.

Darüber hinaus mag es von Interesse sein, ein Objekt zu untersuchen: Welche Daten enthält es, und welcher Klasse gehört es an? Die Variable myObject aus dem obigen Beispiel enthält demnach immer noch eine OrderedCollection. Das Tastenkürzel Ctrl + I nach dem Markieren von myObject öffnet ein Fenster, aus dem sich entnehmen lässt, welches Objekt in der Variable steckt. Die Daten des Objekts ('eins' und 'zwei') sind ebenfalls einsehbar.

Innenschau eines Objektes (Abb. 3)

Das funktioniert ebenso im laufenden Programm. Nach dem Setzen eines Haltepunkts (Breakpoint) an beliebiger Stelle im Code springt beim Erreichen der betreffenden Stelle in der Ausführung der Systembrowser auf. Mit ihm können Entwickler jedes Objekt wie gewohnt inspizieren. Alternativ können sie Ausdrücke mit Ctrl + Shift + D statt Ctrl + P evaluieren und damit einen Debugger starten (s. Abb. 4). Durch die Interaktion mit dem Code ist dessen dynamisches Verhalten in Smalltalk nachvollziehbar. Die Programmiersprache bietet somit ein mächtiges Debugging-System.

Debugger-Fenster mit "Live" Daten (Abb. 4)

Klassen sind wieder Objekte. Sie beantworten Fragen nach ihrem Typ (der Klasse und der Oberklasse) und nach deren bekannten Nachrichten. Das nutzt der oben gezeigte Befehl Senders of. Zudem lassen sich Klassenobjekte in ihrem aktuellen Zustand inspizieren. Das Stichwort für diese Systemeigenschaften ist der Begriff "Reflection".

Entwickler können die Struktur des Systems ermitteln und ändern oder verschieben. Das gilt unter anderem für die Namen von Klassen und Nachrichten (Methoden). Der Vorgang ist als Refactoring bekannt. Es verwundert wenig, dass diese Form der Codeverbesserung im Kontext von Smalltalk ihren Anfang nahm. In seinem Buch "Smalltalk Best Practice Patterns" [1] beschreibt Kent Beck eine Reihe solcher Codepflegearbeiten. Smalltalk unterstützt damit ganz besonders den Anspruch, lesbaren und verständlichen Code zu schreiben und dessen Qualität immer weiter zu erhöhen.