1 00:00:01,140 --> 00:00:05,200 Dans cette vidéo, je voudrais vous montrer les analyses 2 00:00:05,560 --> 00:00:09,520 un peu plus poussées qu'on peut faire sur du code avec Nautilus. 3 00:00:10,260 --> 00:00:13,220 Donc ouvrons Nautilus, on va prendre par exemple une 4 00:00:13,387 --> 00:00:14,670 classe simple, NumberParser. 5 00:00:15,880 --> 00:00:19,090 Donc maintenant ce qu'on va regarder, c'est ce qu'on 6 00:00:19,257 --> 00:00:20,170 appelle les Senders et les Implementor. 7 00:00:20,337 --> 00:00:24,640 Souvent, on sait quand quelqu'un est fluide dans Pharo s'il 8 00:00:24,807 --> 00:00:27,350 a compris comment utiliser les Senders et Implementors 9 00:00:27,517 --> 00:00:29,790 pour trouver de l'information. Donc regardons: quand je 10 00:00:29,957 --> 00:00:31,770 prends une méthode, j'aimerais savoir qui est-ce qui 11 00:00:31,937 --> 00:00:33,620 appelle cette méthode, qu'est-ce que je vais faire? 12 00:00:34,080 --> 00:00:35,030 Je vais utiliser Senders Of. 13 00:00:36,680 --> 00:00:41,260 Donc Senders Of, qu'est-ce que ça va me donner? 14 00:00:41,427 --> 00:00:43,230 Ça va me donner ici, ah bah tiens, il n'y a qu'une seule 15 00:00:43,397 --> 00:00:45,920 méthode qui appelle Senders Of, cette méthode s'appelle 16 00:00:46,270 --> 00:00:50,560 ReadExponent et il appelle ExponentLetters. 17 00:00:52,710 --> 00:00:54,310 Donc c'est une information intéressante. 18 00:00:54,610 --> 00:00:56,810 Maintenant imaginons que je vais dans le protocole 19 00:00:57,000 --> 00:01:01,830 public, je prends NextInteger. Si je demande les Senders, 20 00:01:03,140 --> 00:01:07,710 je vais obtenir cette 21 00:01:08,420 --> 00:01:09,740 liste de Senders potentiels. 22 00:01:10,810 --> 00:01:14,910 En fait, ce sont tous les endroits qui envoient le message NextInteger. 23 00:01:15,370 --> 00:01:17,310 Donc là ce que je vois c'est que je suis dans la classe 24 00:01:17,477 --> 00:01:20,590 NumberParser, et que je fais un appel à Self. 25 00:01:21,600 --> 00:01:24,180 Donc j'utilise Self pour faire un appel donc ça sera 26 00:01:24,347 --> 00:01:25,730 forcément la méthode que j'ai ici. 27 00:01:26,740 --> 00:01:30,720 Maintenant, sur les packages ou sur la classe XML, ce n'est 28 00:01:30,887 --> 00:01:33,360 pas dit parce que je ne sais pas forcément, vu que Pharo 29 00:01:33,527 --> 00:01:36,370 est un langage non typé, je ne sais pas exactement à coup 30 00:01:36,537 --> 00:01:40,060 sûr si c'est la méthode en question. 31 00:01:40,227 --> 00:01:44,020 En fait, ce que le système me montre, ce sont qu'un 32 00:01:44,187 --> 00:01:46,010 message de même nom est envoyé. 33 00:01:46,720 --> 00:01:49,000 Donc pour vérifier ça, ce que je peux faire par exemple, 34 00:01:49,167 --> 00:01:51,520 je peux me dire, ah mais moi ce que j'aimerais savoir c'est 35 00:01:51,950 --> 00:01:56,090 quels sont les implémenteurs, donc combien de fois cette 36 00:01:56,257 --> 00:01:57,650 méthode est implémentée dans le système. 37 00:01:57,817 --> 00:02:00,870 Donc pour ça, ce que je vais faire, je vais faire Implementors Of. 38 00:02:02,520 --> 00:02:05,930 Donc Implementors Of, ah bah tiens, alors que tout à l'heure 39 00:02:06,097 --> 00:02:08,350 dans l'autre cas, je n'avais qu'une seule méthode donc c'était 40 00:02:08,517 --> 00:02:12,290 forcément celle-là qui était appelée, là, j'en ai plusieurs. 41 00:02:12,457 --> 00:02:16,050 Donc cette méthode, la méthode NextInteger elle est 42 00:02:16,217 --> 00:02:19,510 définie sur NumberParser, mais elle est aussi définie sur XMLInteger. 43 00:02:20,900 --> 00:02:24,420 Donc là, XMLInteger est défini même sur deux classes 44 00:02:24,587 --> 00:02:26,950 différentes, donc ce que je vois c'est que ces 45 00:02:27,117 --> 00:02:30,000 méthodes-là, ces appels-là, ce sont des appels d'envoi de 46 00:02:30,167 --> 00:02:34,030 messages et qu'ils vont sûrement se résoudre sur ces méthodes-là. 47 00:02:34,420 --> 00:02:36,670 Donc ce que vous voyez, c'est que Sender et Implementor c'est 48 00:02:36,837 --> 00:02:39,650 vraiment important. Implementor ça va vous permettre de 49 00:02:39,817 --> 00:02:41,710 voir toutes les classes du système qui implémentent une 50 00:02:41,877 --> 00:02:45,300 méthode, et Sender ça va vous montrer tous les appels à une méthode. 51 00:02:45,467 --> 00:02:47,840 Alors les Senders, c'est vraiment très important parce 52 00:02:48,007 --> 00:02:50,940 que ça va vous permettre de regarder des exemples, de 53 00:02:51,107 --> 00:02:54,050 dire, ah oui, tiens, cette méthode, mais comment elle est invoquée? 54 00:02:54,520 --> 00:02:56,920 Donc là, je vous ai pris une méthode qui n'avait pas d'argument 55 00:02:57,087 --> 00:02:58,590 mais si j'avais pris une méthode qui avait un argument, 56 00:02:58,757 --> 00:03:02,650 par exemple si je prends Number, NextNumberBase et que je 57 00:03:02,817 --> 00:03:07,470 fais Sender, qu'est-ce que ça va me 58 00:03:07,637 --> 00:03:12,480 montrer? J'ai un argument et je vois, ah oui 59 00:03:12,647 --> 00:03:13,280 tiens c'est la base. 60 00:03:13,447 --> 00:03:15,050 Donc là, bon, il se trouve que ce n'est pas un argument, 61 00:03:15,217 --> 00:03:18,730 c'est juste un appel qui passe un argument mais voilà, 62 00:03:18,897 --> 00:03:22,030 par exemple dans ce test-là, ce que je vois, je vois que 63 00:03:22,420 --> 00:03:27,340 j'instancie NumberParser sur une Stream, 64 00:03:28,340 --> 00:03:30,550 et qu'après je vais lui envoyer le message NextNumberBase 65 00:03:30,717 --> 00:03:32,930 et que je dois passer 10. 66 00:03:33,097 --> 00:03:35,030 Donc ça me permet de comprendre, ah oui c'est comme ça 67 00:03:35,197 --> 00:03:36,200 que je dois utiliser l'API. 68 00:03:37,000 --> 00:03:41,210 Alors c'est tellement utilisé qu'en fait vous avez des raccourcis clavier. 69 00:03:42,390 --> 00:03:45,800 Alors Nautilus a été conçu à la base pour qu'on puisse 70 00:03:46,000 --> 00:03:48,550 complètement faire toutes ces opérations sans toucher à la souris. 71 00:03:49,000 --> 00:03:51,260 Donc là, ce qu'il faut voir c'est que B ça veut dire browse. 72 00:03:51,427 --> 00:03:55,890 Donc on va faire, Browse Sender, le N c'est pour le N de Sender. 73 00:03:56,057 --> 00:03:59,550 Browse Implementor, le M c'est pour Implementor. 74 00:04:00,440 --> 00:04:05,260 Donc si je sélectionne juste "NextNumber" par exemple, 75 00:04:05,570 --> 00:04:08,780 et que je fais Browse N, je vais obtenir 76 00:04:11,110 --> 00:04:14,330 les Senders de NextNumber. 77 00:04:14,860 --> 00:04:17,740 De la même manière si je sélectionne, voilà, je les obtiens. 78 00:04:17,907 --> 00:04:19,610 Maintenant, si je veux obtenir les Implementors Browse M, 79 00:04:20,890 --> 00:04:22,160 j'obtiens les Implementors. 80 00:04:23,700 --> 00:04:25,650 Donc de la même manière sur les classes, j'aimerais 81 00:04:25,817 --> 00:04:28,030 savoir quelles sont les autres classes du système qui 82 00:04:28,197 --> 00:04:30,290 utilisent NumberParser. Pour ce faire, ce que je vais 83 00:04:30,457 --> 00:04:34,730 faire, je vais donc Analyze et j'ai Class 84 00:04:34,897 --> 00:04:39,820 references. Donc Class references, j'obtiens toutes les 85 00:04:40,000 --> 00:04:43,380 classes. Donc on va regarder, j'obtiens toutes les méthodes qui utilisent. 86 00:04:47,300 --> 00:04:49,480 Donc là, je vois que c'est essentiellement des tests. 87 00:04:49,740 --> 00:04:53,000 Ah tiens dans la ClassInteger, je fais appel 88 00:05:00,130 --> 00:05:00,763 au Parser. 89 00:05:00,930 --> 00:05:05,440 Alors là, l'astuce pour comprendre, se rappeler 90 00:05:06,200 --> 00:05:09,300 du raccourci clavier, c'est de se dire que là c'est 91 00:05:10,050 --> 00:05:14,550 Browse shift N, c'est 92 00:05:16,070 --> 00:05:19,250 une lettre capitale parce qu'on pense finalement que c'est 93 00:05:19,417 --> 00:05:21,700 comme invoquer une méthode, à part que là on veut 94 00:05:21,867 --> 00:05:24,090 invoquer une classe, et qu'une classe c'est plus gros qu'une 95 00:05:24,257 --> 00:05:25,310 méthode donc on a une capitale.