MAC 441/5714 - Tópicos de Programação
Orientada a Objetos
Aula 5 - 25/03/2008
Blocos
- Um bloco é um objeto que contém uma
seqüência de instruções a serem executadas
- Um bloco é uma seqüência postergada de
ações
- Sintaxe: [
ação1. ação2. ação3. ...
açãon]
- Exemplos:
- [índice := índice
+ 1]
- [índice := índice
+ 1.
array at: índice put: 32]
- note a indentação acima, é a comumente
utilizada, i.e., blocos são "retangulares".
- blocos podem ser passados como parâmetros ou guardados em
variáveis:
- ações at:
'pagamentos mensais'
put: [FinançasCaseiras gastoDe:
1200 em: 'aluguel';
gastoDe: 60 em: 'jornal';
gastoDe: 350 em: 'manutenção do carro';
gastoDe: 13.50 em: 'Nhá Bentas']
- O trecho de código acima não envia nenhuma mensagem
para o objeto FinançasCaseiras,
ele simplesmente envia o bloco para o objeto ações que
provavelmente o guardará como sendo um bloco associado ao string
'pagamentos mensais' e
que deverá ser executado mais tarde no momento oportuno.
- Objetos do tipo bloco podem ser executados enviando-se para eles
a mensagem value
- Por exemplo, faríamos algo como (ações at: 'pagamentos
mensais') value para recuperar e executar o bloco armazenado
- Às vezes, armazenamos blocos em variáveis: incrementBlock := [index := index + 1]
- O valor devolvido por um bloco é o valor devolvido pela
última expressão dentro dele.
Repetição
- Por ser uma linguagem minimalista, Smalltalk não possui
comandos de repetição, laços, etc.
- Mas os números possuem métodos que fazem exatamente
isso.
- Exemplo:
- 4 timesRepeat: [quantia := quantia + 10]
Condicionais
- Por ser uma linguagem minimalista, Smalltalk não possui
comandos como if, while, for, etc
- Mas os tipos booleanos possuem mensagens que assumem este papel
- A biblioteca de classes possui as classes Boolean, True e False
- As classes True e False só tem uma
instância cada; são chamadas de true e false
- Exemplos:
- (x < 0)
ifTrue:
[Dialog warn: 'Cuidado, o número é negativo!']
- (número \\ 2) = 0
"resto da divisão por 2 é 0?"
ifTrue: [paridade := 0]
ifFalse: [paridade := 1]
- paridade := (número \\ 2) = 0 ifTrue: [0] ifFalse: [1]
Repetição Condicional
- index := 1.
[index <= list size]
whileTrue: [list at: index put: 0.
index := index + 1]
- [list size >= 10] whileFalse: [list getMoreContents]
- exercício interessante: ver a implementação
do método timesRepeat:
Argumentos para Blocos
- Blocos podem receber um ou mais argumentos
- meuQueridoBloquinho := [:array |
total := total + array size]
- meuQueridoBloquinho value:
meuQueridoVetor
- [:novoElemento |
índice := índice + 1.
lista at: índice put: novoElemento]
- delta := [:a :b :c | b ** 2
- (4 * a * c)].
delta value: 10 value: 20
value: 30
Bibliografia
- Smalltalk-80 - The Language and
Its Implementation. Adele
Goldberg e David Robson.
- Conhecendo o Smalltalk.
Abdala e Wangenheim.
Próxima Aula
Aula Anterior
Página de MAC 441/5714
Página do Fabio
Página do DCC