570 likes | 682 Views
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). História.
E N D
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).
História • Alan Kay criou Smalltalk na tentativa de desenvolver uma linguagem na qual as crianças pudessem programar
História • SmallTalk foi baseada na linguagem Silmula (1966), a qual introduziu o conceito de objeto
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".
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
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
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
Versões • Quais são as diferenças entre as versões existentes?
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
Diferenças • Não ficam especificados: • Detalhes de implementação • Possíveis extensões • “Sintaxe”
Diferenças - Exemplos • Uma operação de potência no VisualWorks: • 3**2 • Nas demais versões: • 3e2
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
Características de Smalltalk • Compatilibildade: • Solaris SPARC • HPUX HPPA • IRIX MIPS • AIX RS6000 • Compaq Unix AXP • Linux Intel, Windows Intel, MacOS 9
Compatibilidade • Cada versão já incorpora centenas de métodos que juntos formam a: • Imagem Virtual (Virtual Image)
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
Compatibilidade • Em Eiffel para se desenvolver implementações portáveis deve-se usar: • EiffelVision • EiffelVision2
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)
Tipos • Como Smalltalk trata tipos?
Tipos • Smalltalk tem somente um tipo • objeto • Tudo no sistema são objetos • Portanto variáveis são referencias para objetos
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
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
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.
Self e Super • Self retorna a referência para o objeto que recebe essa mensagem • O seu equivalente em Eiffel é current
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.
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.
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.
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
Métodos de Classe • Em Smalltalk pode-se definir métodos de classe • Eiffel não tem suporte a esse tipo de recurso
Mensagens • Não existem operadores em Smalltalk • Todos os objetos são ativados por meio de mensagens • Toda mensagem retorna algum objeto
Mensagens • Qual é o resultado da operação: 1+2*3
Tipos de Mensagens • Existem 3 tipos de mensagens: • Unárias • Não têm parâmetros • Exemplo • 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
Resultado • Portanto 1+2*3 = 9 em Smalltalk • Para gerar o resultado normalmente esperado devemos usar: 1+(2*3)
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
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.
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.
Controle de Erro (Smalltalk) • Smalltalk apresenta um sistema de controle de erro similar ao existente em Eiffel
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
Controle de Erro (Exemplo) MyRequest>>processYourself | tape drive | MySignals appSignal handle: [: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>>myReserveTape self tapeName isReserved ifTrue: [MySignals appSignal raiseWith: #tapeBusy]. ...code to reserve the tape...