1 00:00:00,840 --> 00:00:04,000 Bonjour. Dans cette séquence nous allons parler des méthodes de classe. 2 00:00:04,180 --> 00:00:08,430 Alors en Pharo nous avons vu tout est un objet et qu'on 3 00:00:08,630 --> 00:00:09,920 pouvait envoyer des messages et des objets. 4 00:00:11,180 --> 00:00:15,360 Donc si on prend ces 2 informations-là, les classes sont 5 00:00:15,560 --> 00:00:17,790 aussi des objets et on peut envoyer les informations à 6 00:00:18,000 --> 00:00:19,880 des classes donc on peut envoyer des messages à des classes. 7 00:00:21,630 --> 00:00:26,240 Alors 2 exemples: Time now, on envoie le message now à l'objet 8 00:00:26,440 --> 00:00:29,650 Time qui est une classe, et ça nous retourne l'heure actuelle. 9 00:00:31,240 --> 00:00:36,000 Donc j'envoie le message now à l'objet Time qui est un 10 00:00:36,200 --> 00:00:39,700 nom de classe, qui est une classe, ça me renvoie l'heure actuelle. 11 00:00:40,510 --> 00:00:44,180 De la même façon, j'envoie le message today à l'objet 12 00:00:44,380 --> 00:00:47,100 Date qui est une classe, et ça me retourne la date du jour. 13 00:00:48,080 --> 00:00:51,310 Voici 3 autres exemples: dans le premier, j'envoie le 14 00:00:51,510 --> 00:00:55,000 message workingDirectory à la classe FileLocator, et ça 15 00:00:55,200 --> 00:00:58,000 me donne le chemin d'accès en cours. 16 00:00:58,280 --> 00:01:02,460 Donc le dossier dans lequel l'exécution se passe. 17 00:01:03,810 --> 00:01:07,490 Dans le deuxième exemple, j'envoie le message getPng à l'objet 18 00:01:07,690 --> 00:01:12,240 ZnEasy, avec en argument une url, l'url d'un fichier 19 00:01:12,440 --> 00:01:16,960 png, et ça me retourne le fichier png qui est précédemment téléchargé. 20 00:01:18,640 --> 00:01:20,880 Dans le troisième exemple, j'envoie le message 21 00:01:21,080 --> 00:01:23,210 startDefaultOn à ZnSserver, donc qui est une classe 22 00:01:23,410 --> 00:01:27,520 encore une fois, avec un numéro de port 23 00:01:28,180 --> 00:01:30,310 et ceci démarre le serveur http. 24 00:01:31,570 --> 00:01:35,390 Donc dans les 3 cas, on a une classe, on envoie un message à cette classe. 25 00:01:36,630 --> 00:01:40,230 Alors comment est-ce qu'on fait pour implémenter une méthode de classe? 26 00:01:41,060 --> 00:01:45,770 On sélectionne la classe, on appuie sur le bouton Class 27 00:01:46,000 --> 00:01:48,550 pour dire qu'on veut implémenter une méthode du côté 28 00:01:48,750 --> 00:01:51,750 classes et non pas du côté instances, et on implémente 29 00:01:51,950 --> 00:01:53,840 une méthode comme on ferait d'habitude. 30 00:01:54,830 --> 00:01:58,000 Donc là, la méthode today, elle est implémentée du côté 31 00:01:58,200 --> 00:02:00,690 classes, dans la classe Date. 32 00:02:03,520 --> 00:02:06,650 Alors voici sur ce slide une erreur fréquente. 33 00:02:07,600 --> 00:02:11,730 Ici on souhaite envoyer le message WithValue 34 00:02:13,540 --> 00:02:17,350 à la classe Counter, retourne un nouveau Counter avec une 35 00:02:17,550 --> 00:02:18,500 valeur fournie en paramètre. 36 00:02:18,700 --> 00:02:23,320 Donc on voudrait que counter with value 37 00:02:23,520 --> 00:02:26,770 10 retourne un nouveau Counter qui commencerait à la valeur 10. 38 00:02:28,340 --> 00:02:31,750 Or, si j'évalue cette expression j'obtiens la valeur 39 00:02:31,950 --> 00:02:34,380 counter et pas un nouveau Counter. 40 00:02:34,660 --> 00:02:38,120 En fait j'obtiens la classe et pas une nouvelle instance de cette classe. 41 00:02:38,650 --> 00:02:40,130 Alors pourquoi cette erreur ? 42 00:02:40,330 --> 00:02:41,090 Donc quel est le problème ? 43 00:02:41,620 --> 00:02:46,280 Le problème vient que par défaut, toutes les méthodes retournent self. 44 00:02:47,370 --> 00:02:50,140 Donc si je ne spécifie pas la valeur à retourner, la 45 00:02:50,340 --> 00:02:53,560 méthode va retourner Self. Donc le code ci-dessus est 46 00:02:53,760 --> 00:02:56,350 équivalent au code ci-dessous et donc on retourne Self. 47 00:02:56,550 --> 00:02:59,300 Dans ce cas-là, Self c'est la classe Counter. 48 00:03:00,760 --> 00:03:04,150 Donc la méthode retourne la classe elle-même et pas l'instance 49 00:03:04,350 --> 00:03:05,110 qui a été créée juste au-dessus. 50 00:03:05,310 --> 00:03:10,090 Donc pour corriger ce problème, il suffit d' 51 00:03:10,290 --> 00:03:13,240 ajouter un chapeau devant le self new. 52 00:03:14,280 --> 00:03:17,000 Alors en résumé, les classes sont des objets. 53 00:03:17,450 --> 00:03:19,810 On peut envoyer des messages à n'importe quel objet donc 54 00:03:20,010 --> 00:03:21,240 on peut envoyer un message à une classe. 55 00:03:21,770 --> 00:03:24,830 Pour implémenter les méthodes correspondantes, il faut 56 00:03:25,030 --> 00:03:28,890 appuyer sur le bouton Class après avoir sélectionné une classe. 57 00:03:30,000 --> 00:03:31,780 La plupart des méthodes de classes servent à créer de 58 00:03:32,000 --> 00:03:34,080 nouvelles instances de ces classes mais pas seulement, on 59 00:03:34,280 --> 00:03:37,010 peut imaginer d'autres possibilités et vous verrez 60 00:03:37,210 --> 00:03:40,010 beaucoup d'autres utilisations de la méthode de classes dans Pharo. 61 00:03:40,880 --> 00:03:44,420 Les méthodes de classe sont telles qu'exactement comme 62 00:03:44,620 --> 00:03:45,650 les autres méthodes, il n'y a pas de règles 63 00:03:45,850 --> 00:03:49,790 particulières, le LookUp fonctionne exactement de la même façon. 64 00:03:50,490 --> 00:03:51,940 Et nous verrons ça la semaine prochaine.