En este video, Me gustaría mostrarte
cómo podemos usar el inspector navegar y
entender el interior de el sistema.
El inspector es como un microscopio
eso nos permitirá ir y explora el interior de
del sistema pero también, como si podríamos enviar sondas
para modificar el sistema Es como si estuviésemos
un biólogo que de hecho está manipulando bacterias y hacerlas reaccionar.
Entonces nos divertiremos explorando que son "Smalltalk globals".
De hecho, este es el espacio de nombre, es decir, el lugar donde
todas las clases de Pharo están almacenadas.
Entonces es un diccionario, el diccionario del sistema es
un diccionario. Lo que es interesante es eso, con el inspector,
de miro al inspector, es
una gran mesa con
valores dentro
Entonces, por ejemplo, si elijo ... No lo sé…
Breakpoint, veo eso en mi mesa que tengo
una clave que contiene al menos un objeto eso contiene
Este objeto, que contiene un clave de valor
¿Qué es interesante con el inspector es eso
aquí, por ejemplo, veo que en el elemento 2
En la mesa, ¿qué tengo?
Tengo lo que llamamos una variable global
Entonces, una variable global, ¿qué ¿Lo es?
Es un objeto compuesto por una clave y un valor
La clave, si hago clic en ella, ver
que es un ByteSymbol que representa el nombre y si
Retrocedo y miro la
valor, aquí tendré una clase.
Entonces vamos a entrar las clases.
Aquí regreso al principio.
El nuevo inspector Pharo,
llamado GT Inspector, después de los desarrolladores
equipo que lo desarrolló para Pharo, propondrá
pestañas dedicadas
En el diccionario del sistema, qué pestañas específicas
¿Tengo? Tengo la pestaña mostrando los pares
clave / valor para mis clases,
o solo conseguiré las llaves.
Las llaves son un poco menos interesante desde que
solo tendrá los nombres de las clases
en cuestión.
Algo lindo también es que esta
inspector, ves que puedo navegar, eso significa ...
Tomemos un ejemplo ...
He navegado, voy de un objeto a otro por
seleccionando una ruta en el estructura en cuestion
Si considero la clave, por ejemplo, si considero
el valor, aquí obtengo el clase y si en esto
clase, entro en su diccionario de métodos ...
Desde el diccionario de métodos, Podria ir a un
método compilado, etc.
Realmente navego y con esta herramienta, puedo
limitar la vista de lo que quiero para ver o por ejemplo ver todo el flujo.
Pero lo bueno es que Tambien puedo agregar
Una nueva rama en mi flujo.
Eso es lo que vamos a hacer aquí. Entonces imaginemos eso
Minimizo, vuelvo al comienzo.
Aquí, finalmente, imaginemos Me digo a mí mismo:"Soy
interesado por la clase de puntos ".
Sé que normalmente puedo acceso
la clase de punto haciendo "Smalltalk global" en el punto.
Entonces, aquí lo hago y lo digo
ejecútelo y abra un
inspector en el inspector real.
Y aquí, de repente, si nos fijamos en
la navegación, hice una ramificación
entre la navegación que tuve y a quien quiero ir.
Entonces esto es bueno, significa que puedes escribir
muchas expresiones y comienza a navegar.
Entonces, ¿qué vemos?
Vemos la clase de puntos como un objeto.
De hecho, el inspector nos muestra
que hay pestañas específicas a las clases
Entonces aquí, la pestaña "Raw" muestra
nosotros que se define la clase Point en el
Categoría de kernel, tiene una entorno, apunta
el mismo espacio, este es el formato de codificación de
instancias, tiene un diseño.
En resumen, este es el Pharo implementación de lo que es una clase.
Ahora, lo que es realmente bueno con este inspector es
que puedo ver, por ejemplo aquí la definición,
los comentarios y hay otros pestañas como todas las referencias.
Entonces, si hago clic en la referencia, aquí veré
ese punto realmente se usa
en el método @.
Miro una vez más, esta es la cruda
versión de la información que es un objeto que representa
un método y aquí su fuente, así que cada vez que puedo
elige cuál es el mejor
representación para la tarea Estoy haciendo.
Entonces vamos hacia atrás.
Si miro
mi clase, aquí me gustaría para entrar en el diccionario de métodos.
¿Qué es el diccionario de métodos?
Es un diccionario con una clave que es el nombre de la
método y un valor que es un método compilado,
una instancia de CompileMethod. Entonces, si miraba el crudo
aspecto, ves que es un poco más molesto
porque tendría que Entender cómo están
implementó los diccionarios de métodos a fin de que
interactuar con ellos, mientras que aquí No es lo que me interesa,
Quiero ver un método compilado.
Entonces, para ver un método compilado,
Elijo grados por ejemplo, y yo
navegar y, de repente Obtengo un CompileMethod
Un CompileMethod es un objeto que, una vez más,
propone diferentes formas de ser mostrado por el inspector.
Aquí ves un método compilado,
De hecho, este es un marco de datos, una mesa
un poco específico, contiene Bytecode,
y literales Que son los literales
En el código, cada vez tienes
asFloat, arcTan, grados o RadianToDegrees,
Necesita ser almacenado en alguna parte.
Se almacena aquí, ya ves, al principio
del método compilado
¿Qué hace el Bytecode?
Se refiere a esos objetos
para ponerlos en la pila e invoca los métodos.
Entonces, aquí es lo que podemos Veamos, por ejemplo, si nos fijamos en
la vista, minimizo esto, si miramos el código Bytecode
vista, que hace?
Realiza PushRcvr, por lo que pone 0 en la pila y hacer lo mismo.
¿A que corresponde?
Si miramos un poco de cerca,
Lo muestro dos veces, este modo de visualización es
realmente muy útil, mira lo que podemos hacer:
si ahora quiero ver
la fuente, elijo Bytecode allí y
y fuente aquí, esas expresiones se corresponden entre sí,
mira que se muestra
Entonces esto es genial.
Significa que puedo hacer un empuje de la instancia del receptor
variable 0, puse 0 en la pila
y envío el mensaje igual.
Y aquí, es genial porque medio
que la persona que está haciendo el
el compilador puede ver que el Bytecode Él produjo
corresponde a la estructura del código.
De la misma manera, él puede fácilmente
mira eso... Yo retrocedo ...
Si estoy en la parte superior y hago clic en sí mismo,
aquí obtengo mis 2 compilados métodos
Obtengo mis 2 métodos compilados y de hecho
Me gustaría ver si tengo
un árbol de sintaxis abstracto, un aumento de resumen
sintaxis y la fuente. También puedo explorar dentro.
Aquí, por ejemplo, en mi árbol que puede ser
complicado para este método, si abro todo, puedo ver
que si selecciono el temporal
Hora variable, selecciono
la mordedura del código a la cual se refiere.
Esto también es genial. Una vez más si
Miro esto ... el mensaje que envía igual a X
con 0 como argumento, esto es esta pequeña parte del árbol
correspondiente a esta parte aquí.
El inspector me permite administrar, en
representación textual de árbol por ejemplo,
las selecciones que tengo del árbol nodos
Esto constituye una gran herramienta por ejemplo para ayudar
personas que desarrollan el compilador Pharo.
Puedes encontrar este enfoque. para
cada dominio, incluso para tu objetos de dominio
puedes extender el inspector,
para proponer facetas y vistas que tienen sentido.