Smalltalk

Smalltalk
ParadigmaOrientação a Objetos
Surgido emInício em 1969, tornou-se público em 1980
Última versãoSmalltalk-80 version 2 (1980; há 46 anos (1980))
Criado porL. Peter Deutsch, Adele Goldberg, Dan Ingalls, Ted Kaehler, Alan Kay, Diana Merry, Scott Wallace and Xerox PARC
Estilo de tipagemdinâmica
Projetado porAlan Kay, Dan Ingalls, Adele Goldberg
Principais implementaçõesAmber, Dolphin Smalltalk, GemStone/S, GNU Smalltalk, Pharo, Smalltalk/X, Squeak, Cuis Smalltalk, VA Smalltalk, VisualWorks
DialetosSqueak
Influenciada porLisp, Simula, Logo, Sketchpad
InfluenciouAppleScript, CLOS, D, Dart, Dylan, Erlang, Etoys, Falcon, Go, Groovy, Io, Ioke, Java, Lasso, Lisaac, Logtalk, Newspeak, NewtonScript, Object REXX, Objective-C, PHP 5, Python, Raku, Ruby, Scala, Scratch, Self, Swift
PlataformaXerox Alto (74181)
Sistema operacionalMultiplataforma
Extensão do arquivo.st

Smalltalk-80, ou simplesmente Smalltalk, é uma linguagem de programação orientada a objeto dinamicamente tipada.

Em Smalltalk tudo é objeto: os números, as classes, os métodos, blocos de código, etc. Não há tipos primitivos, ao contrário de outras linguagens orientadas a objeto; strings, números e caracteres são implementados como classes em Smalltalk, por isso esta linguagem é considerada puramente orientada a objetos. Tecnicamente, todo elemento de Smalltalk é um objeto de primeira ordem.

Os programadores definem classes de objetos em suas aplicações para imitar (ou simular) o mundo real. Estas classes de objeto são organizadas hierarquicamente, de modo que seja possível fazer novos objetos com características de outros objetos, com poucas mudanças.

Smalltalk é relativamente fácil de aprender comparado a linguagens como C++ e ADA. O código-fonte Smalltalk é fácil de ler, o que o torna a linguagem de programação ideal para iniciantes.

História

O Smalltalk evoluiu através de várias iterações. Do Smalltalk-71 (que parecia um pouco com o Logo) e Smalltalk-72 (na qual muitas das funcionalidades de mídia foram implementadas, da capacidade de desenhar até programas de música e linguagens de programação icônicas) para chegar no Smalltalk-76, que foi o primeiro Smalltalk moderno. Dan Ingalls foi o principal implementador nessa época, e o criador do Smalltalk-76. Ted Kaehler foi outro implementador do equipe original do Learning Research Group, desenvolvendo o sistema de música para o Smalltalk-72, uma versão da tartaruga do Logo para Smalltalk, além da estrutura de memória orientada a objetos.

O Smalltalk-80 foi lançado para computadores de diversas companhias (Hewlett-Packard, DEC, Apple, IBM, Tektronix) como um teste de portabilidade do ambiente. Foi implementado como um compilador de bytecode. O código era de fato compilado, porém não para a linguagem de máquina nativa do computador que executava aplicação e, sim, compilado para uma linguagem de máquina de um computador que não existia: a máquina virtual. A vantagem desse esquema que foi criado com o Smalltalk-80 é que ele tornou-se extremamente portável.

O Smalltalk-80 tornou-se um padrão para as diversas versões de Smalltalk. Depois disso, a Xerox resolveu criar uma empresa chamada ParcPlace para cuidar do desenvolvimento do Smalltalk, gerando novas versões como ObjectWorks e, posteriormente, VisualWorks. Outras versões foram criadas por outras companhias, tais como: Smalltalk/V da Digitalk e o SmalltalkAgents da Quasar; todos com sintaxe e estruturas semelhantes, porém o código da interface gráfica era radicalmente diferente.

Sintaxe

A sintaxe de Smalltalk-80 é bastante diferente das linguagens tradicionais.

Ao invés do que é usado na maioria das linguagens tradicionais, em Smalltalk utiliza-se sempre a ordem <objeto recebedor> <mensagem>.

No exemplo abaixo, o método publish é formado de uma linha, onde se envia a mensagem show para o objeto Transcript, com o parâmetro Hello, world (que é um objeto).

publish
    Transcript show: 'Hello, world!'

Polimorfismo

Em Smalltalk não há o Polimorfismo Universal Paramétrico nem o Ad-Hoc por Coerção. Sendo assim só há implementado o Universal por Inclusão e o Ad-Hoc por Sobrecarga. Exemplos:

Numeros subclass: #Primos
 instanceVariableNames: ''
 classVariableNames: ''
 poolDictionaries: ''
 category: 'Numeros'

Initialize
 super initialize.

verificaSeEPrimo: temp "a funcao isPrime ja existe na classe Integer"
 Transcript show: temp isPrime.

imprime
 Transcript show:'sobrescrevi o metodo imprime da classe pai(Numeros). Isso mostra que Smalltalk suporta
polimorfismo universal por inclusao'.
Object subclass: #Numeros
 instanceVariableNames: 'val'
 classVariableNames: ''
 poolDictionaries: ''
 category: 'Numeros'

Initialize
 super initialize.
 val := 0.

getVal
 ^ val.

setVal: aValor
 val := aValor.

verificaSeEMembro: aInteger
 ^Transcript show: self class == aInteger class

imprime
 Transcript show: val.

imprime: aValor

"temos aqui uma sobrecarga do metodo imprimir na mesma classe, o que prova que smalltalk suporta polimorfismo Ad-Hoc
por sobrecarga"

Transcript show: aValor.

Regras básicas da linguagem

Exemplos de código

Hello world

Transcript show: 'Hello, world!!!'

Número Perfeito

Integer extend [

  "Traduzido da versão em C"
  isPerfectC [ |tot| tot := 1.
     (2 to: (self sqrt) + 1) do: [ :i |
        (self rem: i) = 0
        ifTrue: [ |q|
                  tot := tot + i.
                  q := self // i.
                  q > i ifTrue: [ tot := tot + q ]
        ]
     ].
     ^ tot = self
  ]

  "Outra maneira"
  isPerfect [
     ^ ( ( ( 2 to: self // 2 + 1) select: [ :a | (self rem: a) = 0 ] )
         inject: 1 into: [ :a :b | a + b ] ) = self
  ]
].

Classes

Object subclass: #MessagePublisher
    instanceVariableNames: ''
    classVariableNames: ''
    poolDictionaries: ''
    category: 'Smalltalk Examples'

Métodos

publish
    Transcript show: 'Hello, world!'

Invocação

MessagePublisher new publish

Ver também

Referências

  1. ↑ «Alto I Schematics» (PDF). Bitsavers. p. 54. Consultado em 21 de julho de 2016
  2. ↑ «History of Computers and Computing, Birth of the modern computer, Personal computer, Xerox Alto». Consultado em 19 de abril de 2016 [ligação inativa]
  3. ↑ "Versions". Smalltalk.org. Archived from the original [ligação inativa] on 2015-09-08. Retrieved 2007-09-13.
  4. ↑ "Tektronix invitation for First international Conference of Smalltalk-80 Implementors" (PDF). Tektronix Smalltalk Document Archive. 27 August 1981.
  5. ↑ "Attendee list for First international Conference of Smalltalk-80 Implementors" (PDF). Tektronix Smalltalk Document Archive. 24 September 1981.

Ligações externas