﻿1
00:00:01,140 --> 00:00:05,200
En este video, me gustaría
mostrarle los

2
00:00:05,560 --> 00:00:09,520
análisis avanzados de código
que puede hacer con Nautilus.

3
00:00:10,260 --> 00:00:13,220
Entonces abramos Nautilus.
Consideramos por ejemplo

4
00:00:13,387 --> 00:00:14,670
una clase simple, NumberParser.

5
00:00:15,880 --> 00:00:19,090
Ahora miramos lo que

6
00:00:19,257 --> 00:00:20,170
llamamos Senders y
los Implementers

7
00:00:20,337 --> 00:00:24,640
A menudo, comprobamos si alguien
habla con fluidez en Pharo cuando

8
00:00:24,807 --> 00:00:27,350
ha entendido cómo
usar Senders y Implementers

9
00:00:27,517 --> 00:00:29,790
para encontrar información.
Echemos un vistazo: cuando

10
00:00:29,957 --> 00:00:31,770
considero un método,
Me gustaría saber quien

11
00:00:31,937 --> 00:00:33,620
llama a este método,
¿qué voy ha hacer?

12
00:00:34,080 --> 00:00:35,030
Utilizaré Senders Of.

13
00:00:36,680 --> 00:00:41,260
¿Qué obtendré con Senders Of?

14
00:00:41,427 --> 00:00:43,230
Solo tengo un método

15
00:00:43,397 --> 00:00:45,920
que llama a los Senders
Of, se llama

16
00:00:46,270 --> 00:00:50,560
ReadExponent y llama
ExponentLetters.

17
00:00:52,710 --> 00:00:54,310
Es una información interesante.

18
00:00:54,610 --> 00:00:56,810
Ahora imaginemos que voy
al protocolo

19
00:00:57,000 --> 00:01:01,830
publico, elijo
NextInteger. Si pregunto a los Senders,

20
00:01:03,140 --> 00:01:07,710
obtendré esta

21
00:01:08,420 --> 00:01:09,740
lista de Senders potenciales

22
00:01:10,810 --> 00:01:14,910
De hecho, son todos los lugares
que envían el mensaje NextInteger.

23
00:01:15,370 --> 00:01:17,310
Aquí veo que estoy en 
la clase

24
00:01:17,477 --> 00:01:20,590
NumberParser y que llamo
a self.

25
00:01:21,600 --> 00:01:24,180
Pues utilizo self para 
hacer una llamada y sera

26
00:01:24,347 --> 00:01:25,730
necesariamente el método que tengo aquí

27
00:01:26,740 --> 00:01:30,720
Ahora, en los paquetes
o en la clase XML, no se muestra

28
00:01:30,887 --> 00:01:33,360
porque necesariamente no lo conoce,
al ser Pharo

29
00:01:33,527 --> 00:01:36,370
un lenguaje no tipado,
No estoy seguro

30
00:01:36,537 --> 00:01:40,060
si este es el método en cuestión.

31
00:01:40,227 --> 00:01:44,020
De hecho, el sistema muestra
que un mensaje

32
00:01:44,187 --> 00:01:46,010
con el mismo nombre ha sido enviado.

33
00:01:46,720 --> 00:01:49,000
Para comprobar esto,
puedo, por ejemplo

34
00:01:49,167 --> 00:01:51,520
podria preguntarme,
digamos que me gustaría saber

35
00:01:51,950 --> 00:01:56,090
¿cuáles son los implementadores,
cuantas veces este

36
00:01:56,257 --> 00:01:57,650
método esta implementado en el
sistema.

37
00:01:57,817 --> 00:02:00,870
Para hacer esto, seleccionaré
Implementors Of.

38
00:02:02,520 --> 00:02:05,930
Implementors Of. Ah bah
mira, mientras en el otro

39
00:02:06,097 --> 00:02:08,350
caso solo tenía un método, por lo que
necesariamente era el que estaba

40
00:02:08,517 --> 00:02:12,290
llamado aquí, tengo varios de ellos

41
00:02:12,457 --> 00:02:16,050
Este método, NextInteger, esta
definido

42
00:02:16,217 --> 00:02:19,510
en NumberParser, pero también
esta definido en XMLInteger.

43
00:02:20,900 --> 00:02:24,420
XMLInteger esta incluso definido
en dos clases 

44
00:02:24,587 --> 00:02:26,950
diferentes, entonces veo que estos

45
00:02:27,117 --> 00:02:30,000
métodos, estas llamadas, son
llamadas de envío de

46
00:02:30,167 --> 00:02:34,030
mensajes y que se resolverán
seguramente sobre estos métodos.

47
00:02:34,420 --> 00:02:36,670
Puede ver que
Sender y Implementor son

48
00:02:36,837 --> 00:02:39,650
muy importantes.
Implementor, le permitirá

49
00:02:39,817 --> 00:02:41,710
ver todas las clases del sistema
que implementan un método.

50
00:02:41,877 --> 00:02:45,300
Sender le mostrara todas
las llamadas realizadas a un método.

51
00:02:45,467 --> 00:02:47,840
Entonces los Senders, son
muy importantes porque

52
00:02:48,007 --> 00:02:50,940
le permiten mirar
ejemplos,

53
00:02:51,107 --> 00:02:54,050
le mostrara cómo se invoca un método.

54
00:02:54,520 --> 00:02:56,920
Aquí he seleccionado un método
sin argumento,

55
00:02:57,087 --> 00:02:58,590
pero si hubiera elegido un método con
un argumento,

56
00:02:58,757 --> 00:03:02,650
por ejemplo Number,
NextNumberBase y entonces hago

57
00:03:02,817 --> 00:03:07,470
Sender, ¿Que va a 

58
00:03:07,637 --> 00:03:12,480
Mostrarme? Tengo un argumento,
y veo que es

59
00:03:12,647 --> 00:03:13,280
la base.

60
00:03:13,447 --> 00:03:15,050
Aquí parece que no es
un argumento,

61
00:03:15,217 --> 00:03:18,730
es solo una llamada que pasa un
argumento,

62
00:03:18,897 --> 00:03:22,030
pero en esta prueba aquí,
veo que

63
00:03:22,420 --> 00:03:27,340
si instancío
NumberParser en Stream,

64
00:03:28,340 --> 00:03:30,550
y que luego envío el mensaje
NextNumberBase

65
00:03:30,717 --> 00:03:32,930
y el argumento 10.

66
00:03:33,097 --> 00:03:35,030
Esto me permite comprender,
ah si, es así como

67
00:03:35,197 --> 00:03:36,200
debo usar la API.

68
00:03:37,000 --> 00:03:41,210
Se usa tanto dispone de
atajos de teclado.

69
00:03:42,390 --> 00:03:45,800
Nautilus fue diseñado en origen
Para que pueda

70
00:03:46,000 --> 00:03:48,550
hacer todas estas operaciones
sin tocar el mouse.

71
00:03:49,000 --> 00:03:51,260
Observe aquí que B significa
browse.

72
00:03:51,427 --> 00:03:55,890
Entonces haremos browse Sender,
N es para el sender.

73
00:03:56,057 --> 00:03:59,550
busco Implementor, M
es para Implementor.

74
00:04:00,440 --> 00:04:05,260
Si selecciono solo "NextNumber"
por ejemplo,

75
00:04:05,570 --> 00:04:08,780
y busco N, 
obtendré

76
00:04:11,110 --> 00:04:14,330
los Senders de NextNumber.

77
00:04:14,860 --> 00:04:17,740
De la misma manera, si selecciono,
voila, los obtengo

78
00:04:17,907 --> 00:04:19,610
Ahora si quiero obtener los
Implementors Browse M,

79
00:04:20,890 --> 00:04:22,160
Obtengo los implementors.

80
00:04:23,700 --> 00:04:25,650
Es igual sobre las clases,
me gustaría

81
00:04:25,817 --> 00:04:28,030
saber cuales son las otras clases
del sistema que utilizan 

82
00:04:28,197 --> 00:04:30,290
NumberParser.
Para saber esto,

83
00:04:30,457 --> 00:04:34,730
Yo selecciono Analize y
tengo Class

84
00:04:34,897 --> 00:04:39,820
references. Y obtengo todas

85
00:04:40,000 --> 00:04:43,380
las clases. Obtengo todos los métodos
que utilizan

86
00:04:47,300 --> 00:04:49,480
Aquí veo que son principalmente pruebas.

87
00:04:49,740 --> 00:04:53,000
Mira
en ClassInteger, llamo

88
00:05:00,130 --> 00:05:00,763
al Parser.

89
00:05:00,930 --> 00:05:05,440
Aquí, el consejo para entender
com recordar,

90
00:05:06,200 --> 00:05:09,300
el atajo de teclado,
es decirse que aqui es

91
00:05:10,050 --> 00:05:14,550
Browse shift N, es

92
00:05:16,070 --> 00:05:19,250
una mayúscula porque es
como

93
00:05:19,417 --> 00:05:21,700
llamar un método, excepto aquí
queremos

94
00:05:21,867 --> 00:05:24,090
llamar una clase y una clase
es mayor que

95
00:05:24,257 --> 00:05:25,310
un método, entonces tenemos una mayscula.
