WEBVTT

00:00:01.140 --> 00:00:05.200 align:middle
En este video, me gustaría
mostrarle los

00:00:05.560 --> 00:00:09.520 align:middle
análisis avanzados de código
que puede hacer con Nautilus.

00:00:10.260 --> 00:00:13.220 align:middle
Entonces abramos Nautilus.
Consideramos por ejemplo

00:00:13.387 --> 00:00:14.670 align:middle
una clase simple, NumberParser.

00:00:15.880 --> 00:00:19.090 align:middle
Ahora miramos lo que

00:00:19.257 --> 00:00:20.170 align:middle
llamamos Senders y
los Implementers

00:00:20.337 --> 00:00:24.640 align:middle
A menudo, comprobamos si alguien
habla con fluidez en Pharo cuando

00:00:24.807 --> 00:00:27.350 align:middle
ha entendido cómo
usar Senders y Implementers

00:00:27.517 --> 00:00:29.790 align:middle
para encontrar información.
Echemos un vistazo: cuando

00:00:29.957 --> 00:00:31.770 align:middle
considero un método,
Me gustaría saber quien

00:00:31.937 --> 00:00:33.620 align:middle
llama a este método,
¿qué voy ha hacer?

00:00:34.080 --> 00:00:35.030 align:middle
Utilizaré Senders Of.

00:00:36.680 --> 00:00:41.260 align:middle
¿Qué obtendré con Senders Of?

00:00:41.427 --> 00:00:43.230 align:middle
Solo tengo un método

00:00:43.397 --> 00:00:45.920 align:middle
que llama a los Senders
Of, se llama

00:00:46.270 --> 00:00:50.560 align:middle
ReadExponent y llama
ExponentLetters.

00:00:52.710 --> 00:00:54.310 align:middle
Es una información interesante.

00:00:54.610 --> 00:00:56.810 align:middle
Ahora imaginemos que voy
al protocolo

00:00:57.000 --> 00:01:01.830 align:middle
publico, elijo
NextInteger. Si pregunto a los Senders,

00:01:03.140 --> 00:01:07.710 align:middle
obtendré esta

00:01:08.420 --> 00:01:09.740 align:middle
lista de Senders potenciales

00:01:10.810 --> 00:01:14.910 align:middle
De hecho, son todos los lugares
que envían el mensaje NextInteger.

00:01:15.370 --> 00:01:17.310 align:middle
Aquí veo que estoy en 
la clase

00:01:17.477 --> 00:01:20.590 align:middle
NumberParser y que llamo
a self.

00:01:21.600 --> 00:01:24.180 align:middle
Pues utilizo self para 
hacer una llamada y sera

00:01:24.347 --> 00:01:25.730 align:middle
necesariamente el método que tengo aquí

00:01:26.740 --> 00:01:30.720 align:middle
Ahora, en los paquetes
o en la clase XML, no se muestra

00:01:30.887 --> 00:01:33.360 align:middle
porque necesariamente no lo conoce,
al ser Pharo

00:01:33.527 --> 00:01:36.370 align:middle
un lenguaje no tipado,
No estoy seguro

00:01:36.537 --> 00:01:40.060 align:middle
si este es el método en cuestión.

00:01:40.227 --> 00:01:44.020 align:middle
De hecho, el sistema muestra
que un mensaje

00:01:44.187 --> 00:01:46.010 align:middle
con el mismo nombre ha sido enviado.

00:01:46.720 --> 00:01:49.000 align:middle
Para comprobar esto,
puedo, por ejemplo

00:01:49.167 --> 00:01:51.520 align:middle
podria preguntarme,
digamos que me gustaría saber

00:01:51.950 --> 00:01:56.090 align:middle
¿cuáles son los implementadores,
cuantas veces este

00:01:56.257 --> 00:01:57.650 align:middle
método esta implementado en el
sistema.

00:01:57.817 --> 00:02:00.870 align:middle
Para hacer esto, seleccionaré
Implementors Of.

00:02:02.520 --> 00:02:05.930 align:middle
Implementors Of. Ah bah
mira, mientras en el otro

00:02:06.097 --> 00:02:08.350 align:middle
caso solo tenía un método, por lo que
necesariamente era el que estaba

00:02:08.517 --> 00:02:12.290 align:middle
llamado aquí, tengo varios de ellos

00:02:12.457 --> 00:02:16.050 align:middle
Este método, NextInteger, esta
definido

00:02:16.217 --> 00:02:19.510 align:middle
en NumberParser, pero también
esta definido en XMLInteger.

00:02:20.900 --> 00:02:24.420 align:middle
XMLInteger esta incluso definido
en dos clases 

00:02:24.587 --> 00:02:26.950 align:middle
diferentes, entonces veo que estos

00:02:27.117 --> 00:02:30.000 align:middle
métodos, estas llamadas, son
llamadas de envío de

00:02:30.167 --> 00:02:34.030 align:middle
mensajes y que se resolverán
seguramente sobre estos métodos.

00:02:34.420 --> 00:02:36.670 align:middle
Puede ver que
Sender y Implementor son

00:02:36.837 --> 00:02:39.650 align:middle
muy importantes.
Implementor, le permitirá

00:02:39.817 --> 00:02:41.710 align:middle
ver todas las clases del sistema
que implementan un método.

00:02:41.877 --> 00:02:45.300 align:middle
Sender le mostrara todas
las llamadas realizadas a un método.

00:02:45.467 --> 00:02:47.840 align:middle
Entonces los Senders, son
muy importantes porque

00:02:48.007 --> 00:02:50.940 align:middle
le permiten mirar
ejemplos,

00:02:51.107 --> 00:02:54.050 align:middle
le mostrara cómo se invoca un método.

00:02:54.520 --> 00:02:56.920 align:middle
Aquí he seleccionado un método
sin argumento,

00:02:57.087 --> 00:02:58.590 align:middle
pero si hubiera elegido un método con
un argumento,

00:02:58.757 --> 00:03:02.650 align:middle
por ejemplo Number,
NextNumberBase y entonces hago

00:03:02.817 --> 00:03:07.470 align:middle
Sender, ¿Que va a 

00:03:07.637 --> 00:03:12.480 align:middle
Mostrarme? Tengo un argumento,
y veo que es

00:03:12.647 --> 00:03:13.280 align:middle
la base.

00:03:13.447 --> 00:03:15.050 align:middle
Aquí parece que no es
un argumento,

00:03:15.217 --> 00:03:18.730 align:middle
es solo una llamada que pasa un
argumento,

00:03:18.897 --> 00:03:22.030 align:middle
pero en esta prueba aquí,
veo que

00:03:22.420 --> 00:03:27.340 align:middle
si instancío
NumberParser en Stream,

00:03:28.340 --> 00:03:30.550 align:middle
y que luego envío el mensaje
NextNumberBase

00:03:30.717 --> 00:03:32.930 align:middle
y el argumento 10.

00:03:33.097 --> 00:03:35.030 align:middle
Esto me permite comprender,
ah si, es así como

00:03:35.197 --> 00:03:36.200 align:middle
debo usar la API.

00:03:37.000 --> 00:03:41.210 align:middle
Se usa tanto dispone de
atajos de teclado.

00:03:42.390 --> 00:03:45.800 align:middle
Nautilus fue diseñado en origen
Para que pueda

00:03:46.000 --> 00:03:48.550 align:middle
hacer todas estas operaciones
sin tocar el mouse.

00:03:49.000 --> 00:03:51.260 align:middle
Observe aquí que B significa
browse.

00:03:51.427 --> 00:03:55.890 align:middle
Entonces haremos browse Sender,
N es para el sender.

00:03:56.057 --> 00:03:59.550 align:middle
busco Implementor, M
es para Implementor.

00:04:00.440 --> 00:04:05.260 align:middle
Si selecciono solo "NextNumber"
por ejemplo,

00:04:05.570 --> 00:04:08.780 align:middle
y busco N, 
obtendré

00:04:11.110 --> 00:04:14.330 align:middle
los Senders de NextNumber.

00:04:14.860 --> 00:04:17.740 align:middle
De la misma manera, si selecciono,
voila, los obtengo

00:04:17.907 --> 00:04:19.610 align:middle
Ahora si quiero obtener los
Implementors Browse M,

00:04:20.890 --> 00:04:22.160 align:middle
Obtengo los implementors.

00:04:23.700 --> 00:04:25.650 align:middle
Es igual sobre las clases,
me gustaría

00:04:25.817 --> 00:04:28.030 align:middle
saber cuales son las otras clases
del sistema que utilizan 

00:04:28.197 --> 00:04:30.290 align:middle
NumberParser.
Para saber esto,

00:04:30.457 --> 00:04:34.730 align:middle
Yo selecciono Analize y
tengo Class

00:04:34.897 --> 00:04:39.820 align:middle
references. Y obtengo todas

00:04:40.000 --> 00:04:43.380 align:middle
las clases. Obtengo todos los métodos
que utilizan

00:04:47.300 --> 00:04:49.480 align:middle
Aquí veo que son principalmente pruebas.

00:04:49.740 --> 00:04:53.000 align:middle
Mira
en ClassInteger, llamo

00:05:00.130 --> 00:05:00.763 align:middle
al Parser.

00:05:00.930 --> 00:05:05.440 align:middle
Aquí, el consejo para entender
com recordar,

00:05:06.200 --> 00:05:09.300 align:middle
el atajo de teclado,
es decirse que aqui es

00:05:10.050 --> 00:05:14.550 align:middle
Browse shift N, es

00:05:16.070 --> 00:05:19.250 align:middle
una mayúscula porque es
como

00:05:19.417 --> 00:05:21.700 align:middle
llamar un método, excepto aquí
queremos

00:05:21.867 --> 00:05:24.090 align:middle
llamar una clase y una clase
es mayor que

00:05:24.257 --> 00:05:25.310 align:middle
un método, entonces tenemos una mayscula.

