La syntaxe des messages pose un problème dès qu'une méthode doit référer le receveur (l'objet qui reçoit le message). Supposons que l'on définisse une méthode reCentre qui change les coordonnées de l'objet sur lequel elle s'applique. Pour cela elle va utiliser la méthode moveTo:: pour réaliser le déplacement. Ce message doit donc être envoyé à l'objet receveur du message reCentre. Il n'est pas possible avant l'envoi du message reCentre de savoir quel objet l'on doit déplacer avec le message moveTo::. En effet le message reCentre peut être envoyé à tout un ensemble d'objets différents, de classes différentes, de nom différents :
- reCentre [??? moveTo:30.0 :50.0]; . . .
Pour résoudre ce problème ObjectiveC fournit deux termes qui se réfère à l'objet qui réalise la méthode se sont :
- reCentre
{
[self moveTo:30.0 :50.0];
. . .
}
ou:
- reCentre
{
[super moveTo:30.0 :50.0];
. . .
}
Ici self et super tous deux réfèrent l'objet receveur du message reCentre, quelque soit la classe de l'objet. Mais les deux termes sont bien différents, self est un des arguments cachés de la fonction de traitement des messages, c'est une variable locale qui peut être utilisée librement dans l'implémentation d'une méthode, comme les variables d'instance. super peut se substituer à self uniquement en tant que receveur dans un message. En position de receveur la différence des deux termes est dans le traitement du message:
Next: Un exemple Up: La gestion des messages Previous: Arguments cachés
Dominique REVUZ