1 00:00:00,490 --> 00:00:05,430 Bonjour à tous. Dans cette cinquième séquence sur l'héritage 2 00:00:06,140 --> 00:00:10,250 et le Lookup, nous allons parler de l'envoi de messages 3 00:00:10,650 --> 00:00:12,910 et de l'algorithme de Lookup dans le cadre des métaclasses. 4 00:00:13,500 --> 00:00:14,470 Alors en Pharo tout est objet. 5 00:00:16,560 --> 00:00:20,230 Les objets peuvent recevoir des messages, donc puisque 6 00:00:20,430 --> 00:00:24,130 tout est objet les classes sont des objets, et puisque 7 00:00:24,330 --> 00:00:26,910 les objets peuvent recevoir des messages les classes 8 00:00:27,110 --> 00:00:28,070 peuvent recevoir des messages aussi. 9 00:00:28,520 --> 00:00:33,210 Le mécanisme d'envoi de messages est exactement le même 10 00:00:33,790 --> 00:00:36,700 que le receveur soit un objet quelconque ou une classe. 11 00:00:37,380 --> 00:00:40,930 Donc il n'y a qu'une seule façon de chercher une méthode 12 00:00:41,130 --> 00:00:43,490 quand un message est envoyé, c'est l'algorithme de Lookup 13 00:00:43,930 --> 00:00:48,000 qu'on a vu et revu dans les séquences précédentes. 14 00:00:49,250 --> 00:00:52,360 Donc maintenant je vais prendre l'exemple d'un envoi de 15 00:00:52,560 --> 00:00:54,200 message sur une classe. 16 00:00:56,270 --> 00:00:59,930 Bon il faut bien comprendre que puisque les classes sont 17 00:01:00,130 --> 00:01:04,380 des objets et que tous les objets sont liés à une classe, 18 00:01:04,580 --> 00:01:07,230 donc tous les objets sont instance d'une classe, donc là 19 00:01:07,470 --> 00:01:09,940 aNode est une instance de la classe Node. 20 00:01:10,140 --> 00:01:15,050 Puisque la classe Node est un objet, 21 00:01:16,250 --> 00:01:18,720 la classe Node est instance d'une classe. 22 00:01:19,790 --> 00:01:22,560 On appelle cette classe Node class. 23 00:01:22,890 --> 00:01:26,000 Donc aNode est une instance de la classe Node et la 24 00:01:26,200 --> 00:01:29,630 classe Node est un objet qui est une instance de la classe Node class. 25 00:01:30,880 --> 00:01:35,000 Là vous pouvez vous demander puisque c'est ça Node class 26 00:01:35,200 --> 00:01:38,320 est une classe, cette classe est un objet donc c'est une 27 00:01:38,520 --> 00:01:42,670 instance d'une classe, et de quelle classe Node class est-elle instance. 28 00:01:42,870 --> 00:01:46,820 Et vous verrez ça dans une séquence suivante, la séquence 29 00:01:47,020 --> 00:01:47,780 sur les métaclasses. 30 00:01:48,210 --> 00:01:49,860 Donc quelques exemples. 31 00:01:50,910 --> 00:01:55,740 Ici on a un objet aWorkstation, instance d'une classe 32 00:01:56,200 --> 00:01:58,400 Workstation, qui est une sous- classe de Node qui est une 33 00:01:58,600 --> 00:02:01,860 sous-classe d'Object. Donc ici il faut faire attention 34 00:02:02,060 --> 00:02:06,220 aux flèches, ici cette flèche avec un triangle vide 35 00:02:07,060 --> 00:02:08,820 indique une relation de sous-classage. 36 00:02:09,420 --> 00:02:11,700 Donc Node est une sous-classe de Object. 37 00:02:11,900 --> 00:02:14,230 Workstation est une sous-classe de Node. 38 00:02:15,170 --> 00:02:18,700 Cette flèche avec un triangle plein qu'on représente 39 00:02:18,900 --> 00:02:23,700 parfois de cette façon-là aussi, indique une relation d'instanciation. 40 00:02:24,340 --> 00:02:28,310 Donc aWorkstation est une instance de Workstation et 41 00:02:28,510 --> 00:02:29,900 Workstation est une instance de workstation Class. 42 00:02:30,900 --> 00:02:34,090 De la même façon object une instance de Object Class. 43 00:02:34,670 --> 00:02:37,420 Si j'envoie un message à l'objet aWorkstation, l'algorithme 44 00:02:37,620 --> 00:02:41,760 de Lookup cherche dans la classe de aWorkstation 45 00:02:43,400 --> 00:02:45,920 puis remonte un dans les super classes jusqu'à ce qu'il 46 00:02:46,120 --> 00:02:48,340 trouve une méthode correspondante. 47 00:02:48,780 --> 00:02:52,000 Eh bien c'est exactement le même mécanisme qui s'applique 48 00:02:52,460 --> 00:02:55,410 si j'envoie un message à la classe Workstation. 49 00:02:56,730 --> 00:03:01,270 Donc par exemple si j'envoie le message New à 50 00:03:01,470 --> 00:03:03,520 Workstation, l'algorithme de Lookup va chercher dans la 51 00:03:03,720 --> 00:03:05,840 classe de Workstation, c'est-à-dire Workstation Class, 52 00:03:06,040 --> 00:03:07,900 pour une méthode qui s'appellerait New. 53 00:03:08,620 --> 00:03:11,410 S'il la trouve ici elle est exécutée, si l'algorithme de 54 00:03:11,610 --> 00:03:14,380 Lookup ne la trouve pas ici il va chercher dans la super 55 00:03:14,580 --> 00:03:17,890 classe, s'il ne la trouve pas ici il va chercher dans la super classe. 56 00:03:19,130 --> 00:03:21,330 Et caetera, cette hiérarchie continue. 57 00:03:23,040 --> 00:03:26,180 Donc je vous laisse ce slide-là pour revoir l'envoi de 58 00:03:26,380 --> 00:03:29,550 messages sur les objets standards et sur les classes qui 59 00:03:29,750 --> 00:03:30,680 sont aussi des objets standards. 60 00:03:31,760 --> 00:03:32,890 Ce que vous devez retenir. 61 00:03:33,480 --> 00:03:36,060 Une classe qui est un objet comme les autres. 62 00:03:37,160 --> 00:03:38,830 On peut envoyer des messages à des objets donc on peut 63 00:03:39,030 --> 00:03:40,000 envoyer des messages à des classes. 64 00:03:40,170 --> 00:03:45,000 L'algorithme de Lookup est exactement le même 65 00:03:45,200 --> 00:03:45,960 dans les 2 cas. 66 00:03:47,750 --> 00:03:49,870 L'algorithme de Lookup va commencer par chercher quelle 67 00:03:50,070 --> 00:03:52,590 est la classe du receveur, puis va remonter dans la 68 00:03:52,790 --> 00:03:56,350 hiérarchie donc en visitant les super classes, jusqu'à 69 00:03:56,550 --> 00:03:58,070 trouver une méthode correspondante au message. 70 00:03:58,640 --> 00:04:01,120 Vous en saurez plus sur les métaclasses en suivant la 71 00:04:01,320 --> 00:04:02,460 séquence Understanding Metaclasses.