1 00:00:00,690 --> 00:00:03,450 Bonjour à tous. Dans cette séquence, nous allons 2 00:00:03,550 --> 00:00:06,820 présenter la définition de classe et méthode dans Pharo. 3 00:00:08,820 --> 00:00:12,130 Ce qui est vraiment spécifique à Pharo, il n'y a pas de 4 00:00:12,230 --> 00:00:15,140 syntaxe particulière pour définir les méthodes et les classes. 5 00:00:15,830 --> 00:00:17,870 Cela se fait au niveau des outils. 6 00:00:18,050 --> 00:00:19,910 Donc, c'est les outils qui vont donner le contexte à la 7 00:00:20,010 --> 00:00:21,690 création d'une classe ou d'une méthode. 8 00:00:23,890 --> 00:00:28,850 Donc, voici le navigateur de code principal dans Pharo, c'est 9 00:00:29,460 --> 00:00:33,790 Nautilus. On voit dans la zone du bas, la définition de 10 00:00:33,890 --> 00:00:38,700 la classe Point. On voit que la classe Point a 11 00:00:38,800 --> 00:00:43,490 pour superclasse la classe Object et deux variables d'instances X et Y. 12 00:00:44,690 --> 00:00:49,340 La superclasse et les deux variables d'instance X et Y. 13 00:00:51,380 --> 00:00:54,960 On voit aussi en bas le nom du package dans lequel cette 14 00:00:55,060 --> 00:00:58,590 classe va être ajoutée. Dans les slides, on aura ce genre 15 00:00:58,690 --> 00:01:00,880 de codes pour créer une nouvelle sous-classe. 16 00:01:02,780 --> 00:01:06,150 On voit que pour créer une classe en Pharo, on envoie un 17 00:01:06,250 --> 00:01:09,070 message particulier à la superclasse avec le nom de la 18 00:01:09,170 --> 00:01:13,680 sous-classe en paramètres. Donc le 19 00:01:13,780 --> 00:01:15,550 message subclass instanceVariableNames classVariableNames 20 00:01:15,650 --> 00:01:20,430 package est un message qui est envoyé à la classe object, 21 00:01:20,690 --> 00:01:24,350 avec le nom de la sous-classe en paramètres, la liste des 22 00:01:24,450 --> 00:01:27,120 noms des variables d'instance en paramètres, ainsi que le 23 00:01:27,220 --> 00:01:31,300 nom du package en paramètres. Concernant la définition de 24 00:01:31,400 --> 00:01:36,260 méthodes, on a dans la zone du bas encore le nom de la 25 00:01:36,360 --> 00:01:41,190 méthode, un commentaire et le code de la 26 00:01:41,290 --> 00:01:44,270 méthode. Et cette méthode, elle appartient à une classe. 27 00:01:44,780 --> 00:01:46,600 Comme vous le voyez dans la syntaxe pour définir la 28 00:01:46,700 --> 00:01:50,280 méthode, on n'a pas l'l'information sur la classe à 29 00:01:50,380 --> 00:01:51,840 laquelle cette méthode doit appartenir. 30 00:01:52,210 --> 00:01:55,380 En fait, c'est la sélection de la classe dans le 31 00:01:55,480 --> 00:02:00,230 navigateur de codes qui va nous indiquer la classe à 32 00:02:00,330 --> 00:02:01,160 laquelle appartient la méthode. 33 00:02:04,550 --> 00:02:07,710 Dans les slides, il nous faut aussi cette information. 34 00:02:08,050 --> 00:02:10,580 Ce qui fait qu'on ne peut pas recopier juste le contenu 35 00:02:10,900 --> 00:02:12,160 de la définition d'une méthode. 36 00:02:12,710 --> 00:02:15,770 Il nous faut ajouter un préfixe au nom de la méthode pour 37 00:02:15,870 --> 00:02:19,090 indiquer à quelle classe cette méthode appartient. 38 00:02:20,390 --> 00:02:24,530 Donc, on ajoute en tête 39 00:02:25,390 --> 00:02:27,400 du nom de la méthode, on ajoute le nom de la classe à 40 00:02:27,500 --> 00:02:30,750 laquelle on va ajouter la méthode qu'on est en train de définir. 41 00:02:31,600 --> 00:02:35,370 Donc, dans le navigateur de code, cette classe n'apparaît 42 00:02:35,470 --> 00:02:38,030 qu'en tant que sélection dans le navigateur. 43 00:02:40,110 --> 00:02:41,660 Donc là, on est bien en train de définir la méthode 44 00:02:41,760 --> 00:02:43,090 factorielle de la classe Integer. 45 00:02:45,040 --> 00:02:47,460 Alors, petit rappel sur les messages. 46 00:02:48,010 --> 00:02:49,890 Ici, on est en train de définir la méthode factorielle. 47 00:02:53,190 --> 00:02:56,600 On a tout un ensemble de messages binaires, donc =, >, 48 00:02:57,260 --> 00:03:02,100 * et - qui 49 00:03:02,200 --> 00:03:03,450 sont des messages binaires. 50 00:03:04,320 --> 00:03:08,510 On a un appel récursif à la méthode factorielle 51 00:03:09,130 --> 00:03:12,730 donc factorielle ici, c'est un message unaire qui est 52 00:03:12,830 --> 00:03:14,110 envoyé à un objet de type nombre. 53 00:03:16,340 --> 00:03:20,430 Et on a deux messages à mots clés: ifTrue 54 00:03:21,150 --> 00:03:22,540 deux fois et error. 55 00:03:24,800 --> 00:03:28,640 Et enfin, on a le chapeau qui est utilisé pour retourner 56 00:03:28,740 --> 00:03:30,720 une valeur et quitter la méthode. 57 00:03:33,100 --> 00:03:37,010 Alors concernant le retour, par défaut, en Pharo, 58 00:03:37,820 --> 00:03:41,170 toutes les méthodes retournent self donc l'objet en cours. 59 00:03:42,190 --> 00:03:46,000 Donc, le code qui est au-dessus est exactement similaire 60 00:03:46,100 --> 00:03:48,710 au code qui est en dessous. Donc, la partie return self à 61 00:03:48,810 --> 00:03:50,340 la fin de la méthode est complètement optionnelle. 62 00:03:50,440 --> 00:03:51,550 Et en général, on ne la mettra pas. 63 00:03:53,050 --> 00:03:56,660 Les méthodes de classes permettent d'envoyer des messages à des classes. 64 00:03:56,760 --> 00:03:58,650 Les classes sont des objets comme les autres. 65 00:03:58,820 --> 00:04:01,290 On peut envoyer des messages à des classes. 66 00:04:01,510 --> 00:04:04,680 Et pour définir une méthode de classe, on appuie sur le 67 00:04:04,780 --> 00:04:06,430 bouton "class" dans Nautilus et on 68 00:04:09,360 --> 00:04:11,620 définit la méthode de classe à ce moment-là. 69 00:04:12,180 --> 00:04:15,450 Dans les slides, on ajoutera systématiquement le mot 70 00:04:15,550 --> 00:04:20,340 "class" pour distinguer une méthode qui va être 71 00:04:20,440 --> 00:04:24,840 exécutée sur une classe plutôt que sur une instance de cette classe. 72 00:04:25,950 --> 00:04:29,550 Donc là, la méthode X Y, elle va être exécutée sur la 73 00:04:29,650 --> 00:04:32,530 classe Point et non pas sur une instance de la classe Point. 74 00:04:34,100 --> 00:04:38,910 Alors, ce que vous devez retenir de cette séquence: une 75 00:04:39,010 --> 00:04:41,760 classe est définie non pas par la syntaxe particulière, 76 00:04:41,860 --> 00:04:44,430 mais par un message qu'on va envoyer à sa superclasse. 77 00:04:47,090 --> 00:04:50,030 Les classes sont définies au sein de paquets dont les 78 00:04:50,130 --> 00:04:53,280 noms sont passés en paramètre du message. 79 00:04:54,950 --> 00:04:56,880 Toutes les méthodes sont publiques, il n'y a pas de 80 00:04:57,000 --> 00:04:58,960 mot-clé particulier pour indiquer qu'une méthode est 81 00:04:59,060 --> 00:05:01,360 publique parce que c'est le cas de toutes les méthodes. 82 00:05:01,460 --> 00:05:03,850 Il n'y a pas de notion de protégé, de private, etc. 83 00:05:07,370 --> 00:05:09,920 Par défaut, toutes les méthodes retournent le receveur, c'est-à-dire 84 00:05:10,150 --> 00:05:13,820 self et on peut utiliser le chapeau pour retourner autre chose que self. 85 00:05:17,400 --> 00:05:19,930 Et les méthodes de classe sont des méthodes comme les autres. 86 00:05:20,030 --> 00:05:21,950 Et pour les ajouter, il faut appuyer sur le bouton 87 00:05:22,050 --> 00:05:23,890 "class" avant de créer la méthode. 88 00:05:24,950 --> 00:05:27,390 Ceci conclut cette première semaine de cours. 89 00:05:28,070 --> 00:05:30,870 La semaine suivante, nous verrons plus en détails la 90 00:05:30,970 --> 00:05:35,270 syntaxe de Pharo, les blocks et un outil qui est l' 91 00:05:35,370 --> 00:05:36,490 inspecteur d'objets.