Smalltalk

Norbert Bartos

Smalltalk ist eine konsequent objektorientierte Programmiersprache (inklusive eigenem Betriebssystem), welche bereits relativ alt ist. Ihre Anfangsgründe sind um das Jahr 1970 zu finden, wo sie von Adele Goldberg und Alan Kay am PARC (Palo Alto Research Center) von Xerox entwickelt wurde. In den nachfolgenden Jahren (1972, 1974, 1976) wurden weitere Smalltalk-Versionen publiziert, bis sich schließlich 1980 der heutige Standard namens Smalltalk-80 herausgebildet hatte. Smalltalk beeinflusste beispielsweise auch die Entwicklung von C++, ObjectiveC, Eiffel und Java. Seit 1996 ist ein stark ansteigendes Interesse an Smalltalk bei den Anwendern festzustellen. Marktuntersuchungen (Mittendorfer 1997) haben festgestellt, dass diese Sprache derzeit das größte Verbreitungswachstum besitzt. Auch auf dem Büchermarkt sind in der letzten Zeit vermehrt entsprechende Bücher zu finden. Die Sprache eignet sich aufgrund ihrer strengen Objektorientierung und der verfügbaren recht eleganten graphischen Programmierumgebungen (VisualWorks, SmalltalkExpress, ...) insbesonders für die rasche Implementation großer und komplexer Systeme. Die folgenden Beispiele sollen einen kleinen Eindruck geben, wie Smalltalk-Programme aussehen.

Im Sinne des objektorientierten Ansatzes ist die Formel a+b dermaßen zu interpretieren, dass an das Objekt a eine Nachricht gesendet wird, welche als Methodenselektor das Zeichen + und als Argument für die Anwendung der Methode die Zahl b verwendet. Im Falle der Formel a+b*c erhält das Objekt a zwei Nachrichten mit jeweils eigenem Argument, nämlich + mit b und * mit c. Das Resultat ist dann der Wert von (a+b)*c.

Beispiel 1) Addition eines Zahlenfeldes:

summiere Name der Methode;

|sum| Definition einer lokalen Variablen;

sum:=0.

self do: [:elem|sum:=sum+elem].

self referenziert das eigene Objekt;

[...] kennzeichnet einen Block;

elem ist eine lokale Blockvariable

(Parameter für die do-Anweisung);

^sum. Rückgabe des Wertes für sum;

Aufruf: feld sum

feld ist der Name des Zahlenfeldes;

gibt summe der einzelnen Komponenten

zurück;

Beispiel 2): Programm, welches bei Eingabe von z.B. 3kg+5kg das Resultat 8kg liefert:

Definition der Klasse:

Magnitude subclass: #Weight

Weight ist eine Unterklasse der vordefinierten Klasse Magnitude;

instanceVariableNames: ´magn´

Name der Instanzen ist magn;

classVariableNames: ´´

Erklärung übersteigt den Rahmen;

goalDictionaries: ´´

Erklärung übersteigt den Rahmen;

Definition von Methoden:

kg

^weight new initial: self.

Aufruf mit z.B. 3kg erzeugt ein Objekt der Klasse Weight mit dem Wert 3;

initial: Konstante

magn:=Konstante.

+ aWeight

^(self magn + aWeight magn) kg.

führt die eigentliche Addition durch;

Bild1.GIF

Die Organisation des Buches ist eher unüblich und erinnert durch das Numerieren einzelner Absätze bzw. Lerneinheiten an die Bibel. Es gibt insgesamt 42 Kapitel und 904 Lerneinheiten. Alle Kapitelüberschriften beginnen mit “How to ...” und geben Anleitungen zum Lösen der wichtigsten Probleme. Aufgrund einer geschickten Reihenfolge dieser Anleitungen ist das Buch aber auch zum Selbststudium geeignet. Es enthält jedoch keine weiteren Hinweise zur objektanalysierten Analyse und kaum welche zum objektorientierten Design. Das sollte beim Leser als Vorbildung bereits vorhanden sein.