Post on 07-Apr-2016
SmallTalk
Caio Cezar Rodrigues Quirino - 63182
Daniel Mário Adamis - 66373
Fabio Venicius Oliveira - 55934
Rafael Barbosa Januzi - 55951
Roger Wellington dos Santos - 63608
Vinicius Fonseca Melo - 59985
SmallTalk – História
Smalltalk foi desenvolvido no inicio dos anos 70, na PARC (Palo Alto Research Center), um centro de pesquisas da XEROX na Califórnia.As principais idéias do Smalltalk são creditadas a Alan Kay, muitas delas baseadas no Simula, LISP e SketchPad.
Uma Segunda versão do Smalltalk (Smalltalk/V) foi desenvolvida pela Digitalk em Los Angeles, Califórnia, com fundadores da Ollivetti.
A IBM desenvolveu o VisualAge Smalltalk em colaboração com a Object Technology International Inc.
Atualmente, ObjectShare e a IBM continuam sendo os principais distribuidores do ambiente de desenvolvimento Smalltalk.
SmallTalk – História
Introdução
O Smalltalk é uma linguagem Object-Oriented (pura) ;
Os objetos são instâncias de determinada classe; As mensagens a que um objecto é capaz de responder são
especificadas na classe a que ele pertence;
Os métodos de uma classe definem a forma como os objectos dessa classe respondem às mensagens;
O programador trabalha para encontrar uma sequência de mensagens entre objetos que forneça a solução desejada;
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.
Quase todas as expressões são da forma <recebedor> <mensagem>.
Mensagens fazem com que métodos sejam executados. Os métodos são as unidades de código em Smalltalk, equivalente a funções ou procedimentos em outras linguagens.
Regras básicas da linguagem
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.
Paradigma
Linguagem de programação orientada a objeto. Fracamente tipada. Linguagens fracamente tipadas ou Dinamicamente
tipadas são aquelas em que durante a execução do programa uma variável pode conter objetos de qualquer tipo, e durante seu ciclo de vida podem referenciar objetos de diversos tipos.
Permitem que o programador não tenha de fazer conversões de tipos (cast).
Instrução
• Uma instrução é composta por uma ou mais expressões.
• Uma expressão válida pode ser: Uma variável; Um literal; O envio de uma mensagem; bloco de instruções (Ex: [x:=5. y:=3*x])
• As instruções são separadas por “.”
Variáveis
• As variáveis não contêm os objetos mas sim os seus identificadores (referenciam os objetos).
• Em Smalltalk nil é um objecto que significa “nada” e é a única instância da classe UndefinedObject.
• Inicialmente todas as variáveis referem o objecto nil.
• Durante o seu tempo de vida as variáveis podem referir objetos distintos, incluindo nil.
• Todas as classes (tipos) derivam de Object.
Literais
• São suportados literais para os seguintes tipos:•
Character Ex: $c• String Ex: ‘Isto é uma string’• Number• Integer Ex: 19• Fraction Ex: 2/5
• Float Ex: 134.62 Array Ex: #(1 ‘dois’ $3)Symbol Ex: #ClasseXpto
Mensagens
Não existem operadores em Smalltalk
Todos os objetos são ativados por meio de mensagens
Toda mensagem retorna algum objeto
Tipos de Mensagens
Existem 3 tipos de mensagens:Unárias
• Não têm parâmetrosExemplo
• 345 sin• ‘abcd’ size
Tipos de Mensagens
Binárias• Recebem apenas um parâmetro
Exemplos:• 3+2• X>= 2
Tipos de Mensagens
Palavras Chave• são mensagens com um ou mais argumentos nas
quais o seletor é composto por uma sequência de uma ou mais palavras-chave, cada uma delas terminando com o caracter ":“
Exemplos:• 'vitor' copyFrom:2 to:5• O resultado é itor
Precedência de Mensagens
A avaliação é feita da esquerda para a direita
Mensagens unárias
Mensagens binárias
Mensagens com palavras chave
Pode-se alterar a precedência usando parênteses
Mensagens
• Uma mensagem consiste do nome do objeto que a recebe seguido do nome da mensagem;
Ex:Ex: alpha sin “enviar a alpha a mensagem sin”
• Existem três tipos de mensagens: Unárias - Correspondem a métodos sem argumentos; Keyword - Correspondem a métodos com um ou mais
argumentos; Binárias - São usadas para operações de comparação,
aritméticas e lógicas.
Exemplo Mensagens
• Mensagem unáriaobj msg “Mensagem ‘msg’ ao objecto ‘obj’ ”
• Mensagem Binária“Mensagem binária ‘+’ com o parâmetro ‘2’ ao inteiro ‘1’ ” 1 + 2
• Mensagem Keyword“Mensagem keyword param1:param2: a ‘obj’ com os parâmetros ‘5’ e ‘6’ ”obj param1: 5 param2: 6
Mensagens
Qual é o resultado da operação:1+2*3
Resultado
Portanto 1+2*3 = 9 em Smalltalk
Para gerar o resultado normalmente esperado devemos usar:
1+(2*3)
Operações Aritméticas
• As operações aritméticas são suportadas através de mensagens binárias: Sintaxe: <number> <operation> <number> As operações são:• + “soma”• - “subtracção”• * “multiplicação”• / “divisão”• // “divisão inteira”• \\ “resto da divisão inteira”
Bloco de Instruções
• Um bloco contém zero ou mais expressões delimitadas por colchetes. Ex: [x:=5. y:=x*3]
• O resultado da avaliação de um bloco é o resultado da última expressão nele avaliada.
• Um bloco pode receber argumentos, separados por ‘|’: Ex: [:aNumber | aNumber*aNumber]
Definição de Classes
• A criação de novo tipo é realizado através do envio de uma mensagem ao tipo base pretendido. Ex:
Object subClass: #AccountinstanceVariableNames: ‘number balance’classVariableNames: ‘NextNumber’poolDictionaries: ‘ ’
O exemplo envia uma mensagem keyword ao tipo Object e o resultado é a criação do tipo Account que deriva de Object e tem as variáveis de instância number e balance e a variável de tipo NextNumber.
Classes
Em Smalltalk classes são objetos
Uma metaclasse é uma instância da classe Metaclasse.
Cada classe é uma instância de uma instância da Metaclasse.
Classes - Diagrama
Self e Super
Self retorna a referência para o objeto que recebe essa mensagem
Super não se refere na verdade a superclasse do objeto que está recebendo essa mensagem, mas se refere ao objeto que definiu o código que está sendo executado.
Self e Super
Visibilidade de Médotos
Em Smalltalk não existe o conceito de métodos públicos e privados, todos os métodos podem ser acessados por todos os objetos do sistema.
Visibilidade de Médotos
Tentativa de simular esse comportamento:
Acrescentar um prefixo “my” antes de todos os métodos que teriam que ser privados
Nada impede porém que um programador chame esse método
Estruturas de Controle
Seleção condicionalC++:
if((numero % 2) == 0) paridade = 1; else paridade = 0;
paridade = ((numero % 2) == 0))?1:0;
Smalltalk:(numero \\ 2) = 0 ifTrue: [ paridade :=1] ifFalse: [ paridade := 0]
paridade := numero \\ 2 = 0 ifTrue: [1] ifFalse: [0]
Estruturas de Controle
Repetição C++:
for(int i = 0; i < 3; i++) n *= n;
Smalltalk:3 timesRepeat: [n := n * n]
Estruturas de Controle
Repetição C++:int i = 0;
while(i < tamanhoArray){ array[i] = 0;
}
Smalltalk: i := 1.
[i <= array size] whileTrue: [ array at: i put: 0. i := i + 1 ]
Garbage Collector
Assim como Eiffel, Smalltalk faz uso desse recurso
Vantagens:O risco de vazamento de memória é extremamente reduzidoO programador pode se concentrar no problema de aplicação
Desvantagens:Perda de eficiência
Ambientes de Desenvolvimento
No começo da década, todo compilador era baseado no pcc de Johnson; por voltade 1985 havia muitos produtores independentes de compiladores. Como até hojeSmalltalk não foi padronizada, existem pequenas diferenças de sintaxe para os diversoscompiladores:
Express
Ele inclui Smalltalk/V Win16 e WindowBuilder Pro/V. É conhecido pelo bomdesempenho e utiliza pouco espaço em disco, além de ser gratuito. Possui uma simples,mas poderosa biblioteca de classe.
Smalltalk/X
É uma implementação completa da linguagem de programação Smalltalke ambiente de desenvolvimento, incluindo: ambiente de desenvolvimento gráfico comeditores, browsers, compilador e interpretador byte code, um compilador Smalltalkpara C, extensa biblioteca de classes e documentação on-line com muitos exemplos.Disponível apenas para Linux.
GNU Smalltalk
É uma implementação gratuita (ou com código aberto) que seaproxima muito da linguagem Smalltalk-80. Existem versões para os sistemas Unixou baseados em Unix (Linux, FreeBSD, etc) e sistemas comerciais como o MicrosoftWindows.
Squeak
É uma implementação com código aberto do Smalltalk-80, com a máquinavirtual escrita totalmente em Smalltalk, tornando-o fácil as operações de debug, análisee mudança. Disponível para Windows e Linux.
Squeak
Squeak é a continuação do projeto original do Smalltalk e tem contribuições de vários dos desenvolvedores originais dos anos 70 , incluindo Alan Kay, Dan Ingalls, Ted Kaehler, etc.
A comunidade de desenvolvedores e usuários squeak se estende por todo o mundo e abrange uma vasta gama de usos, incluindo: educação, desenvolvimento multimídia, desenvolvimento de web e etc.
Máquina Virtual - VM
A máquina virtual (Virtual machine – VM) está escrita em Squeak. O truque consiste em uma utilização de um subconjunto da linguagem Smalltalk que pode ser traduzido para lingugem C e compilado para a plataforma necessária. Isso permite, entre outras coisas, um nível de portabilidade muito alta que converte a Squeak em um dos softwares mais portáveis encontrados. Todo o processo de depuração da VM pode ser feita no Squeak, isto facilita muito a investigação com arquiteturas de VM diferentes.
A máquina virtual do Squeak é de 32 bits e pode ser encontrada também em 64 bits.
Squeak
Nos próximos slides serão apresentadas algumas telas do Squeak :
Exemplo
•QuickSort
•Matriz
•Fatorial
Vantagens
Puramente orientada a objetosPolimorfismo e binding dinâmico
Flexibilidade Reutilização
Dados abstratos e encapsulamento Modificabilidade Confiabilidade
Herança Extensível
Desvantagens
Não possui ordem de precedência para operações binárias
Devido a “fraca tipagem” pode ocorrer erros em tempo de execução, devido a um objeto não entender uma mensagem
Conclusão
Smalltalk é uma linguagem de programação completa e uma das mais puras linguagens orientadas a objeto existentes atualmente.