Smalltalk Artur Lira Diego Lemos Lucas Figueiredo Thiago Rocha
Introdução Surgiu em meados da década de 70 Visava atingir grande número de pessoas de faixas etárias distintas Orientada a objetos Fracamente tipada Simples implementação Não há tipos primitivos
História Começou a ser desenvolvida no final dos anos 60 pelo grupo de pesquisa da Xerox Várias evoluções: - Smalltalk-71 ( parecido com o Logo) - Smalltalk-72 (adicionadas funcionalidades multimídia) - Smalltalk-76 (versão mais robusta) - Smalltalk-80
História Smalltalk-80 Voltado para o mercado ( HP,IBM, Apple) Programas rodavam sobre uma Máquina Virtual Tornou-se padrão para as diversas versões do Smalltalk
Paradigma de Programação Paradigma Orientado a Objetos Classes definem os objetos Comportamento (definido nos métodos) Estados Possíveis(atributos) Instâncias (objetos) Envio de mensagens a objetos Objetos responderão a mensagens conhecidas por ele Todas as mensagens enviadas foram respondidas
Utilização Simulação de modelos de sistemas Automação de escritórios Animação Gráfica Informática Educativa Instrumentos Virtuais Editores de Texto Bancos de Dados Genéricos
Sintaxe Literais Variáveis Atribuições Mensagens Expressões Blocos de Código
Sintaxe: Literais e2 2r rA000 36rSMALLTALK =
Sintaxe: Literais Caracteres: $A Strings: ‘Hello, world!’ Symbols: #foo Array de Symbols: #( ) Blocos: [... Some smalltalk code...]
Sintaxe: Variáveis Variáveis temporárias: No topo dos métodos Escritas entre barras verticais Uma ou mais variáveis por espaço. | index | | index vowels |
Sintaxe: Atribuições Operador := vowels := 'aeiou‘ A string ‘aeiou’ é criada na etapa de compilação e armazenada na variável vowels.
Sintaxe: Mensagens Receiver Selector Arguments aRatherBigNumber := 42 factorial 2 raisedTo: 4 'hello world' indexOf: $o startingAt: 6 3 + 4
Sintaxe: Expresões 3 factorial + 4 factorial between: 10 and: recebe a mensagem "factorial" e retorna recebe a mensagem "factorial" e retorna recebe a mensagem "+" e 24 como argumento e por fim retorna recebe a mensagem "between:and:" com 10 e 100 como argumentos e retorna true. 3 factorial factorial log * 5 = (3 + 4) * 5...?
Sintaxe: Expresões | window | window := Window new. window label: 'Hello'. window open.
Sintaxe: Blocos de Código [ :params | ] [:x | x + 1] Matematicamente: f(x) = x + 1
Estruturas de Controle Seleção condicional C++: 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 ]
Classes Definição de classe: Object subclass: #MessagePublisher instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Smalltalk Examples‘ Objetos de primeira ordem Recebem mensagens
Métodos Definição de método publico publish Transcript show: 'Hello, World!' Objeto recebe mensagem -- > método com nome da mensagem é invocado Objetos determinam em tempo de execução qual método a ser executado
Instanciando Classes New -> retorna uma instância da classe MessagePublisher new Retorno atribuido a uma variável publisher := MessagePublisher new
Implementação Inexistência de código fonte Utilização de objetos já existentes, na própria linguagem Tudo é modificável
Ambiente de desenvolvimento Smalltalk não é padronizado, existindo varias versões com pequenas diferenças de sintaxe. Express Smalltalk/X GNU Smalltalk
Vantagens Puramente orientada a objetos Polimorfismo 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
Dúvidas?