Smalltalk Artur Lira Diego Lemos Lucas Figueiredo Thiago Rocha.

23
Smalltalk Artur Lira Diego Lemos Lucas Figueiredo Thiago Rocha

Transcript of Smalltalk Artur Lira Diego Lemos Lucas Figueiredo Thiago Rocha.

Page 1: Smalltalk Artur Lira Diego Lemos Lucas Figueiredo Thiago Rocha.

Smalltalk

Artur LiraDiego LemosLucas FigueiredoThiago Rocha

Page 2: 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

Page 3: Smalltalk Artur Lira Diego Lemos Lucas Figueiredo Thiago Rocha.

História

Começou a ser desenvolvida no final dos anos 60 por um 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 (estável)- Squeak(pra crianças); Strongtalk(Sun); GNU Smalltalk(Script);

Page 4: Smalltalk Artur Lira Diego Lemos Lucas Figueiredo Thiago Rocha.

História

Smalltalk-80 Voltado para o mercado ( HP,IBM, Apple) Programas rodam sobre uma Máquina

Virtual Tornou-se padrão para as diversas

versões do Smalltalk

Page 5: Smalltalk Artur Lira Diego Lemos Lucas Figueiredo Thiago Rocha.

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 Fim de programa todas as mensagens

enviadas foram respondidas

Page 6: Smalltalk Artur Lira Diego Lemos Lucas Figueiredo Thiago Rocha.

Utilização

Simulação de modelos de sistemas Automação de escritórios Animação Gráfica Informática Educativa Instrumentos Musicais Virtuais Editores de Texto Bancos de Dados Genéricos

Page 7: Smalltalk Artur Lira Diego Lemos Lucas Figueiredo Thiago Rocha.

Sintaxe

Literais Variáveis Atribuições Mensagens Expressões

Page 8: Smalltalk Artur Lira Diego Lemos Lucas Figueiredo Thiago Rocha.

Sintaxe: Literais

42 -42 123.45 1.2345e2 2r10010010 16rA00036rSMALLTALK = 80738163270632

Page 9: Smalltalk Artur Lira Diego Lemos Lucas Figueiredo Thiago Rocha.

Sintaxe: Literais

Caracteres: $A Strings: ‘Hello, world!’ Symbols: #foo Array de Symbols: #(1 2 3 4) Blocos: [... Escopo ...]

Page 10: Smalltalk Artur Lira Diego Lemos Lucas Figueiredo Thiago Rocha.

Sintaxe: Variáveis

Variáveis temporárias: No topo dos métodos Escritas entre barras verticais Uma ou mais variáveis por espaço.

| indice | | indice vogais |

Page 11: Smalltalk Artur Lira Diego Lemos Lucas Figueiredo Thiago Rocha.

Sintaxe: Atribuições

Operador := vogais := 'aeiou‘

A string ‘aeiou’ é criada na etapa decompilação e armazenada na variávelvogais.

Page 12: Smalltalk Artur Lira Diego Lemos Lucas Figueiredo Thiago Rocha.

Sintaxe: Mensagens

Receiver Selector Arguments

receptor := 42 fatorial 2 raisedTo: 4 'hello world' indexOf: $o startingAt: 6 3 + 4

Page 13: Smalltalk Artur Lira Diego Lemos Lucas Figueiredo Thiago Rocha.

Sintaxe: Expresões

3 fatorial + 4 fatorial between: 10 and: 100

1. 3 recebe a mensagem "fatorial" e retorna 62. 4 recebe a mensagem "fatorial" e retorna 243. 6 recebe a mensagem "+" e 24 como argumento e por

fim retorna 304. 30 recebe a mensagem "between:and:" com 10 e 100

como argumentos e retorna true.

3 fatorial fatorial log 3 + 4 * 5 = (3 + 4) * 5 ...?

Page 14: Smalltalk Artur Lira Diego Lemos Lucas Figueiredo Thiago Rocha.

Sintaxe: Expresões

| window | window := Window new. window label: 'Hello'. window open.

Page 15: Smalltalk Artur Lira Diego Lemos Lucas Figueiredo Thiago Rocha.

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]

Page 16: Smalltalk Artur Lira Diego Lemos Lucas Figueiredo Thiago Rocha.

Estruturas de Controle

Repetição C++:

for(int i = 0; i < 3; i++) n *= n;

Smalltalk:3 timesRepeat: [n := n * n]

Page 17: Smalltalk Artur Lira Diego Lemos Lucas Figueiredo Thiago Rocha.

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 ]

Page 18: Smalltalk Artur Lira Diego Lemos Lucas Figueiredo Thiago Rocha.

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

Page 19: Smalltalk Artur Lira Diego Lemos Lucas Figueiredo Thiago Rocha.

Implementação

Modificações em tempo de execução(interpretada)

Utilização de classes já existentes, na própria linguagem(reuso)

Tudo é modificável

Page 20: Smalltalk Artur Lira Diego Lemos Lucas Figueiredo Thiago Rocha.

Vantagens

Puramente orientada a objetos Polimorfismo e binding dinâmico

Flexibilidade Reutilização

Dados abstratos e encapsulamento Modificabilidade Confiabilidade

Herança Facilmente extensível

Page 21: Smalltalk Artur Lira Diego Lemos Lucas Figueiredo Thiago Rocha.

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, já que existe o risco de um objeto não entender uma mensagem

Page 22: Smalltalk Artur Lira Diego Lemos Lucas Figueiredo Thiago Rocha.

Referências[1] SHARP, A. Smalltalk by Example: the Developer’s Guide.

McGraw Hill Text, 1997. Disponível em: http://www.iam.unibe.ch/~ducasse/FreeBooks/ByExample/ . Acesso em: 26 mai 2007.

[2] Smalltalk: site oficial. Disponível em: http://www.smalltalk.org/. Acesso em: 26 mai 2007.

[3] Wikipedia Smalltalk. Disponível em: http://en.wikipedia.org/wiki/Smalltalk. Acesso em: 23 mai 2007.

[4] Vista Smalltalk. Disponivel em: http://vistascript.net/vistascript/docuwiki/doku.php. Acesso em: 26 mai 2007.

Page 23: Smalltalk Artur Lira Diego Lemos Lucas Figueiredo Thiago Rocha.

Dúvidas?