Smalltalk | |
Datum der ersten Version | Die Entwicklung begann 1969 und war 1980 öffentlich zugänglich |
---|---|
Paradigmen | Objekt |
Autor | Alan Kay , Dan Ingals , Ted Kaehler und Adele Goldberg |
Entwickler | Xerox PARC |
Letzte Version | ANSI Smalltalk |
Tippen | dynamisch |
Beeinflusst von | Lisp , Simula |
Beeinflusst | Ziel-C , Selbst , Eiche , Java , Dylan , AppleScript , NewtonScript , Python , Ruby , Scala , Perl 6 , Scratch |
Implementierungen | Quietschen , GNU Smalltalk , VisualWorks , Pharo |
Betriebssystem | Plattformübergreifend |
Smalltalk ist eine objektorientierte , reflektierende und dynamisch typisierte Programmiersprache . Es war eine der ersten Programmiersprachen mit einervollständig grafisch integrierten Entwicklungsumgebung . Es wurde 1972 gegründet . Es ist inspiriert von den Sprachen Lisp und Simula . Es wurde von Alan Kay , Dan Ingals , Ted Kaehler und Adele Goldberg im Palo Alto Research Center bei Xerox entworfen . Die Sprache wurde als Smalltalk-80 formalisiert und wurde seitdem von einer großen Anzahl von Menschen verwendet. Smalltalk ist noch aktiv entwickelt.
Smalltalk war ein großer Einfluss auf die Entwicklung vieler Programmiersprachen, darunter: Objective-C , Actor (in) , Java und Ruby .
Viele der Innovationen in der Softwareentwicklung der neunziger Jahre stammten aus der Smalltalk-Programmiergemeinschaft, wie z. B. Entwurfsmuster (auf Software angewendet), extreme Programmierung (XP) und Refactoring . Ward Cunningham , der Erfinder des Wiki- Konzepts , ist auch ein Smalltalk-Programmierer.
Es gibt eine große Anzahl von Variationen von Smalltalk, wie dies häufig bei Programmiersprachen der Fall ist. Ohne weiteres Adjektiv bezieht sich das Wort Smalltalk häufig auf Smalltalk-80, die erste Version, die 1980 veröffentlicht wurde.
Smalltalk ist das Produkt einer Gruppe von Forschern unter der Leitung von Alan Kay im Palo Alto Research Center (PARC) von Xerox . Alan Kay entwarf die ersten Versionen von Smalltalk, die von Dan Ingalls implementiert wurden . Die erste Version mit dem Namen Smalltalk-71 wurde in wenigen Morgenstunden mit der Wette erstellt, dass eine Programmiersprache, die auf der Idee basiert, von Simula inspirierte Nachrichten zu senden , auf einer "Codepage" realisiert werden kann.
Die Hauptkonzepte von Smalltalk sind:
Smalltalk implementiert zusätzlich zu den Hauptgrundobjekten ( Klasse , Objekt , Vererbung , Polymorphismus ) ursprüngliche Konzepte ( Metaklasse ) und führt den Begriff des persistenten Objekts, die Ausnahmebehandlung und das Modellansicht-Controller- Prinzip ein .
Ein überraschendes Merkmal von Smalltalk ist das völlige Fehlen von integrierten Steuerbefehlen an die Sprache aus : if- then- else, for, whileusw. Alle diese Anweisungen werden mithilfe von Objekten implementiert. Zum Beispiel werden Entscheidungen getroffen, indem eine Nachricht ifTruean ein Boolesches Objekt gesendet und ein Code übergeben wird, der ausgeführt werden soll, wenn der Boolesche Wert wahr ist. Der einzige standardmäßig integrierte Aspekt ist die Syntax zum Senden einer Nachricht an ein Objekt.
Das folgende Beispiel zeigt den Smalltalk-Programmierstil. Wenn Sie diesen Code ausführen, werden die Vokale in einer Zeichenfolge gefunden. Die Variablen werden zwischen zwei vertikalen Balken | ... | :deklariert. Deklarieren Sie die Parameter:
| aString vowels | aString := 'This is a string'. vowels := aString select: [:aCharacter | aCharacter isVowel].In der letzten Zeile aStringerhält die Zeichenfolge eine Nachricht select:mit einem Codeblock als Argument. Hier ist der Code für die Oberklasse Collection, die den Job erledigt:
Collection>>select: aBlock | newCollection | newCollection := self species new. self do: [:each | (aBlock value: each) ifTrue: [newCollection add: each]]. ^newCollectionDieser Code antwortet auf die Nachricht, indem er seine Mitglieder durchläuft (dies ist die Methode do:), indem er den Code aBlockfür jedes Zeichen auswertet . aBlock( aCharacter isVowel) erstellt bei der Auswertung einen Booleschen Wert, der dann an gesendet wird ifTrue:. Wenn der Boolesche Wert true ist, wird das Zeichen an die zurückgegebene Zeichenfolge angehängt. Wie selectin der abstrakten Klasse definiert Collection, könnten wir es auch folgendermaßen verwenden:
| rectangles aPoint| rectangles := OrderedCollection with: (Rectangle left: 0 right: 10 top: 100 bottom: 200) with: (Rectangle left: 10 right: 10 top: 110 bottom: 210). aPoint := Point x: 20 y: 20. collisions := rectangles select: [:aRect | aRect containsPoint: aPoint].