Smalltalk









Question book.svg

Esta página ou secção não cita fontes confiáveis e independentes, o que compromete sua credibilidade (desde março de 2011). Por favor, adicione referências e insira-as corretamente no texto ou no rodapé. Conteúdo sem fontes poderá ser removido.
Encontre fontes: Google (notícias, livros e acadêmico)



























































































































































































































































































































































































































































































































































































































































































































































































































































































































































Smalltalk

Paradigma

Orientação a Objetos
Surgido em
Início em 1969, tornou-se público em 1980
Criado por

Alan Kay, Dan Ingalls, Adele Goldberg

Estilo de tipagem:
dinâmica

Compiladores
Squeak, GNU Smalltalk, VisualWorks
Dialetos:

Squeak
Influenciada por

Lisp, Simula, Logo, Sketchpad
Influenciou

Objective-C, Self, Java, Dylan, AppleScript, Lisaac, D, NewtonScript, Python, Ruby, Scala, Perl 6, CLOS, Falcon, Io, Ioke

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.




Índice






  • 1 História


  • 2 Sintaxe


  • 3 Polimorfismo


  • 4 Regras básicas da linguagem


  • 5 Exemplos de código


    • 5.1 Hello world


    • 5.2 Número Perfeito


    • 5.3 Classes


    • 5.4 Métodos


    • 5.5 Invocação




  • 6 Ver também


  • 7 Ligações externas





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. Ele 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:


  • Inclusão:

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'.

  • Sobrecarga:

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 |



  • Tudo é representado como objetos. (De longe, a regra mais importante em Smalltalk).

  • Toda computação é disparada pelo envio de mensagens. Uma mensagem é enviada para um objeto fazer alguma coisa.

  • Quase todas as expressões são da forma <recebedor> <mensagem>.

  • Mensagens fazem com que métodos sejam executados, sendo que o mapeamento de mensagens para métodos é determinado pelo objeto recebedor. Os métodos são as unidades de código em Smalltalk, equivalente a funções ou procedimentos em outras linguagens.

  • Todo objeto é uma instância de alguma classe. 12 é uma instância da classe SmallInteger. 'abc' é uma instância da classe String. A classe determina o comportamento e os dados de suas instâncias.

  • Toda classe tem uma classe mãe, exceto a classe Object. A classe mãe define os dados e comportamento que são herdados por suas classes filhas. A classe mãe é chamada de superclasse e suas filhas, subclasses.



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 |


  • Squeak


Ligações externas |




  • Smalltalk.orgAdvocacy site.


  • GoodStartAdvocacy site.

  • Open Directory: Smalltalk


  • The Early History of Smalltalkby Alan C. Kay.

  • Smalltalk-72 Instruction Manual

  • Free Smalltalk Books Online

  • Smalltalk information visualization tool


  • Squeak(Smalltalk de código aberto)

  • Tutorial de Smalltalk



















Popular posts from this blog

How do I know what Microsoft account the skydrive app is syncing to?

When does type information flow backwards in C++?

Grease: Live!