Conversa fiada | |
Data da primeira versão | O desenvolvimento começou em 1969 , disponível publicamente em 1980 |
---|---|
Paradigmas | Objeto |
Autor | Alan Kay , Dan Ingals , Ted Kaehler, Adele Goldberg |
Desenvolvedores | Xerox PARC |
Última versão | ANSI Smalltalk |
Digitando | dinâmico |
Influenciado por | Lisp , Simula |
Influenciado | Objective-C , Self , Oak , Java , Dylan , AppleScript , NewtonScript , Python , Ruby , Scala , Perl 6 , Scratch |
Implementações | Squeak , GNU Smalltalk , VisualWorks , Pharo |
Sistema operacional | Plataforma cruzada |
Smalltalk é uma linguagem de programação orientada a objetos , reflexiva e com tipagem dinâmica . Foi uma das primeiras linguagens de programação a ter um ambiente de desenvolvimento totalmente integrado gráfico. Foi criado em 1972 . É inspirado nas linguagens Lisp e Simula . Ele foi projetado por Alan Kay , Dan Ingals , Ted Kaehler , Adele Goldberg no Palo Alto Research Center da Xerox . A linguagem foi formalizada como Smalltalk-80 e desde então tem sido usada por um grande número de pessoas. Smalltalk ainda está ativamente desenvolvido.
Smalltalk foi uma grande influência no desenvolvimento de muitas linguagens de programação, incluindo: Objective-C , Actor (in) , Java e Ruby .
Muitas das inovações em engenharia de software da década de 1990 vieram da comunidade de programação Smalltalk, como padrões de projeto (aplicados a software), extrema programação (XP) e refatoração . Ward Cunningham , o inventor do conceito wiki , também é um programador Smalltalk.
Há um grande número de variações de Smalltalk, como costuma ser o caso com linguagens de programação. Sem adjetivo adicional, a palavra Smalltalk é freqüentemente usada para se referir a Smalltalk-80, a primeira versão a ser lançada ao público em 1980.
Smalltalk é o produto de um grupo de pesquisadores liderados por Alan Kay no Palo Alto Research Center (PARC) da Xerox ; Alan Kay projetou as primeiras versões de Smalltalk que foram implementadas por Dan Ingalls . A primeira versão, batizada de Smalltalk-71, foi criada em poucas manhãs na aposta de que uma linguagem de programação baseada na ideia de envio de mensagens inspirada em Simula poderia ser realizada em "uma página de código".
Os principais conceitos de Smalltalk são:
Smalltalk implementa, além dos principais objetos básicos ( classe , objeto , herança , polimorfismo ), conceitos originais ( metaclasse ) e introduz a noção de objeto persistente, tratamento de exceções e o princípio model-view-controller .
Uma característica surpreendente de Smalltalk é a ausência total de instruções de controle integrado para o idioma: if- then- else, for, whileetc. Todas essas instruções são implementadas usando objetos. Por exemplo, as decisões são tomadas enviando uma mensagem ifTruea um objeto booleano e passando um trecho de código a ser executado se o booleano for verdadeiro. O único aspecto embutido por padrão é a sintaxe para enviar uma mensagem a um objeto.
O exemplo a seguir ilustra o estilo de programação Smalltalk. Executar este código encontrará as vogais em uma string. As variáveis são declaradas entre duas barras verticais | ... |, :declare os parâmetros:
| aString vowels | aString := 'This is a string'. vowels := aString select: [:aCharacter | aCharacter isVowel].Na última linha, a string aStringrecebe uma mensagem select:com um bloco de código como argumento. Aqui está o código para a superclasse Collectionque faz o trabalho:
Collection>>select: aBlock | newCollection | newCollection := self species new. self do: [:each | (aBlock value: each) ifTrue: [newCollection add: each]]. ^newCollectionEste código responde à mensagem iterando por meio de seus membros (este é o método do:) avaliando o código aBlockpara cada caractere; aBlock( aCharacter isVowel) quando avaliado cria um booleano, que é enviado para ifTrue:. Se o booleano for verdadeiro, o caractere será anexado à string que será retornada. Como selectestá definido na classe abstrata Collection, também podemos usá-lo desta forma:
| 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].