Smalltalk 80 - objektorientierte Programmierung auf dem ST

Die objektorientierte Programmiersprache und Entwicklungsumgebung Smalltalk-80 ist seit einiger Zeit auch auf dem ST erhältlich. Anlaß für uns, die (Grundlagen und Konzepte von Smalltalk vorzustellen und die ST-Implementierung zu besprechen.

Was ist Smalltalk?

Etwa ab 1970 wurde am Palo Alto Research Center von XEROX an der Entwicklung einer Programmiersprache gearbeitet, der man - wohl um die Einfachheit der Sprache und Sprachkonzepte auszudrücken - den Namen Smalltalk gab. Die Entwicklung der neuen Sprache und der dazugehörenden Umgebung vollzog sich in Schritten über einen Zeitraum von mehreren Jahren bis zu ihrer gegenwärtigen Form. Auf Entwurf folgten Implementierung, Test, Redefinition, wieder neue Implementierung und so fort, so daß im Verlauf die Versionen Smalltalk-72, -74, -78 und schließlich -80 entstanden. Während Smalltalk ursprünglich in erster Linie als Forschungssystem zur Entwicklung und zum Testen neuer Ideen der Softwaregestaltung im Hause XEROX verwendet wurde, wurde die Verbreitung des Smalltalk-Gedankengutes ab 1980 dadurch gefördert, daß XEROX mehrere amerikanische Firmen, unter anderem Apple, HP und DEC, aufforderte, an der Kritik des Systems mitzuarbeiten, und die Entwicklung spezieller Implementierungen und Hardware anregte. Seit einiger Zeit werden Smalltalk-80-Implementationen auch von XEROX vertrieben.

Bild 1: Ein Smalltalk-Objekt
Bild 2: Beispielbotschaften
Bild 3: Beispielklasse
Bild 4: Ein Ausschnitt aus den vordefinierten Klassen

Die bei der Entwicklung von Smalltalk verfolgten Ziele waren unter anderem der Entwurf eines vollständig objektorientierten Softwaresystems, die Möglichkeit der Anpassung und des Ausbaus des kompletten Systems den eigenen Vorstellungen entsprechend, das Schaffen einer möglichst anwenderfreundlichen Programmierumgebung und nicht zuletzt die leichte Erlernbarkeit durch wenige einfache, grundlegende Konzepte. Auffällig für den Betrachter eines Smalltalk-Systems sind neben den Eigenschaften der Programmiersprache besonders die der zugehörigen Entwicklungsumgebung. Das komplette System setzt sich aus mehreren Bestandteilen zusammen:

Dies klingt nach sehr viel, es ist jedoch keinesfalls zuviel versprochen. Wir wollen im folgenden einige der Bestandteile des Systems genauer vorstellen.

Programmieren in Smalltalk

Die Grundbegriffe der objektorientierten Programmierung in Smalltalk sollen zunächst an einem gängigen Beispiel erläutert werden. Da die Mehrzahl der Leser mit prozedurorientierten Sprachen wie beispielsweise Pascal vertraut sein wird, wollen wir zum besseren Verständnis wo möglich Parallelen zu diesen konventionellen Sprachen aufzeigen. Um die Erklärungen nicht unnötig zu komplizieren, wird an einigen Stellen vereinfacht. Wer gelegentlich einwenden möchte: “Ja, aber...”, dem sei bestätigt: Er hat wahrscheinlich recht.

Smalltalk ist eine typenlose, interpreter-orientierte Sprache. Grundlage der Sprache ist der Begriff des Objekts. In Abbildung 1 ist das Objekt MeineFinanzen dargestellt. Es besteht intern aus den drei Elementen kontostand, einnahmen und ausgaben, wobei die letzten beiden Komponenten Listen sind. Für den Benutzer des Objektes ist dessen innerer Aufbau jedoch verborgen, er kann nicht erkennen, aus welchen oder aus wievielen Komponenten es sich zusammensetzt, und er kann nur auf das Objekt als solches, nicht aber auf einzelne Teile zugreifen. Um den Zustand des Objektes zu verändern, können ihm Botschaften zugesandt werden. Einige Beispiele hierfür finden wir in Bild 2. So bewirkt die Beispielbotschaft MeineFinanzen verpulvern: betrag fuer: zweck, daß in dem Objekt der Wert von kontostand um Betrag erhöht wird und in der Liste ausgaben eine entsprechende Eintragung vorgenommen wird. Die Wirkung der weiteren Botschaften kann man nun leicht erschließen. Betrachten w ir die Form der Botschaften genauer, so erkennen wir, daß sie sich stets aus einem Empfänger und einer Bezeichnung für die gewünschte Operation zusammensetzen. Während in den meisten anderen Sprachen die Übergabeparameter an den Aufruf einer Operation angehängt werden, zum Beispiel objektVerpulvernFuer (MeineFinanzen, betrag, zweck), dient die besondere Form einer Smalltalk-Botschaft wegen ihrer der menschlichen Sprache ähnlichen Syntax der besseren Lesbarkeit des Programmtextes.

In Smalltalk gibt es also Objekte, auf die gewisse Operationen angewendet werden können. Diese Operationen werden ausgelöst, indem an ein Objekt eine entsprechende Botschaft gesendet wird. Die Menge der Botschaften, die von einem Objekt verstanden werden können, bezeichnet man als Schnittstelle des Objektes. Dem Leser wird bereits aufgefallen sein, daß Botschaften in Smalltalk an die Stelle von Prozedur- oder Funktionsaufrufen in anderen Sprachen treten, während Objekte das sind, was ansonsten als abstrakte Datenobjekte bezeichnet wird.

Alles Klasse(n)

Führen wir nun den Begriff der Klassen ein. Jedes Objekt in Smalltalk ist ein Exemplar einer bestimmten Klasse. Im Falle unseres Beispiels ist das Objekt MeineFinanzen ein Exemplar der Klasse Finanzsituation, die in Abbildung 3 vollständig beschrieben ist. Ähnlich zur Deklaration von Variablen in prozedurorientierten Sprachen wird ein solches Exemplar durch eine spezielle Erklärung erschaffen, vergleiche auch Bild 2. Eine Klasse in Smalltalk kann also als abstrakter Datentyp aufgefaßt werden. Durch bestimmte Botschaften können verschiedene Exemplare der Klasse Finanzsituation erzeugt werden, ähnlich wie man in anderen Sprachen durch die Deklaration “VAR: x: INTEGER” ein “Exemplar” mit Namen x vom Typ Integer kreieren kann.

Objekte entspringen also Klassen, doch wodurch wird eine Klasse ausgemacht? Neben ihrem eindeutigen Namen einerseits dadurch, daß in ihrem Rumpf die Gestalt ihrer Exemplare beschrieben wird, andererseits dadurch, daß dort auch die Operationen, welche auf die Exemplare angewendet werden können, definiert sind. Diese Operationen werden in Smalltalk Methoden genannt. Die Methoden dienen sowohl der Erzeugung von Exemplaren einer Klasse, das heißt der Erzeugung von Objekten, als auch der Bearbeitung dieser Exemplare. Die Erzeugungsoperationen für Exemplare von Finanzsituation finden sich in der Abbildung unter dem Begriff instanceCreation. Die übrigen Methoden dienen der Arbeit mit den geschaffenen Objekten und sind zur besseren Übersicht im System in die Gruppen anfragen, veraenderungen und privat eingeteilt. Diese Einteilung hat jedoch nur den Charakter eines Kommentars, allerdings erleichtert sie in großen Klassen das Zurechtfinden erheblich. Es ist nun wichtig, sich zu verdeutlichen, daß unser Objekt MeineFinanzen nur solche Botschaften verstehen kann, für die im Rumpf der Klasse Finanzsituation auch eine entsprechende Methode deklariert ist, oder die es auf eine später beschriebene Art “geerbt” hat. Andere Botschaften wird MeineFinanzen stets beharrlich mit einem “object does not understand" beantworten.

Das Objekt kann also nur über eine genau bestimmte Schnittstelle, nämlich über die definierten und geerbten Methoden der Klasse, verändert werden. Eine Klasse in Smalltalk ist somit zum einen ein abstrakter Datentyp, zum anderen dient sie dem Schutz der Daten vor unerlaubtem Zugriff und bewirkt so eine Modularisierung, das wirksamste Hilfsmittel zur Bewältigung komplexer Probleme. Die Klassen von Smalltalk lassen sich daher auch bedingt mit den aus anderen Sprachen bekannten Modulen oder Paketen vergleichen. Während in den meisten anderen Sprachen Modularität auf der Ebene einer Gruppe von Prozeduraufrufen einsetzt, verwirklicht Smalltalk sie allerdings auf einem niedrigeren Niveau, indem es die Datenobjekte selbst schützt! Jedes Objekt in Smalltalk ist immer Exemplar einer Klasse, das heißt, selbst wenn nur ein einziges Exemplar benötigt wird, muß hierfür eine eigene Klasse geschaffen werden. Wird an ein Objekt eine Botschaft gesendet, so bewirkt dies, daß in der Klasse des Objektes nach einer zugehörigen Methode gesucht wird, die sodann aktiviert wird.

Diese Methodensuche erfolgt grundsätzlich zur Laufzeit. Zwar sind die Methoden zuvor kompiliert worden, doch versteht Smalltalk unter Kompilieren nur die Übersetzung des Quelltextes in eine verdichtete Form, nämlich in die Maschinensprache der virtuellen Smalltalk-Maschine, die zur Laufzeit interpretiert wird. Eine Bindung der Methoden findet also erst bei der Ausführung statt. Hierin liegen sowohl gewisse Probleme für die Sicherheit wie auch für die Laufzeiteffizienz begründet.

Trotz der ausgeprägten Idee der Abstraktion von Daten in Klassen ist Smalltalk wie eingangs erwähnt eine typenlose Sprache. Nirgendwo werden Typen ausdrücklich deklariert, und sie werden auch nicht aus dem Kontext ermittelt. Smalltalk-Variablen sind im wesentlichen Zeiger, deren Typ erst dann festgelegt wird, wenn Sie auf ein Objekt eingehängt werden, anders ausgedrückt, wenn die Variable einen Wert zugewiesen bekommt. Erst während der Laufzeit kann festgestellt werden, welcher Klasse ein Objekt angehört. Dieses Fehlen der Typerkennung ermöglicht die große Flexibilität und vielfache Verwendbarkeit von Methoden bei objektorientiertem Programmieren, hat allerdings den Nachteil, daß Typenfehler beim Übersetzen nicht erkannt werden können und sich erst zur Laufzeit auswirken. Durch das Fehlen des Typenkonzeptes ermöglichte Fehler können jedoch oft durch geschickte Namenswahl vermieden oder, sollten sie sich dennoch eingeschlichen haben, mit Hilfe der hervorragenden Debugging-Unterstützung leicht gefunden werden.

Botschaften

Letztendlich läßt sich der gesamte Ablauf eines Smalltalk-Programmes auf das Prinzip des Botschaftsaustausches zurückführen. Botschaftsaustausch in Smalltalk bedeutet Kommunikation in zwei Richtungen. Betrachten wir noch einmal eines der Beispiele aus Abbildung 2, die Botschaft MeineFinanzen Kontoauszug, Das Senden dieser Botschaft an den Empfänger MeineFinanzen bewirkt, daß in der Klasse Finanzsituation nach einer Methode gesucht wird, die dem Selektor Kontoauszug entspricht, die Methode wird anschließend ausgeführt, und ein Ergebnis wird zurückgesandt. Bei Botschaften, die wie dies Beispiel Funktionsaufrufen entsprechen, ist das der Ergebniswert, bei Botschaften die zustandsverändernd wirken, ist das Ergebnis der Empfänger selbst. Botschaftsaustausch vollzieht sich stets nach dem Muster Senden, Heraussuchen, Durchführen, Zurücksenden.

Auf dieses Prinzip läßt sich leicht idealisiert selbst die Smalltalk-Arithmetik zurückführen. Betrachten wir zum Beispiel den einfachen Ausdruck “3 + 4”. An das "Objekt" “3” wird die Botschaft "+4” gesendet. Das Objekt 3 sucht in seiner Klasse - SmallInteger - nach der passenden Methode, also der Addition, führt diese aus und sendet den Ergebniswert 7 zurück an den Sender, zum Beispiel an einen Workspace. Alle Konstruktionen auf Ausführungsebene lassen sich also im wesentlichen auf den gleichen Mechanismus des Botschaftsaustausches zurückführen. Alle Botschaften sind wiederum in Smalltalk selbst formuliert und stellen Methoden der Klassen des Systems dar. Einzige Ausnahme sind rund einhundert sogenannte primitive Methoden, deren aktuelle Implementierung auf Maschinenebene erfolgt und die Bestandteil der sogenannten virtuellen Smalltalk-Maschine sind.

Da die Beziehung von Klassen untereinander für das Verständnis eines Smalltalk-Systems von besonderer Bedeutung ist, wollen wir diese nun etwas näher darstellen.

Klassen und Unterklassen

Jede Klasse in Smalltalk muß als Unterklasse einer bereits bestehenden Klasse definiert werden. Auf diese Weise entsteht ein Baum von Klassen, an dessen Wurzel sich die Klasse Object befindet, die als einzige keine Oberklasse mehr besitzt. Im Beispiel der Klasse Finanzsituation war diese als direkte Unterklasse von Object definiert. In unserem einfachen Zahlenbeispiel haben wir als Klasse der Objekte “3" und “4” die Klasse SmallInteger kennengelernt. Abbildung 4 soll Ihnen einen Eindruck davon vermitteln, wie sich diese Klasse in den erwähnten Baum einfügt.

Es besteht nun die Möglichkeit. Klassen durch das Hinzufügen von Unterklassen zu spezialisieren und zu verfeinern. Unterklassen erben sowohl die Beschreibung der Exemplarvariablen als auch die Definition der Methoden von ihrer Oberklasse. Darüber hinaus können sie eigene Exemplarvariablen hinzufügen und neue Methoden deklarieren, sie haben aber auch die Möglichkeit, geerbte Methoden zu überschreiben, das heißt, neu zu definieren. Auf diese Weise können von einer allgemeinen Klasse ausgehend nach und nach Unterklassen entwickelt werden, die einen Teil ihrer Eigenschaften erben und einen eigenen speziellen Teil hinzufügen. Aus vorhandenen Klassen entstehen so durch Verfeinerung Unterklassen, die spezialisierten Problemstellungen entsprechen. Verwirklicht wird der Vererbungsmechanismus dadurch, daß bei der Methodensuche zur Laufzeit einfach alle Oberklassen einer Klasse mit einbezogen werden.

Bild 5: Eine Methode aus der Systembibliothek
Bild 6: Beispiel für einen Ausschnitt aus dem Desktop
Bild 7: Weiteres Beispiel für einen Ausschnitt aus dem Desktop

Durch bestimmte Operatoren kann erreicht werden, daß auf ein Objekt eine spezielle Methode seiner Klasse oder eine allgemeinere Methode seiner Oberklasse angewandt wird. Ein solcher Operator (“Pseudo-Variable”) super taucht in der Methode anfangssituation des Beispiels auf. Er bewirkt, daß bei der Auswertung der Botschaft super new setzeAnfangssituation mit der Suche nach der Methode new in der Oberklasse von Finanzsituation begonnen wird, also in der Klasse Object. Man kann eine Oberklasse dahingehend verstehen, daß sie die Gemeinsamkeiten aller ihrer Unterklassen beschreibt.

Betrachten wir zur Verdeutlichung noch einmal den in Abbildung 4 dargestellten Auszug aus der Smalltalk-Systembibliothek, die Klasse Magnitude mit einigen ihrer Unterklassen. Allen Exemplaren dieser Klasse und ihrer Unterklassen sind gewisse Operationen gemeinsam, wie etwa das Vergleichen von Objekten: Zeit mit Zeit, Datum mit Datum, Zahl mit Zahl etc. Derartige Operationen sind in der Oberklasse Magnitude definiert und werden von den Unterklassen entweder einfach geerbt oder geerbt und überlagert, also spezielleren Anforderungen angepaßt.

Smalltalk-Klassen sind global, das heißt, auf jede Klasse und ihre Methoden kann prinzipiell stets von überall zugegriffen werden. Das gilt auch für diejenigen Klassen und Methoden, auf denen das System selber beruht.

Eine der herausragenden Eigenschaften eines Smalltalk-Systems ist es, daß Klassen, wie die in Bild 4, in der Systembibliothek zur Verfügung gestellt werden, in der Smalltalk-80-Implementierung auf dem ATARI ST umfaßt die Bibliothek 244 vordefinierte Klassen mit über 5000 Methoden. Sämtliche bereitgestellten Klassen und Methoden liegen im Smalltalk-Quelltext vor und können in eigenen Programmen verwendet werden. Ein Beispiel für eine solche Methode und ihren Source-Code findet sich in Bild 5.

Gleichzeitig soll die Abbildung eine erste Idee davon vermitteln, wie man mit Hilfe des sogenannten System Browsers die Klassen und Methoden des Systems inspizieren kann. Durch den großen Umfang der Bibliothek beginnt das Programmieren in Smalltalk sozusagen mit fliegendem Start.

Das Entwerfen eines Programmes in Smalltalk besteht immer auch darin, sich Klarheit zu verschaffen, welche der zahlreichen vorgegebenen Klassen für die eigene Problemstellung nutzbar sind, indem durch Spezialisierung die benötigten Klassen aus ihnen erzeugt werden. Ganz von vorne muß man nur in dem seltenen Fall beginnen, daß keine der Klassen des Systems geeignet erscheint, um eine Lösung aus ihr heraus zu entwickeln. Eigene Erweiterungen und Änderungen in den Systemklassen werden aber Bestandteil des Systems. Hat man einmal zur Lösung einer Aufgabe neue Klassen und Unterklassen entwickelt, so hat man damit auch die Anzahl der vordefinierten Klassen erweitert. Jedes selbst erstellte Programm kann das System wachsen lassen, so daß aufbauend auf den ursprünglichen Klassen schnell eine große Sammlung entsteht. Die Programmierumgebung kann so den eigenen Wünschen angepaßt werden, und die Lösung spezieller Aufgaben wird damit einfacher, schneller und kleiner.

Ein gewisses Problem liegt allerdings darin, daß der Benutzer in der Regel nicht gegen die absichtliche oder unabsichtliche Veränderung auch solcher Teile geschützt ist, die in der Implementierung von Systemfunktionen verwendet werden. Wer sich berufen fühlt, an den Methoden des Compilers herumzubasteln, kann das tun, denn sie können, wie alle anderen Methoden auch, im Quelltext betrachtet und ediert werden.

Bei der Vielzahl der in der Bibliothek zu Verfügung gestellten Methoden kommt deren Verwaltung und Dokumentation eine große Bedeutung zu. Es nützten einem die schönsten Bibliotheksfunktionen nichts, wenn man sie nicht auch schnell und einfach genug finden könnte In dieser - wie auch in manch anderer - Hinsicht ist die Smalltalk-Benutzerschnittstelle jedoch vorbildlich gestaltet.

Desktop

Startet man die Smalltalk-Umgebung, so sieht man den ST förmlich verschwinden und - nach kurzem, zwischenzeitlichen Weiß - einen neuen Computer vor sich auftauchen wie Phoenix aus der Asche. Wenigstens auf dem Monitor.

Die Gestaltung der Benutzeroberfläche des Smalltalk-Systems war das Vorbild für zahlreiche fenstergesteuerten Systeme, die darauf folgten - im Smalltalk-Handbuch heißt das “...is now widely mimicked by other Systems” - , und sie kann sich in der Tat sehen lassen. Die abgebildeten Bildschirmschnappschüsse vermitteln einen besseren Eindruck davon, wie Smalltalk “aussieht”, als lange Beschreibungen, daher nur ein paar kurze Kommentare. Auf dem Bildschirm können beliebig viele Fenster geöffnet sein, von denen jeweils eines aktiv ist. Endlich einmal hat man einen Desktop, der den Namen auch verdient: Man kann das gleiche Chaos anrichten wie auf einem echten Schreibtisch. Man findet den alten Workspace nicht mehr? Kein Problem, wir machen einen, zwei, drei... neue auf. Aber wie auf besagtem echten Schreibtisch muß man ja keine Unordnung schaffen. Im übrigen geht das Hin- und Herspringen zwischen verschiedenen Fenstern recht schnell vonstatten. Anstelle der ST-üblichen festen Menüleisten sind jedem Fenster pop-up-Menüs zugeordnet, die durch Tastendruck der Maus an beliebiger Position im Fenster geöffnet werden können. Da Smalltalk von einer Maus mit drei Tasten ausgeht und von diesen auch intensiv Gebrauch macht, muß man sich auf dem ST damit behelfen, die dritte Taste durch gleichzeitiges Drücken der zwei Maustasten zu simulieren. Schadenfroh tröstet man sich damit, daß man es immer noch besser hat als Macintosh-Besitzer mit Eintasten-Maus. Der Smalltalk-Desktop ist größer als der ATARI-Monitor, was bedeuten soll, daß zu jedem Zeitpunkt nur ein Ausschnitt des ganzen Desktops sichtbar ist. Durch Ziehen des Mauszeigers über den Bildschirmrand kann man auf dem Desktop umherfahren, also seinen Ausschnitt verändern. Das funktioniert zwar gut, doch wünscht man sich, wenn man das nicht sowieso schon getan hat, bald einen Großbildschirm. Was sind also die Werkzeuge, die einem über die hervorragende Bedienungsoberfläche zur Verfügung stehen?

Selbst bei der Arbeit mit Smalltalk dauert es eine ganze Weile, bis man alle Bestandteile des Systems kennengelernt hat, man meint, immer wieder auf Neues zu stoßen. Von besonderer Bedeutung beim Erschließen des Systems ebenso wie bei der Programmierung sind die sogenannten Browser, die sich auch in einigen der Abbildungen wiederfinden. Diese Browser bieten die Möglichkeit, sich interaktiv über die im System implementierten Klassen zu informieren, sie zu verändern oder neue hinzuzufügen. Zu den wichtigsten Informationen, die zur Verfügung stehen, gehören die Stellung einer Klasse innerhalb der Klassenhierarchie des Gesamtsystems (siehe Bild 4), die Aufgabe einer Klasse, die Klassen- und Objektvariablen, der Zweck und die Implementierung der Methoden (siehe z.B. Bild 5), Übersichten über alle Klassen, die eine bestimmte Methode verwenden, Muster für die Definition neuer Klassen und Methoden etc. Sowohl die Texteingabe für neue Klassen und Methoden als auch deren Kompilierung erfolgen in Browsern. Einige wesentliche weitere Werkzeuge seien hier nur kurz aufgezählt: ein komplettes Filing-System; Text- und Graphikeditoren; Arbeitsflächen (Workspaces); Projektverwaltungshilfen; ein Debugger. Das Kennenlernen all dieser Systembestandteile geht wegen deren hervorragender Gestaltung sehr einfach und problemlos vor sich. Bereits nach kurzer Einarbeitungszeit sollte man in der Lage sein, die Möglichkeiten des Systems auch einigermaßen auszunutzen.

Und zusammengefaßt

Ein Smalltalk-80-System ist nicht nur eine Programmiersprache, sondern eine integrierte Entwicklungsumgebung mit einer Vielzahl von Hilfsmitteln, ein bemerkenswert durchkonstruiertes Softwareprodukt. Der abgestimmte Satz von Entwicklungswerkzeugen und die Gestaltung der Benutzeroberfläche sind vorbildlich. Bei der Konstruktion der Entwicklungsumgebung wurden wichtige Prinzipien der Softwaregestaltung wie Datenkapselung, Datenabstraktion und die Vererbung von Eigenschaften verwirklicht. Das System ist vollständig nach diesen Richtlinien entworfen und durch die lange Systemevolution ausgereift. Das ursprüngliche Entwicklungsziel der Einfachheit ist allerdings nur bedingt verwirklicht. Die Grundlagen der Sprache sind einfach und schnell zu erlernen, das System der vordefinierten Klassen ist es nicht. Die Sprachdefinition ist klein und uniform, doch liegt das auch daran, daß in Smalltalk Elemente, die in anderen Sprachen zum Sprachumfang gehören, nicht Bestandteil der Sprache selbst, sondern in Klassen ausgelagert sind. Beispiel hierfür sind die Kontrollstrukturen der strukturierten Programmierung wie if then else if, for- oder while-Schleifen, die vordefinierte Methoden eigener Klassen sind. Sich mit den Klassen eines Smalltalk-Systems vertraut zu machen, erfordert einige Zeit, auch wenn das Entdecken neuer Klassen und Methoden durch die System-Browser hervorragend unterstützt wird. Allerdings wird man mit einer ungewöhnlich reichhaltigen Quelltextbibliothek getesteter Methoden belohnt, die das Programmieren sehr effizient macht.

Das System ist offen, das heißt, auf Klassen kann von überall zugegriffen werden, erweiterbar, denn eigene Ergänzungen können Systembestandteil werden, und flexibel. Die Interpreter-Orientierung von Smalltalk bedingt unter anderem, daß in Smalltalk erstellte Programme nur auf Smalltalk-Systemen ablaufen können. Gerade bei rechenintensiven Aufgabenstellungen kann man mit anderen Sprachen gewiß oft schnellere Programme schreiben, selten jedoch mit derselben Einfachheit. Smalltalk eignet sich besonders für die Erstellung von Prototypen oder Einzelanfertigungen und ist für jeden interessierten Benutzer gut und effizient einsetzbar.

ST-Implementierung

Smalltalk-80 ist kein kleines System. Auf dem ST oder Mega-ST sind mindestens 2 MB Hauptspeicher erforderlich, 4 MB oder mehr werden empfohlen. Wir haben es in der Version 2.3 auf dem Mega-ST mit 4 MB Hauptspeicher getestet; ob man mit der kleineren Speicherausführung noch seine Freude hat, wissen wir nicht. Zusätzlich ist eine Hard-Disk erforderlich, 4 MB Diskplatz werden empfohlen, hinzu kommen noch einmal je 1,5 MB, wenn mehr als ein User Image verwendet werden soll.

Die Installierung des Systems geht nach Anleitung problemlos vonstatten. Die mitgelieferte, englische Dokumentation ist in Anbetracht ihres Preises und der Größe des Systems nicht sehr umfangreich ausgefallen. Vollständig dokumentiert ist das System darin jedenfalls nicht, auch ist der Index nicht auf neuestem Stand. Man ist gut beraten, zur zusätzlichen Information zumindest die beiden von den Entwicklern von Smalltalk ausgearbeiteten, ausgezeichneten Smalltalk-80-Bücher, die im Anhang genannt werden, zu Rate zu ziehen.

Die ST-Implementierung enthält das komplette Smalltalk-80-System. Sie ist stabil: Während des Testens ist es uns auch bei “unsinnigen” Operationen nur ein einziges Mal gelungen, einen Systemabsturz herbeizuführen. Bei der Vielzahl der zur Verfügung stehenden Hilfsmittel ist es kaum möglich, sie in kurzer Zeit wirklich alle gewissenhaft auszuprobieren, doch das, was wir kennengelernt haben, funktionierte so, wie es sollte. Die Bedienungsoberfläche reagiert beim Arbeiten kaum langsamer als ein normaler ST-Desktop.

Einzige Kritikpunkte sind neben der schon beanstandeten Dokumentation im wesentlichen Kleinigkeiten. Störend wirkt sich zum Beispiel aus, daß die Cursortasten in den Edierfenstern nicht belegt sind - man muß also immer zur Maus greifen -, und daß die “Delete”-Taste einen “Backspace” bewirkt. Aber schließlich ist das System ja dazu ausgelegt, an eigene Bedürfnisse angepaßt zu werden, “Do It Yourself" ist hier gefragt.

Für ST-Verhältnisse ist ein Smalltalk-80 System nicht billig, doch es wird ja auch viel geboten. Der Preis beläuft sich mit Handbuch auf rund 2260.- DM, legt man sich noch die erwähnten Bücher zu, so fallen nochmals rund 250.- DM an. Studenten, Schüler und Lehrer können sich über einen deutlichen Rabatt freuen. Der Preis beträgt dann noch 399.- DM, Smalltalk rutscht so in die Preisklasse guter “C”-Compiler. Für Universitäten wird außerdem eine spezielle Lizenzregelung angeboten. Erwähnt sei noch, daß der ST derzeit die billigste Hardware-Basis für Smalltalk-80 Systeme ist.

Bezugsquelle

Georg Heeg
Baroper Str. 337
D-4600 Dortmund 50

Literaturzusammenstellung

[1] “The Smalltalk-80 Programming System. Version 23, Atari ST", Parc Place Systems, Palo Alto, Ca, Georg Heeg, Dortmund

Mitgelieferte System-Dokumentation

[2] A.Goldberg: "Smalltalk-80 The Interactive Programming Environment". Addison-Wesley, Reading, 1983.

Tutorial, erklärt das Smalltalk User Interface, seine Tools und die Umgebung

[3] A.Goldberg/D.Robson "Smalltalk-80: The Language and its Implementation". Addison-Wesley, Reading. 1983

Beschreibt die Feinheiten der Smalltalk-Sprache, Syntax, Semantik und Anwendung, zahlreiche Beispiele.

[4] HJ Hoffmann (Hrsg.): "Smalltalk verstehen und anwenden". Hanser, Wien 1987.

Vorstellung und Kritik von Sprache, Umgebung und Problemen bei der Systemimplementierung, weniger umfangreich


Ulrich Dorndorf
Aus: ST-Computer 03 / 1989, Seite 38

Links

Copyright-Bestimmungen: siehe Über diese Seite