MAC 441/5714 - Tópicos de Programação
Orientada a Objetos
Aula 4 - 13/03/2008
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 / Smalltalk Introduction
- Navigator, Widgets, Supplies
- Workspace
- menu do botão da direita: explain, do it, print it,
inspect it, debug it
- Transcript
- Message Names
- Method Finder
- System Browser
- pacotes, hierarquia, classes, protocolos, métodos,
atributos, variáveis compartilhadas
- exemplo: ver
classe String do pacote Collections-Text
- File List
- Change Set
- Change Sorter
- Recent
- Processes
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());
Atributos
- Temos variáveis de classe e variáveis de
instância
- Em Smalltalk todos atributos são privados e todos
métodos são públicos
- Se queremos acessar um atributo de fora da classe, precisamos ter
métodos de acesso
- A convenção Smalltalk para métodos acessores
é terem exatamente o mesmo nome do atributo
- Exemplo:
- Atributo: nomeDoPai
- método acessor para leitura: nomeDoPai
- método acessor para escrita: nomeDoPai: umNome
- bobFilho := Pessoa new.
bobFilho nomeDoPai: 'Bob Pai'.
Transcript show: 'O pai dele é', (bobFilho nomeDoPai).
Variáveis Locais
- São definidas no início do método entre | |
- Exemplo:
- |var1 var2
minhaQueridaTemporária|
Valor Devolvido
- self é o
valor default caso nada seja especificado
- pode-se especificar um valor diferente usando-se ^algumaCoisa
O que é Importante: Efeito Colateral ou Valor Devolvido
- Um método ou é responsável por devolver
algum valor interessante ou por causar algum efeito colateral
- Um efeito colateral pode ser a mudança do estado do objeto
ou o envio de mensagens a outros objetos ou ambos
- Muitas vezes não é uma boa idéia escrever um
método onde ambas as coisas (valor devolvido e efeito colateral)
são importantes; se for fazer isso, avalie o caso com cuidado
- Em todos os casos, o objetivo do método tem que estar
muito claro para o usuário dele.
Exercício
- Escrever classe Conversor que converte temperaturas de Celsius
para Fahrenheit
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