MAC 441/5714 - Tópicos de Programação
Orientada a Objetos
Aula 3 - 11/03/2008
Introdução a Smalltalk
"The purpose of the Smalltalk project is to provide
computer support for the
creative spirit of everyone." - Daniel Ingals, 1981.
Arquivos
- imagem (arquivo.image)
contém uma imagem binária de todas as classes definidas
no sistema, todos os objetos instanciados, o compilador, o ambiente de
desenvolvimento, tudo na forma de bytecodes.
- máquina virtual é um programa executável de
uma plataforma específica que é responsável por
interpretar a imagem.
- arquivo de mudanças (arquivo.changes),
grava um
log de tudo o que foi feito no sistema (para poder recuperar
se a imagem for corrompida ou se perder)
- Existe também a opção (não
tão comumente usada) de gravar em arquivos-texto,
métodos, classes, ou pacotes escritos.
- Basta selecionar o que se quer gravar (métodos, classes,
pacotes, etc.) e daí escolher a opção File Out as... que o
código selecionado será gravado, em XML, em um arquivo
texto.
- Este arquivo XML com o código-fonte pode ser depois
importado em qualquer imagem
- No Squeak, há a possibilidade de exportar qualquer
pedaço de código para HTML de forma que ele possa ser
visualizado em um navegador Web e depois importado.
- A versão do Cincom Smalltalk para Windows permite a opção de gravar um arquivo
executável minimal contendo tudo para rodar um certo programa
Smalltalk (em geral, o arquivo não fica menor do que uns 5MB)
Fortemente Orientada a Objetos
- tudo são objetos
- objeto = dados + operações (encapsulamento)
- conversa entre objetos:
- envio de mensagens (Smalltalk)
- chamada de métodos (Java)
- chamada de funções (C++)
- Em Smalltalk, um objeto A envia uma mensagem m para um objeto B;
ao recebê-la, o sistema verifica se B possui um método
implementando aquela mensagem e neste caso, o executa até que
ele devolva um valor que é então enviado de volta a A.
Mensagens Unárias
- Sintaxe: umObjeto
umaMensagem
- Exemplos:
- 10 negated
- 'banana' reverse
- -20 isZero
Mensagens Binárias
- Sintaxe: umObjeto
umaMensagem outroObjeto
- Exemplos:
- 354 + 43
- 20 - 2
- 74 ** 3
- 'Small' , 'talk'
Não há Precedência de Operadores
- Ao contrário da maioria das linguagens, Smalltalk
não define uma ordem de precedência de operadores
matemáticos (pois eles são apenas mensagens como outras
quaisquer)
- Existem 4 regras básicas:
- As mensagens são sempre processadas da esquerda para a
direita.
- Mensagens unárias tem precedência sobre mensagens
binárias que por sua vez tem precedência sobre mensagens
por palavra-chave.
- A atribuição (:=) é sempre processada
por último.
- Parênteses podem ser utilizados para mudar a ordem de envio
das mensagens
Mensagens com seletores ou palavras-chave (selectors or keywords)
- Sintaxe: umObjeto
seletor1: valor1 seletor2: valor2 seletor3: valor3...
- Exemplos:
- substring := 'Alan Kay' copyFrom: 3 to: 4
- dicionário at: 'suco' put: 'juice'
- calendário adicionaJogoDo: 'São Paulo' contraO:
'Palmeiras' placar: 3 a: 2 dia: Date today
Mensagens Encadeadas
- podemos encadear numa mesma linha ou seqüência,
quantas mensagens quisermos
- Exemplos:
- 10 ** 3 + 3 negated odd
- anosOitenta := ('Smalltalk-80' copyFrom: 10 to: 12) asNumber
negated
- pergunta: por que os parenteses são necessários
na linha acima?
Mensagens em Cascata
- Se vamos enviar várias mensagens para o mesmo objeto,
podemos usar uma forma abreviada:
- ao invés de escrever
- coleção :=
OrderedCollection new.
coleção add:
1.
coleção add:
20.
coleção add:
25.
coleção add:
30.
- podemos escrever simplesmente
- coleção :=
OrderedCollection new.
coleção add:
1;
add: 20;
add: 25;
add: 30.
- se quiser, pode colocar tudo na mesma linha, também,
separando por ;
Um detalhe importante: a mensagem yourself
- se quiséssmos colocar todo o comando anterior em uma
só linha, o seguinte não funcionaria:
- coleção :=
OrderedCollection new add:
1; add: 20; add: 25; add: 30.
- por que não?
- teríamos que fazer o seguinte:
- coleção :=
OrderedCollection new add:
1; add: 20; add: 25; add: 30; yourself.
Bibliografia
- Conhecendo o Smalltalk. Abdala e Wangenheim.
Não deixem também de ver esta excelente página de
citações sobre Smalltalk, Java e outras linguagens.
Próxima Aula
Aula Anterior
Página de MAC 441/5714
Página do Fabio
Página do DCC