Determinação do método correspondente a uma mensagem:
as variáveis especiais "self" e "super"

Como foi visto na seção anterior, uma classe herda os métodos definidos nas classes acima na hierarquia, mas pode também redefiní-los e acrescentar outros. Quando um objeto recebe uma mensagem, é iniciada uma busca no protocolo específico de sua classe. Caso a mensagem seja encontrada, o método correspondente é executado. Caso contrário, a busca continua no protocolo da sua super-classe, e assim sucessivamente até chegar ao topo, na classe Object.

Para ilustrar, seja a hierarquia de classes abaixo, onde são mostrados os protocolos de cada uma, e os nomes dos métodos correspondentes a cada mensagem:

classe A
mens1(método1)
mens2 (método2)
mens3 (método3)
classe AA
mens4 (método4)
mens1 (método1a)
classe AAA
mens5 (método5)
mens2 (método2a)

Note que a classe AA redefine o método para a mensagem mens1, e a classe AAA redefine o método para a mensagem mens2.

Sejam 3 objetos, referenciados pelas variáveis x, y, e z, tais que:

Suponha a seguir a sequência de expressões abaixo. Os métodos que serão ativados são mostrados ao lado de cada mensagem, entre parênteses:

Note que a mensagem mens5 não pode ser compreendida por y, pois não foi implementada em sua classe, nem em nenhuma de suas super-classes. O mesmo ocorre com a mensagem mens4 enviada a x.


As variáveis especiais: self e super

Quando um objeto recebe uma mensagem, o método correspondente é ativado. Esse método, por sua vez, é composto por uma outra sequência de mensagens. As variáveis self e super podem ser usadas em qualquer expressão de um método M para representar o próprio receptor da mensagem que ativou M. A diferença entre mensagens dirigidas a self ou a super está na forma como Smalltalk inicia a busca do método correspondente. Quando uma mensagem, dentro de um método M, é enviada a self, a pesquisa do método correspondente inicia-se na classe do receptor da mensagem que ativou M. Caso a mensagem seja enviada a super, então a pesquisa inicia-se na super-classe do receptor.

Voltando ao exemplo anterior, suponha que o objeto z recebeu a mensagem mens5, ativando o método método5. Suponha agora que, dentro de método5 ocorram as seguintes expressões:

método5
:
:
self mens2.
:
super mens2.
:

Em ambas, self e super referem-se ao mesmo objeto referenciado por z, que é o receptor da mensagem que ativou método5. A primeira mensagem ativará o método método2a, enquanto a segunda ativará o método método2 pois, nesse último caso a pesquisa se iniciará na classe AA.

A sintaxe das expressões em Smalltalk será vista com maior detalhe em Expressões e Métodos em Smalltalk.