Outils pour utilisateurs

Outils du site


cours:informatique:dev:programmation_objet_pharo:420_lookup_et_metaclasse

Recherche de Méthode et Métaclasses

Dans cette cinquième séquence sur l'héritage et le Lookup, nous allons parler de l'envoi de messages et de l'algorithme de Lookup dans le cadre des métaclasses.

  • En Pharo tout est objet;
  • Les objets peuvent recevoir des messages;
  • Puisque tout est objet, les classes sont des objets;
  • Puisque les objets peuvent recevoir des messages les classes peuvent recevoir des messages aussi.

Le mécanisme d'envoi de messages est exactement le même pour tous les objets, les classes y compris.

Donc il n'y a qu'une seule façon de chercher une méthode quand un message est envoyé, c'est l'algorithme de Lookup qu'on a présenté dans les séquences précédentes.

Donc maintenant je vais prendre l'exemple d'un envoi de message sur une classe.

Il faut bien comprendre que puisque les classes sont des objets et que tous les objets sont instance d'une classe, dans l'exemple aNode est une instance de la classe Node.

Puisque la classe Node est un objet, la classe Node est instance d'une classe. On appelle cette classe Node class. Donc aNode est une instance de la classe Node et la classe Node est un objet qui est une instance de la classe Node class. Là vous pouvez vous demander puisque c'est ça Node class est une classe, cette classe est un objet donc c'est une instance d'une classe, et de quelle classe Node class est-elle instance. Et vous verrez ça dans une séquence suivante, la séquence sur les métaclasses. Donc quelques exemples. Ici on a un objet aWorkstation, instance d'une classe Workstation, qui est une sous- classe de Node qui est une sous-classe d'Object. Donc ici il faut faire attention aux flèches, ici cette flèche avec un triangle vide indique une relation de sous-classage. Donc Node est une sous-classe de Object. Workstation est une sous-classe de Node. Cette flèche avec un triangle plein qu'on représente parfois de cette façon-là aussi, indique une relation d'instanciation. Donc aWorkstation est une instance de Workstation et Workstation est une instance de workstation Class. De la même façon object une instance de Object Class. Si j'envoie un message à l'objet aWorkstation, l'algorithme de Lookup cherche dans la classe de aWorkstation puis remonte un dans les super classes jusqu'à ce qu'il trouve une méthode correspondante. Eh bien c'est exactement le même mécanisme qui s'applique si j'envoie un message à la classe Workstation. Donc par exemple si j'envoie le message New à Workstation, l'algorithme de Lookup va chercher dans la classe de Workstation, c'est-à-dire Workstation Class, pour une méthode qui s'appellerait New. S'il la trouve ici elle est exécutée, si l'algorithme de Lookup ne la trouve pas ici il va chercher dans la super classe, s'il ne la trouve pas ici il va chercher dans la super classe. Et caetera, cette hiérarchie continue. Donc je vous laisse ce slide-là pour revoir l'envoi de messages sur les objets standards et sur les classes qui sont aussi des objets standards. Ce que vous devez retenir. Une classe qui est un objet comme les autres. On peut envoyer des messages à des objets donc on peut envoyer des messages à des classes. L'algorithme de Lookup est exactement le même dans les 2 cas. L'algorithme de Lookup va commencer par chercher quelle est la classe du receveur, puis va remonter dans la hiérarchie donc en visitant les super classes, jusqu'à trouver une méthode correspondante au message. Vous en saurez plus sur les métaclasses en suivant la séquence Understanding Metaclasses.

cours/informatique/dev/programmation_objet_pharo/420_lookup_et_metaclasse.txt · Dernière modification : 2022/09/02 09:27 de yoann