martes, 3 de diciembre de 2013

Buenas! como andan? como habrán leido en la publicación de josé ando medio ocupado, tengo que estudiar para el ingreso a la universidad, pero no puedo con mi genio y tenía que ponerme a hacer algo jajaja.
Hoy traigo un experimento que hice en base a la idea de un BlockClosure (bloque de ejecución diferida) que quería agregar a mi modelo de componentes en php


Bueno la cosa es simple, creo dos clases y hago que una hable con la otra, como si fuesen dos personas.
Sería muy fácil crear dos clases una que llame a la otra y le ejecute una función y que la otra haga lo mismo con la primera.

El problema surge, con la necesidad de hacer que hayan muchas clases que hagan esto, y que además, la clase que responde el mensaje de la primera no sepa realmente qué función es la que está llamando, sino que la clase que envía el primer mensaje le dice a la segunda clase, donde quiere que le responda.

Además por otra parte éste mecanismo trabaja con un bloque de ejecución diferida, de modo tal, que los mensajes no tienen por qué tener una secuencia específica, la idea es que esto funcione en por ejemplo un sensor de temperatura, cuando la temperatura alcanza x valor, la clase que controla el sensor, le avisa a la clase general que se alcanzó el máximo por ejemplo.

Ésto en otros lenguajes es lo que se conoce como eventos, on_change on_maximum por ejemplo, cuando la clase que gestiona el sensor recibe un cambio, puede llamar a la función on_change de la clase o código principal que creó el objeto. y nosotros le podemos decir a esa clase que haga x cosa, o no hacerlo.

Para probar que el blockclosure anda creé dos clases, y las instancié, luego creé una instancia del blockclosure, y le pasé ambas clases especificando a que función quería que llame.
A una clase le llamé alex, y a otra clase le llamé josé, luego obligo a mi primera clase a que le mande un mensaje a la segunda, y este ejemplo está programado para que cuando la segunda clase recibe un mensaje, responda al instante, aunque podrían pasar horas, o lo que fuera, el código no se queda a esperar que llegue un mensaje, la diferencia es que en éste código, puede o no llegar el mensaje, no hace falta que lo sepa, ya que cuando llegue un mensaje se ejecutará la función esa.

el resultado:



aquí les dejo en pastebin el codigo de ejemplo que prueba el block closure

y aquí les dejo el código del block closure también en pastebin.

Saludos!

0 comentarios:

Publicar un comentario