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.

