MAC 441/5714 - Tópicos de Programação
Orientada a Objetos
Aula 4 - 18/03/2004
Introdução a Smalltalk
"Smalltalk is by far the best programming language
available. The Family
of C programming languages has been evolving toward Smalltalk-like
functionality for the past 25 years. Java is the most Smalltalk-like of
the C family, removing the direct pointer manipulation of C++ and
adding fully integrated garbage collection. Smalltalk provides a
simpler syntax, consistency between class and instance behavior, much
higher productivity and easier maintainability. This makes it the
logical next choice for current Java developers and the logical choice
for businesses interested in reducing their total cost of ownership for
software systems." (Allen B. Davis)
Um Pouco do Ambiente de Desenvolvimento
- Welcome
- Workspace
- menu do botão da direita: explain, do it, print it,
debug it
- System Browser
- pacotes, hierarquia, classes, protocolos, métodos,
atributos, variáveis compartilhadas
- exemplo: Dialog warn 'E
aí meu irrrrrmão??'
- dar explain no warn, achar Dialog, achar choose:from:List:values:lines:cancel:,
rodar exemplo de dentro do comentário.
- File Browser
- Change List
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.
Nomes para Métodos e outros Elementos
- É muito muito importante
- dar nomes que indiquem muito claramente o que os métodos
fazem
- dar nomes aos parâmetros que indiquem o tipo/papel dos
objetos passados por parâmetro
- utilizar as regras/estilo comumente usados pela
comunidade da linguagem (inventar seu próprio estilo nem sempre
é uma boa).
- Exemplos:
- findPreviousString: aString
startingAt: start
- indexOfSubCollection:
aSubCollection startingAt: anIndex
- evite nomes abreviados e crípticos para métodos,
classes e variáveis
- nomes de métodos e classes podem ser meio-longos; se forem
longos demais, talvez seja um indício de que o método
está fazendo coisas demais ou que a classe está com
responsabilidades demais
- métodos em Smalltalk em geral são bem curtos (de 5
a 10 linhas)
- Note que em C++ ou Java a mensagem seguinte seria muito mais
difícil de se entender forçando o leitor do código
a olhar a implementação do método para entender o
que ele faz, em Smalltalk isso não é necessário
(desde que os seletores sejam bem escolhidos)
- calendário adicionaJogoDo: 'São Paulo' contraO:
'Palmeiras' placar: 3 a: 2 dia: Date today
- em Java: calendário.adicionaJogo("São Paulo",
"Palmeiras", 3, 2, System.Date.today());
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