Smalltalk Eine Objektorientierte Programmiersprache
Total Page:16
File Type:pdf, Size:1020Kb
Arbeitsgruppe Programmiersprachen und Übersetzerkonstruktion Institut für Informatik Christian-Albrechts-Universität zu Kiel Seminararbeit Smalltalk Eine objektorientierte Programmiersprache Phil Stelzer WS 2012/2013 Betreuer: Prof. Dr. Michael Hanus Inhaltsverzeichnis 1 Einordnung 1 1.1 Geschichte der Sprache . .1 1.2 Entwicklung/Vorgängersprachen . .2 1.3 Paradigma . .3 2 Anwendungsgebiete 4 2.1 Wofür ist die Sprache beabsichtigt? . .4 2.2 Wo wird die Sprache eingesetzt? . .4 3 Konzepte und Struktur 5 3.1 Sprachbeschreibung . .5 3.2 Was ist bei der Benutzung von Smalltalk zu beachten? . .6 3.3 Konzepte an Beispielen . .6 3.3.1 Beispiel 1 . .6 3.3.2 Beispiel 2 . .8 3.4 Vergleich mit verwandten Sprachen . .9 4 Technische Unterstützung 10 4.1 Compiler, Interpreter, Entwicklungsumgebung . 10 4.2 Werkzeuge und Bibliotheken . 11 4.3 Portabilität . 11 5 Diskussion und Zusammenfassung 12 5.1 Vor- und Nachteile . 12 5.2 Zukunft der Sprache . 12 ii Abbildungsverzeichnis 1.1 Alan Kay mit einem Prototyp des Dynabooks . .2 3.1 Nachrichten an Objekte senden . .7 3.2 Objektdumper als Beispiel für Reection . .8 4.1 Pharo als Beispiel einer typischen Smalltalk Umgebung . 10 5.1 Open Cobalt Projekt zeigt 3D Verlinkungen zu anderen Desktops . 13 5.2 Open Cobalt Nutzer schauen sich zusammen eine VNC Übertragung an . 14 iii 1 Einordnung 1.1 Geschichte der Sprache Smalltalk wurde in den 1970er Jahren von Alan Kay, Dan Ingalls, Adele Goldberg und anderen am Forschungszentrum Xerox PARC in Kalifornien entwickelt. Die erste Version von Smalltalk wurde 1972 veröentlicht. Das Konzept der Sprache entstand in den spä- ten 1960er Jahren in der Ph.D. Dissertation von Alan Kay, der schon damals den Nutzen von Computern für nicht-Programmierer voraussah. Seine Doktorarbeit befasste sich mit einem Gerät, dem sogenannten 'Dynabook' (Abbildung 1.1), das mehrere Papier- seiten durch Fenster darstellen kann und durch Tastendrücke bzw. Fingergesten direkt auf dem Bildschirm gesteuert werden kann. Diese erstmal nur theoretisch formulierte Idee verschate ihm daraufhin eine Anstellung am Xerox PARC, wo er in der 'Learning Research Group' (1981 umbenannt in 'Software Concepts Group') seine Vision umzu- setzen versuchte. Die Arbeitsgruppe konzentrierte sich auf zwei Hauptbereiche bei ihren Forschungen: Eine Programmiersprache, die als Schnittstelle zwischen den Modellen im menschlichen Geist und der in Computer-Hardware dient, und eine Benutzeroberäche die auf die Kommunikation von Menschen mit Computern angepasst ist [GR83]. Einher- gehend mit diesen Forschungen wurden verschiedene Experimente durchgeführt, die sich damit beschäftigten Kindern das Programmieren beizubringen. Die Entwicklungen ende- ten in der 1980 vorgestellten Version Smalltalk-80, die Alan Kay's Vision fast vollständig erfüllte. In den nachfolgenden Jahren bis in die 90er verbreitete sich Smalltalk eher mäÿig. Die Anforderungen an die Hardware durch die graphische Oberäche war anspruchsvoll und für die meisten C-Programmierer war C++ der aussichtsreichere Umstieg. Anfang und Mitte der 90er Jahre gab es jedoch einen kurzen Aufschwung, da unter anderem IBM damit begann, Smalltalk in Groÿkundenprojekten einzusetzen und die Anzahl der verfügbaren Implementierungen stark zunahm. Gebremst wurde dies schon Ende der 90er von Java, welches durch das Internet zu gröÿerer Popularität gelangt war. 1996 wurde Squeak von den ursprünglichen Smalltalk Entwicklern veröentlicht. Squeak ist eine plattformunabhängige Implementierung inklusive Entwicklungsumgebung für Small- 1 1 Einordnung talk und wird in dem Projekt 'One Laptop Per Child' als Lernumgebung eingesetzt. Abbildung 1.1: Alan Kay mit einem Prototyp des Dynabooks Aufbauend auf der Frage nach einer optimalen Mensch-Computer-Schnittstelle - und damit Alan Kays Vision - fand in den letzten Jahren eine Weiterentwicklung und An- passung der Antwort auf diese Frage statt. Mit dem Croquet-Projekt wurde 2007 eine Plattform veröentlicht, die nicht nur 2D Oberächen in Smalltalk, sondern 3D Objekte in einer Art 'virtual reality' darstellt. Interessant dabei ist, dass der Nutzer während der Benutzung Objekte der Welt in Echtzeit verändern und anpassen kann. Die Weiterent- wicklung wurde 2009 an das Open Cobalt Projekt übergeben und wird aktiv gepegt. 1.2 Entwicklung/Vorgängersprachen Die Entwicklung von Smalltalk wurde in einigen Punkten von den Sprachen Lisp und Simula beeinusst. Von Lisp, das 1958 speziziert wurde, wurden Konzepte wie das so genannte 'garbage collecting' übernommen. Simula, als Vorgänger der objektorientierten Programmiersprachen, führte die Schlüs- selwörter 'class', 'new', 'this' ein, die auch heute noch in modernen Programmiersprachen verwendet werden. Auch das Klassenkonzept, Vererbung, Typen, Methoden und Eigen- schaften wurden ähnlich in Smalltalk eingesetzt. Das Konzept, eine Art Schreibtisch als 2D Oberäche darzustellen, hatte groÿen Ein- 2 1 Einordnung uss auf die heute verbreiteten Desktopkonzepte von Microsoft Windows und OS X von Apple. Die von Smalltalk verwendete virtuelle Maschine sowie der Garbage Collector sind Grundlage für die Plattformunabhängigkeit in Java. Der letzte ozielle Standard von Smalltalk wurde 1980 mit Smalltalk-80 veröent- licht. Dieser wird am konsequentesten durch die Implementierung Squeak umgesetzt und durch andere Projekte wie 'Pharo' oder 'VisualAge Smalltalk' erweitert und an aktuelle Computerarchitekturen angepasst. 1.3 Paradigma Smalltalk ist eine objektorientierte, reektive, dynamisch typisierte, Abbild-basierende ('image based') Programmiersprache. Eine objektorientierte Programmiersprache ver- packt ihre Daten und Methoden, um die Daten zu verändern, in Objekten. Die einzige Möglichkeit die Daten zu modizieren besteht darin, Nachrichten an das entsprechende Objekt zu schicken. Attribute von Objekten können nicht durch direkten Zugri von auÿen geändert werden. Auf diese Weise wird das Konzept der Datenkapselung ('data encapsulation') sichergestellt. Ein weiterer Aspekt der objektorientierten Programmierung ist die Vererbung. Durch Vererbung steigert sich die sogenannte 'code reusability', indem schon geschriebene Me- thoden an Kindklassen weitergegeben bzw. vererbt werden können. Kritiker der objekt- orientierten Programmierung bezeichnen das Paradigma als 'Software bloat'. Joe Arm- strong, der Ernder von Erlang, bringt diese Kritik mit den Worten "The problem with object-oriented languages is they've got all this implicit environment that they carry around with them. You wanted a banana but what you got was a gorilla holding the banana and the entire jungle."[Wik13a] auf den Punkt. Smalltalk jedoch setzt die Eigenschaften der objektorientierten Programmierung kon- sequent um und hat mit diesem Paradigma viele andere heute noch populäre Sprachen beeinusst. 3 2 Anwendungsgebiete 2.1 Wofür ist die Sprache beabsichtigt? Smalltalk und die damit verbundene Desktopumgebung war ursprünglich vor allem für Schüler und Schulen gedacht. Alan Kay's Idee war es eine Umgebung für Schüler zu schaf- fen, die die Interaktion mit dem Computer selbst für Kinder möglich macht. Im Mittel- punkt dabei standen vor allem das Denken in Objekten, was der natürlichen Denkweise eines Menschen nahe kommt. Das Interface von Smalltalk versucht, eine visuelle Sprache zu Objekten zu schaen und den Computer damit zu einem veränderbaren, interaktiven Medium zu machen. Auch die Verwendung eines Zeigegeräts war schon früh geplant und zeigt, wie nah das Konzept von Smalltalk und der graphischen Darstellung dem heutigen 'personal computer' kommt. 2.2 Wo wird die Sprache eingesetzt? Heutzutage wird Smalltalk in der Wirtschaft nur selten eingesetzt, obwohl es kommerzielle Projekte wie 'VA Smalltalk' gibt. Der eigentliche Zweck jedoch, Smalltalk vor allem für Schüler als Lernmedium einzuset- zen, ist mit der auf Squeak basierenden EToys Implementierung weitestgehend geglückt. Die Initiative 'One Laptop Per Child (OLPC)' setzt auf den verwendeten Laptops (die dem Vorbild des Dynabooks sehr nahe kommen) unter anderem EToys ein und wird von Alan Kay aktiv unterstützt [Wik12, Children's Machine]. Das Open Cobalt Projekt, welches die Darstellung des Desktops als 3D Oberäche und das Teilen von Ressourcen durch sogenannte '3D Portale' mit anderen Benutzern ermöglicht, bendet sich in aktiver Entwicklung. Generell ist Smalltalk weiterhin eher eine Nischensprache, die kaum in kommerziellen Projekten eingesetzt wird, dafür jedoch immer noch viele Anhänger als Hobbyprogram- mierer hat. 4 3 Konzepte und Struktur 3.1 Sprachbeschreibung Das wohl markanteste Merkmal an Smalltalk ist seine konsequent eingesetzte Objektori- entierung. Die aus Java bekannten primitiven Typen wie Integer oder Character werden in Smalltalk ebenfalls durch Objekte repräsentiert. Sogar ausführbarer Code, Stackframes und Speicher sind Objekte. Im Allgemeineren basiert Smalltalks Objektmodel auf den folgenden fünf Regeln [BDNP09]: Rule 1. Everything is an object. Rule 2. Every object is an instance of a class. Rule 3. Every class has a superclass. Rule 4. Everything happens by sending messages. Rule 5. Method lookup follows the inheritance chain. Beim genaueren Betrachten der Regeln fällt vor allem auf, dass demnach auch Klassen Objekte sein müssen. Diese Eigenschaft ist fundamental, denn sie macht Smalltalk zu einem reektiven System. Reektivität bzw. 'reection' bedeutet, dass das Verhalten und die Struktur (Eigen- schaften und Methoden) eines Objekts zur Laufzeit geändert werden kann. Dies bietet verschiedene Vorteile wie die Überwachung von Klassen und Objekten und das Ändern von