Designkonzept und Eigenschaften einer objektorientierten Sprache:

"Smalltalk" - Mikro-Software der Zukunft?

08.06.1984

Die in den nächsten Jahren zu erwartende Konzentration des Mikrocomputer-Marktes wirft auch die Frage nach der Systemsoftware der Zukunft auf. In Marktstudien wird neben den bekannten Systemen MS-DOS, PC/M und Unix dem zur Zeit noch sehr wenig verbreiteten Smalltalk-System ein großes Marktpotential prognostiziert. Martin Bergmann, Hans-Dieter Litke und Günter Schmid, Mitarbeiter am Fraunhofer-Institut für Arbeitswirtschaft und Organisation in Stuttgart, stellen das Designkonzept und die Grundeigenschaften von Smalltalk vor.

Das System "Smalltalk-80" wurde in den Forschungslabors von Xerox in Palo Alto entwickelt. Der Begriff umfaßt die objektorientierte Programmiersprache Smalltalk-80 sowie die interaktive Programmierumgebung. Charakteristisch für das Produkt ist die Modularität, Homogenität und Zugänglichkeit aller Systemkomponenten. Da zwischen System- und Anwendungssoftware nicht unterschieden wird, existiert kein geschlossenes Betriebssystem. Betriebssystemfunktionen wie Dateiverwaltung oder Ein-/Ausgabe sind in das Sprachkonzept integriert und für den Benutzer frei verfügbar.

Die objektorientierte Programmiersprache

Ein in einer prozeduralen Programmiersprache (Pascal, ADA, C, PL/1) abgefaßtes Programm besteht aus Daten, die Informationen repräsentieren, und aus Prozeduren, die auf diesen Daten operieren. Zwischen den beiden Elementen bestehen starke Abhängigkeiten, die jedoch vor allem in komplexen Softwaresystemen nur schwer zu erkennen sind. Eine Folge davon sind Schnittstellenprobleme bei der Softwareentwicklung und -wartung.

In der objektorientierten Programmiersprache Smalltalk-80 besteht diese Trennung nicht. Daten und darauf operierende Prozeduren ("Methoden"} werden zu "Objekten" zusammengefaßt, wobei die Daten eines Objekts nur für dessen Methoden zugänglich sind.

Objekte können mit Hilfe von "Botschaften" miteinander kommunizieren. Durch das Aussenden einer Botschaft kann das sendende Objekt die Ausführung einer Methode des empfangenden Objekts veranlassen. Eine Botschaft wird durch einen Ausdruck spezifiziert, der den Namen des empfangenden Objekts ("Empfänger"), den Namen der beim Empfänger auszuführenden Methode ("Selektor") und eventuell von der Methode benötigte Argumentobjekte angibt. Der Wert einer Botschaft ist wiederum ein Objekt. Dadurch ist die Schachtelung von Ausdrücken möglich. Ausdrücke für Selektion und Iteration bieten weitere Möglichkeiten zur Steuerung des Kontrollflusses.

Die Beschreibung der Daten und Methoden eines Objekts erfolgt in einer "Klasse". Durch Senden von Botschaften an eine Klasse können Objekte ("Instanzen") von der spezifizierten Struktur generiert werden. Als Beispiel betrachten wir das Artikelverwaltungsprogramm eines kommerziellen Softwaresystems. Die Artikeleigenschaften werden in der Klasse "Artikel" angegeben. Sie enthält die Beschreibung der Artikelstammdaten (zum Beispiel Artikelbezeichnung, Artikelgewicht, Artikelpreis) und der auf diesen Daten operierenden Methoden (zum Beispiel Änderungen und Abfragen von Artikeldaten). Beim Anlegen eines Artikels wird durch Senden einer Botschaft an die Klasse "Artikel" eine neue Instanz erzeugt, die diesen Artikel repräsentiert.

Dieses Beispiel soll demonstrieren, daß die Sprache Smalltalk-80 eine wirklichkeitsäquivalente Modellierung eines Softwaresystems unterstützt und den Programmierer zu modularem Programmaufbau zwingt. Softwareentwicklung und vor allem Softwarewartung werden durch die Übersichtlichkeit von Smalltalk-80-Programmen erleichtert. Nach eigener Erfahrung muß jedoch mit beträchtlichem Aufwand beim Erlernen der Sprache gerechnet werden.

Die interaktive Programmierumgebung

Aufgabe der Programmierumgebung ist die Unterstützung des Programmierers bei der Erstellung und Wartung von Programmen. Für andere Programmiersprachen sind keine Hilfsmittel vorhanden.

Besonderen Wert wurde auf eine Benutzerschnittstelle gelegt, die den Bildschirm in einen elektrostatischen Schreibtisch verwandelt. Dies wird durch Mechanismen zur beliebigen Definition, Manipulation und Überlappung von Bildschirmfenstern und durch hochauflösende Grafik in Kombination mit diversen Schriftarten erreicht.

Fenster sind in ein oder mehrere Teilfenster ("panes") aufteilbar. Jedem Fenster und Teilfenster ist eine Menütafel zugeordnet, wobei Fenstermenüs Befehle zur Fensterverwaltung (Fenstergröße ändern, Fenster verschieben, Fenster ausdrucken) und Teilfenstermenüs vom Teilfensterinhalt abhängige Befehle enthalten.

Die Verwendung der "Maus" als zusätzliches Eingabegerät reduziert den Schreibaufwand bei der Kommunikation mit dem System, da häufiger benutzte Befehle durch folgenden Ablauf aktiviert werden können:

- Einblenden des Menüs des gerade bearbeiteten Fensters durch Betätigen einer an der "Maus" angebrachten Taste (Pop-up-Menü). Pop-up-Menüs verbessern die Übersichtlichkeit des Bildschirms, da sie nur auf dem Bildschirm erscheinen, wenn sie benötigt werden. Sie sind jedoch nicht in allen Smalltalk-Versionen realisiert.

- Positionieren des mit der "Maus" gekoppelten Cursors in der Menüzeile des aktiven Menüs, die mit dem Befehlsnamen gekennzeichnet ist.

- Ausführen des ausgewählten Befehls durch Drücken einer weiteren "Maus"-Taste.

Zum Aufruf des Editors ist kein Befehl nötig. Ebenso ist ein spezieller Editiermodus, der erst die Ausführung von Editierfunktionen erlaubt, nicht vorhanden. Wie Bleistift und Radiergummi stehen ständig sämtliche Funktionen für den Benutzer bereit. Sie werden modusfrei ausgeführt: Das zu manipulierende Textsegment wird vor der Angabe der Editorfunktion festgelegt.

Die Modusfreiheit fördert die Übersichtlichkeit des Systems für den Benutzer. Da mit der Tastatur und der "Maus" zwei Eingabegeräte bedient werden müssen, ist die Arbeit mit diesem Editor erfahrungsgemäß gewöhnungsbedürftig.

In der Dateiverwaltung besteht neben der Speicherung von Programmfiles die Möglichkeit, den augenblicklichen Zustand des Systems (Klassendefinitionen, Objekte, unterbrochene Prozesse, Bildschirmfenster etc.) auf Hintergrundspeicher abzulegen.

Außer Programmierwerkzeugen stellt das System auch einige vordefinierte Klassen bereit, wie zum Beispiel die Klasse "Number" zur Beschreibung von Zahlen (float, fraction, integer), die Klassen "Semaphore" und "Process" zur Definition und Synchronisation von Prozessen oder die Klasse "Network" zur Beschreibung von Netzwerkprotokollen.

Grundlage für den Erfolg beziehungsweise Mißerfolg eines Mikrocomputer-Betriebssystems ist der Aufwand für dessen Implementierung. Smalltalk-Implementierungsaspekte sind daher Gegenstand des folgenden Abschnitts. Für den Einsatz von Smalltalk auf einem Mikro sind bestimmte Hardwareeigenschaften erforderlich:

- schneller Prozessor,

- 80-KB-Hauptspeicher bei der Version mit virtueller Speicherverwaltung, sonst 256 KB,

- hochauflösender, zweifarbiger Rasterbildschirm,

- Tastatur und ein weiteres Eingabegerät mit Markierfunktion (zum Beispiel "Maus", Grafiktablett) und

- eine schnelle Magnetplatteneinheit, um virtuelle Speicherverwaltung einsetzen zu können.

Der mit 300 KB Speicherbedarf überwiegende Teil des Systems (Compiler, Debugger, Editor) ist in der Sprache Smalltalk-80 geschrieben. Der Compiler übersetzt Programme in den Code einer virtuellen Maschine. Die Implementierung des Systems besteht also lediglich in der Abbildung der virtuellen Maschine auf die reale Hardware, wofür etwa 10 KB Assemblercode zu entwickeln sind. Die virtuelle Maschine enthält die Verwaltung des Objektspeichers, den Interpreter zur Ausführung des Codes der virtuellen Maschine und maschinencodierte Unterprogramme zur Performance-Steigerung.