Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

57
Smalltalk Grupo 8 • Diogo Krejci • Frederico Argolo • Vitor Macedo

Transcript of Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Page 1: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Smalltalk

Grupo 8

• Diogo Krejci• Frederico Argolo• Vitor Macedo

Page 2: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

História

Criada por Alan Kay da Xerox - Palo Alto no início dos anos 70. Apresenta um ambiente de programação com menus pop-up, windows e mouse (modelo para Apple Macintosh).

Page 3: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

História

Alan Kay criou Smalltalk na tentativa de desenvolver uma linguagem na qual as crianças pudessem programar

Page 4: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

História

SmallTalk foi baseada na linguagem Silmula (1966), a qual introduziu o conceito de objeto

Page 5: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

História

Mas foi em Smalltalk que os objetos deixam de ser– meros "dados" manipulados por

"programas" E passam a ser:

– "processadores idealizados" individuais e independentes, aos quais podem ser transmitidos comandos em forma de "mensagens".

Page 6: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Versões

Versões existentes: Versões Open Source & Livres

– Squeak Smalltalk – GNU Smalltalk – Little Smalltalk

Versões Comerciais– Dolphin Smalltalk – Object Connect's Smalltalk MT – Exept's Smalltalk/X

Page 7: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Versões Comerciais(cont.)

– Cincom's VisualWorks Smalltalk – Cincom's Object Studio Smalltalk – Cincom's Visual Smalltalk Enterprise (VSE) – IBM's Visual Age Smalltalk – Pocket Smalltalk – QKS Smalltalk Agents

Page 8: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Versão Escolhida

Cincom's VisualWorks Smalltalk

– Razões:• Site do fabricante com muitas informações• Possibilidade de baixar uma versão não

comercial• Bibliografia baseada nessa versão

Page 9: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Interface Visual Works

Page 10: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Interface Visual Works

Page 11: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Interface Eiffel

Page 12: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Interface Eiffel

Page 13: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Versões

Quais são as diferenças entre as versões existentes?

Page 14: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Diferenças

A Xerox, criou a ParcPlace Systems para comercializar Smalltalk-80

Cada fabricante tem nesta versão uma base para desenvolver as suas próprias versões

Page 15: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Diferenças

Não ficam especificados:

– Detalhes de implementação– Possíveis extensões– “Sintaxe”

Page 16: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Diferenças - Exemplos

Uma operação de potência no VisualWorks:– 3**2

Nas demais versões:– 3e2

Page 17: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Diferenças - Exemplos

O VisualWorks não aceita que números em ponto flutuante sejam definidos em uma base que não seja a decimal

Tal restrição não existe nas demais versões

Page 18: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Características de Smalltalk

Compatilibildade:– Solaris SPARC– HPUX HPPA– IRIX MIPS– AIX RS6000– Compaq Unix AXP– Linux Intel, Windows Intel, MacOS 9

Page 19: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Compatibilidade

Cada versão já incorpora centenas de métodos que juntos formam a:– Imagem Virtual (Virtual Image)

Page 20: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Compatibilidade

Por questões de performance existem implementações específicas para cada máquina

– Operações aritméticas

– Entrada e Saída Em conjunto formam a Máquina Virtual

Page 21: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Compatibilidade

Em Eiffel para se desenvolver implementações portáveis deve-se usar:– EiffelVision

– EiffelVision2

Page 22: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Compatibilidade

Para se desenvolver implementações específicas, e usar os recursos de janelas particulares de cada sistema deve-se usar:– WEL (Windows Eiffel Library) – Unix, Linux e VMS (GTK Eiffel Library)

Page 23: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Tipos

Como Smalltalk trata tipos?

Page 24: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Tipos

Smalltalk tem somente um tipo– objeto

Tudo no sistema são objetos

Portanto variáveis são referencias para objetos

Page 25: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Tipos

Eiffel apresenta tipificação estática.– O compilador restringe as possíveis

atribuições a uma variável Vantagens

– Segura– Eficiente

Desvantagem– Menos flexível

Page 26: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Garbage Collector

Assim como Eiffel, Smalltalk faz uso desse recurso

Vantagens:– O risco de vazamento de memória é

extremamente reduzido– O programador pode se concentrar no problema

de aplicação

Desvantagens:– Perda de eficiência

Page 27: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

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.

Page 28: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Classes - Diagrama

Page 29: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Self e Super

Self retorna a referência para o objeto que recebe essa mensagem

O seu equivalente em Eiffel é current

Page 30: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Self e Super

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.

Page 31: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Self e Super

Page 32: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Colisão de Nomes devido à herança

Em Eiffel, no caso geral, a colisão de nomes obriga que se utilize uma cláusula especial de renomeação (rename) para mudar pelo menos um dos designadores do atributo ou operação em colisão.

Em Smalltalk esse problema não ocorre porque a herança múltipla não é suportada.

Page 33: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Polimorfismo de Operação

Em Smalltalk e Eiffel a implementação de uma operação pode ser alterada nos descendentes.

Porém em Eiffel existe a possibilidade adicional de mudar o nome a um membro herdado (operação ou atributo), ou mesmo cancelá-lo.

Page 34: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

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.

Page 35: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

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

Page 36: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Métodos de Classe

Em Smalltalk pode-se definir métodos de classe

Eiffel não tem suporte a esse tipo de recurso

Page 37: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Mensagens

Não existem operadores em Smalltalk

Todos os objetos são ativados por meio de mensagens

Toda mensagem retorna algum objeto

Page 38: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Mensagens

Qual é o resultado da operação:

1+2*3

Page 39: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Tipos de Mensagens

Existem 3 tipos de mensagens:– Unárias

• Não têm parâmetros

– Exemplo• 345 sin• ‘abcd’ size

Page 40: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Tipos de Mensagens

– Binárias• Recebem apenas um parâmetro

– Exemplos:• 3+2• X>= 2

Page 41: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

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

Page 42: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

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

Page 43: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Resultado

Portanto 1+2*3 = 9 em Smalltalk

Para gerar o resultado normalmente esperado devemos usar:1+(2*3)

Page 44: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Regras de Precedência em Eiffel

Operadores Especiais. (O ponto (“.”) na chamada de expressões)

Operadores Unários– old strip not

Operadores Binários– ^* / // \\+

Operadores Relacionais – = /= < > <= >=

Operadores Logicos– and nor or

Page 45: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Controle de Erro (Eiffel)

Em Eiffel sempre que existe um contrato e este é quebrado, uma exceção é gerada. Esta pode ser originada basicamente devido a duas razões:– 1- violação das asserções, caso estas estejam

sendo monitoradas.– 2– Devido um sinal de hardware alertando

sobre alguma operação ilegal.

Page 46: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Controle de Erro (Eiffel)

Uma rotina pode tratar uma exceção através de sua cláusula rescue. Podendo terminar em:– retry o que faz com que rotina seja a

executada desde o início.– Ou não apresentar o retry no final, com

isso o método retorna para o quem o invocou.

Page 47: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Controle de Erro (Smalltalk)

Smalltalk apresenta um sistema de controle de erro similar ao existente em Eiffel

Page 48: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Controle de Erro (Smalltalk)

Page 49: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Controle de Erro (Smalltalk)

Seqüência de acontecimentos:– Gera-se uma exceção– Repassada sucessivamente a cada um dos

objetos– Caso nenhum objeto esteja preparado para lidar

com a exceção uma mensagem noHandlerSignal é enviada ao objeto Object

– Caso esta exceção não seja tratada o EmergencyHandler é invocado

Page 50: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Controle de Erro (Exemplo)MyRequest>>processYourself

| tape drive |MySignals appSignalhandle: [:ex | self myHandleFailure: ex]do:[self myCheckRequest.tape := self myReserveTape.drive := self myReserveDrive.tape mountYourselfOn: drive.self myRespondSuccess].self myReleaseTape: tape.self myReleaseDrive: drive

MyRequest>>myReserveTapeself tapeName isReserved ifTrue:[MySignals appSignal raiseWith: #tapeBusy].

...code to reserve the tape...

Page 51: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Controle de Erro (Smalltalk)

Existem diferentes maneiras de se criar uma exceção:– Raise

• Raise gera uma exceção passando-o para o objeto que chamou o método. 

– RaiseWith: aParameter• Gera uma exceção, mas informa os

parâmetros recebidos pelo método.

Page 52: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Controle de Erro (SmallTalk)

– RaiseErrorString: aString• Gera uma exceção informando algum texto que se

queira transmitir.

– Existe uma regra para poder passar os textos:• Caso não tenha espaço no início, o antigo texto é

sobreescrito.• Caso tenha um espaço no início o novo texto é

acrescentado no final.

– RaiseWith: aParameter errorString: aString

• Gera uma exceção e desempenha o papel das duas anteriormente descritas.

Page 53: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Controle de Erro (Smalltalk)

Maneiras de se tratar um exceção: Return:

– Faz com que o bloco “handle” retorne nil. Exemplo:

– Transcript cr; show:(self errorSignalhandle: [:ex | ex return]do: [self errorSignal raise]) printString.

Page 54: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Controle de Erro(Smalltalk)

ReturnWith:– Permite que ao final do bloco

“handle” seja retornado algum objeto. Exemplo:

– Transcript cr; show:(self errorSignal

handle: [:ex | ex returnWith: 3]do: [self errorSignal raise])

printString.

Page 55: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Controle de Erro (Smalltalk) Restart

– Faz com que o método seja reiniciado ao final do bloco “handle”

Exemplo:self errorSignalhandle: [:ex |

Dialog warn: 'You divided by zero'.ex restart]

do: [| answer |answer := Dialog request: 'Divide 4 by what?' initialAnswer: ‘0'.

Page 56: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Arquitetura

Page 57: Smalltalk Grupo 8 Diogo Krejci Frederico Argolo Vitor Macedo.

Conclusão

Smalltalk é uma linguagem de programação completa e uma das mais puras linguagens orientadas a objeto existentes atualmente.