Bonjour à tous. 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.
Alors en Pharo tout est objet.
Les objets peuvent recevoir des messages, donc puisque
tout est objet les classes sont des objets, et 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
que le receveur soit un objet quelconque ou une classe.
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 vu et revu dans les séquences précédentes.
Donc maintenant je vais prendre l'exemple d'un envoi de
message sur une classe.
Bon il faut bien comprendre que puisque les classes sont
des objets et que tous les objets sont liés à une classe,
donc tous les objets sont instance d'une classe, donc là
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.