Smalltalk é a linguagem orientada a objetos por excelência.Desenvolvida na década de 1960, baseada na linguagem Simula, muitos paradigmas modernos foram criados por essa equipe do MIT.
Segue aqui um exemplo aplicado de Smalltalk: busca por números primos.
O algoritmo é baseado no crivo de Aristóstenes, que consiste em, a cada primo encontrado, eliminar seus múltiplos até o fim do conjunto.
Vamos começar declarando as variáveis locais
count, com a contagem de primos encontrados, max, que conterá o tamanho do conjunto, e primeList, uma lista – na verdade dicionário – dos números marcados como não-primos:| count max primeList |
count := 0.
max := 5000.
primeList := Dictionary new.Começamos então com nenhum primo conhecido (0) e um conjunto de cinco mil (5000) números. Vamos agora informar ao dicionário que 1 não é primo e pedir para limpar o
Transcript – área (stream) onde será exibido o resultado:primeList at: 1 put: false.
Transcript clear.É preciso agora criar um ciclo (loop) de 2 até o máximo de números do conjunto:
2 to: max do: [ :i |Para cada
i, é preciso verificar se é verdadeiro – se o número não existe na lista (ifAbsent:), ele não é múltiplo de nenhum dos números antecessores, portanto é primo (true): (primeList at: i ifAbsent: true) ifTrue: [Se o número é primo, devemos:
- exibi-lo no
Transcript; - incrementar o contador;
- marcar todos seus múltiplos como não-primos
Fechando os colchetes já abertos, o código fica assim:
Transcript show: i printString; tab.
count := count + 1.
i * 2 to: max by: i do: [ :j |
primeList at: j put: false
]
]
].Resta agora somente exibir a contagem:
Transcript
cr;
show: 'Quantidade de primos: ', count printString;
cr.Repara que, quando várias mensagens são enviada ao mesmo objeto, elas são separadas por ponto-e-vírgula (
;).Alguns comentários:
- Quando um número recebe a mensagem
#printString, ele retorna uma representação string para exibição. Transcripttrata a mensagem#tabexibindo uma tabulação e a mensagem#crexibindo uma mudança de linha.- Quando um número recebe a mensagem
#to:do:, reitera de forma parecida comforde C. - A mensagem
#to:by:do:funciona como#to:do:, mas acrescenta o passo. - A mensagem
#at:put:faz o dicionários associar um par chave-valor ou mudar o valor associado a uma chave. - A mensagem
#at:ifAbsent:faz o dicionário retornar o valor associado a uma chave, ou um valor padrão. - A mensagem
#ifTrue:é enviada a um objeto booleano, que executa o bloco de código somente se o objeto for verdadeiro. Outras mensagens similares são:#ifFalse:,#ifTrue:ifFalse:e#ifFalse:ifTrue:.
Bem, espero que esse pequeno tutorial seja de alguma ajuda, se não para o mercado, para expandir conhecimentos.
[]'s
Cacilhas, La Batalema

5 comentários:
O texto está muito explicativo. Mais um bom material disponível no Kodumaro.
Valeu.
Só fico chateado por não poder escrever um artigo melhor, pois estou sem conexão em casa.
Então preciso rascunhar em casa, enfiar tudo em uma mídia e procurar onde publicar… e sempre na hora de publicar encontro um errinho ou outro. =P
Assim que tiver conexão em casa de novo, pretendo escrever – com mais atenção – um artigo sobre prioridade de mensagens em Smalltalk.
É um assunto que requer um pouco mais de atenção, senão pode ficar obscuro. =(
De qualquer forma, valeu pelo elogio, Torcato. =)
Qualquer dúvida – de qualquer um –, basta postar aqui nos comentários, que eu tentarei responder.
[]'s
Cacilhas, La Batalema
Legal, eu não conhecia smalltalk, ótimo post para saber um pouco sobre!
Sim, Bruno!
É importante conhecer Smalltalk para entender melhor alguns paradigmas atualmente distorcidos, como orientação a objetos, programação extrema e máquina virtual. Assim como é importante conhecer C – entre outras – para entender melhor programação estruturada e modularização, Haskell para entender programação funcional, etc..
Diversas linguagens se apropriaram de e adaptaram, por exemplo, o conceito de orientação a objetos, como C++, Python, Java, Ruby, C#, etc.. Esse não é o problema… o problema é quando os evangelistas fanáticos dessas linguagens declaram a sua como a mãe original do paradigma, distorcendo e perdendo totalmente o conceito inicial.
Então conhecimento é poder e conhecer a história e a evolução da programação dá ao programador poder e liberdade diante da desinformação repressora dos evangelistas de linguagens específicas.
[]'s
Cacilhas, La Batalema
Interessante o fato de Smalltalk não ter sido mais popular no tempo dele.
Postar um comentário