En esta sesión, Me gustaría mostrarle cómo
usar el depurador para programar diferentemente.
Vamos a implementar de nuevo la aplicación de contador
pero de una manera diferente, con un Flujo de desarrollo más interactivo.
Primero voy a crear
un nuevo paquete con contador, como anteriormente.
También filtraré para tener menos elementos
En MyCounter, primero defino
una prueba, una clase de prueba.
Las clases de prueba heredan de TestCase.
Lo llamaré CounterTest.
Compilaré. Lo hago una vez más en el menú y luego
Lo hago con los comentarios.
Ha creado una clase de prueba.
En mi clase de prueba, escribo un método de prueba
Los métodos de prueba comienzan con la prueba test.
¿Qué debo hacer?
Como anteriormente, defino una variable local. En
esa variable local Puse un
objeto de la clase contador.
Inicializo el valor del contador y
verifica que el contador tiene el valor correcto
Compilo
Ahora el sistema me dice: "¡Advertencia! No lo sé
qué es un contador". Ya estaba indicado
con la cursiva aquí.
Propone:"¿Quieres definir una nueva clase
¿Una nueva variable global o de clase?
En éste caso es una nueva clase.
Ofrece la definición de clase.
Yo digo:"ok, es correcto, es en el paquete correcto, hereda
desde el objeto, de acuerdo, hazlo".
Entonces crea una clase vacía.
Ahora vamos a arreglar esto.
Puedo ver que mi clase de contador esta vacia.
Si ejecuto mi prueba, esta en rojo.
¿Por qué esta en rojo?
Porque tengo un error.
Entonces, ¿cómo debería leer este mensaje?
Tomemos 2 minutos para hacerlo.
El sistema dice:"el mensaje Count ha sido enviado a
una instancia de la clase Counter y el correspondiente
el método no se encontró ". Voy a buscar…
Abro el depurador
El depurador muestra la pila de ejecución, para que pueda
ver que un mensaje no ha sido entendido.
Y allí muestra dónde ha sido invocado el mensaje.
Veo que si voy allí, Puedo ver las
variables del sistema Si miro en C, puedo acceder
a la variable temporal C, que Se valora como contador.
De todos modos, si escribo clase C por ejemplo,
self class, dice que es la clase Contador
Esto es obvio. Por el momento, en mi clase, no tengo ningún
método. Pediré al sistema que cree uno por mi
Hago Create
Propone las clases.
Yo elijo la class Counter.
¿Puede crear esto?
Sí, en el acceso.
Y, finalmente, ¿qué hizo él?
Se compiló automáticamente un método con la firma correcta
Para el cuerpo del método, no saber qué hacer,
por lo que usa ShouldBeImplemented. ¿Qué hace eso?
Lanza una excepción en la ejecución y el sistema
ejecute de nuevo el método.
Ahora hay un nuevo error y Tengo que
implementar el cuerpo del método.
Conozco Count ¿Que voy a hacer?
Quiero asignar este valor a una
variable de instancia. Asi aqui
está en rojo, porque por el momento mi clase no tiene esta instancia.
Compilo
El sistema propone: "¿Quieres una variable temporal?
o una variable de instancia? "
Quiero una variable de instancia.
Entonces hago esto. Si miro en mi clase, tengo
una variable de instancia que fue creada y
el método que
establecerá el valor.
Una vez que hice esto, puedo decir al depurador
que continue, continuar significa continuar la ejecución
como si nada hubiera pasado
¿Qué pasa?
Todavía hay un error.
El sistema todavía dice que hay una instancia
de la clase Counter que recibió el mensaje count y que
no ha encontrado el método apropiado. Esto es normal porque
C tiene 7
en su contador, en su variable de conteo, sin embargo
el método count no existe.
Lo voy a crear.
Haré Create. ¿En que clase?
En la clase Counter, en el protocolo de acceso,
porque es un método de acceso. Y aqui usted puede
ver que el sistema es más inteligente.
Se dio cuenta de que había una variable de instancia nombrada
count y quiere definir un método nombrado count,
así que vamos a proponerle un método de acceso.
Eso es lo que quería.
Entonces ahora puedo proceder.
¿Que es lo que veo?
Mi prueba está en verde. Tengo una prueba en verde y
se han creado 2 métodos. en mi clase.
Ahora haré lo mismo para el incremento
De hecho, estoy
especificando qué es lo que el método tiene qué hacer
y verificando que lo hace.
Entonces, debo tener 9, Compilo, ejecuto.
Y el sistema me dice que no conoce el método increment.
Sí, es normal. Hago Create, aquí en funcionamiento
Si miro el incremento, Puedo poner: count
= count + 1. compilo
Procedeo. Tengo mi prueba
Mientras estoy en eso, creo decrement.
La idea es que lo haga, para practicarlo
Entonces aquí será 5. Defino mi prueba
Yo creo mi método.
De acuerdo. Entonces, ya sabe, contar:= contar,
Compilo en el depurador.
Hago clic en Proceed. Y mis pruebas están en verde.
Ahora mi clase tiene 2 operaciones: increment y decrement.
Es hora de guardar, por ejemplo.
Voy a guardar como se lo mostré antes.
Hago clic en Save, guardo y
aquí escribo "con
accesores y decremento, incremento cubierto por pruebas en verde ".
¡Asi que aqui esta! He guardado eso
Todo bien.
Lo importante para recordar en esta sesión es eso
el depurador da acceso al estado de los objetos,
lo ubica en el contexto de llamada correcta y
le permite usar el contexto de llamada para tener toda la información
necesaria para escribir su codigo.
Y esto es realmente muy, muy poderoso.