smalltalk caio cezar rodrigues quirino - 63182 daniel mário adamis - 66373 fabio venicius oliveira...

54
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

Upload: giulia-montalto

Post on 07-Apr-2016

222 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

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

  

  

Page 2: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

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.

Page 3: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

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

Page 4: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

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;

Page 5: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

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.

Page 6: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

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.

Page 7: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

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).

Page 8: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

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 “.”

Page 9: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

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.

Page 10: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

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

Page 11: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

Mensagens

Não existem operadores em Smalltalk

Todos os objetos são ativados por meio de mensagens

Toda mensagem retorna algum objeto

Page 12: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

Tipos de Mensagens

Existem 3 tipos de mensagens:Unárias

• Não têm parâmetrosExemplo

• 345 sin• ‘abcd’ size

Page 13: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

Tipos de Mensagens

Binárias• Recebem apenas um parâmetro

Exemplos:• 3+2• X>= 2

Page 14: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

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 15: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

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 16: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

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.

Page 17: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

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

Page 18: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

Mensagens

Qual é o resultado da operação:1+2*3

Page 19: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

Resultado

Portanto 1+2*3 = 9 em Smalltalk

Para gerar o resultado normalmente esperado devemos usar:

1+(2*3)

Page 20: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

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”

Page 21: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

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]

Page 22: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

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.

Page 23: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

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 24: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

Classes - Diagrama

Page 25: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

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.

Page 26: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

Self e Super

Page 27: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

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 28: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

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 29: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

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]

Page 30: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

Estruturas de Controle

Repetição C++:

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

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

Page 31: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

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 32: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

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

Page 33: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

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:

Page 34: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

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.

Page 35: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

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.

Page 36: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

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.

Page 37: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

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.

Page 38: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

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.

Page 39: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

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.

Page 40: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

Squeak

Nos próximos slides serão apresentadas algumas telas do Squeak :

Page 41: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington
Page 42: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington
Page 43: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington
Page 44: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

Exemplo

•QuickSort

•Matriz

•Fatorial

Page 45: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington
Page 46: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington
Page 47: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington
Page 48: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington
Page 49: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington
Page 50: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington
Page 51: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington
Page 52: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

Vantagens

Puramente orientada a objetosPolimorfismo e binding dinâmico

Flexibilidade Reutilização

Dados abstratos e encapsulamento Modificabilidade Confiabilidade

Herança Extensível

Page 53: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

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

Page 54: SmallTalk Caio Cezar Rodrigues Quirino - 63182 Daniel Mário Adamis - 66373 Fabio Venicius Oliveira - 55934 Rafael Barbosa Januzi - 55951 Roger Wellington

Conclusão

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