Next: Classes Up: Messages Previous: Polymorphisme

Édition de liens dynamique (Dynamic Binding)

Une différence cruciale entre appel de fonction et message est qu'une fonction et ces arguments sont reliés dans le code dés la compilation, alors qu'un message et le receveur ne le sont pas avant l'exécution, et l'envoi du message.

Ainsi, la méthode exacte qui sera invoqué en réponse à un message est déterminé à l'exécution, et non plus quand le code est compilé. La méthode a exécuter dépend du receveur, hors le type de celui-ci n'est connu qu'à la réception du message (typage dynamique), mais pas à la compilation. Ainsi différents receveur peuvent avoir différentes implémentations pour le même sélecteur (polymorphisme). L'information que le compilateur ne connaît pas est fournie à l'exécution par l'objet receveur

Quand un message est envoyé, une routine du noyau d'exécution cherche dans le receveur une méthode ayant le bon sélecteur (selector), défini dans le message, et "appel" la routine avec les arguments définis dans le message, (voir "la gestion des messages" plus bas).

L'édition de liens dynamique et le polymorphisme donne à la programmation objet sa souplesse et sa puissance. On obtient des résultats variés non plus en changeant le message mais en changeant le receveur.

Ceci pouvant être fait dynamiquement à l'exécution. Le receveur peut être choisi "à la volé" et ainsi dépendre d'actions extérieur comme les commandes utilisateur. Dans le générateur d'application NeXT, l'utilisateur va déterminé quel sont les objets qui vont recevoir les ordres copier, couper, coller du menu. Les différents objets réagirons différemment à ces ordres. Comme les méthodes de doivent pas être intégrée à la compilation, les méthodes qui utilisent ces ordres n'ont pas à se concerner de leur existence. De plus chaque application peut définir un comportement spécifique au message copier:.



Dominique REVUZ
Vendredi 21 février 1997 17:27:12
Une Bug Un mail Merci