Inicio Foro Noticias Retos Articulos Grupos iHackerss Mapa Creditos Youtube
foros de discusión

Welcome Guest ( Log In | Register )

 
Reply to this topicStart new topic
> Haciendo Callbacks en Java
benek
post Aug 29 2007, 11:52 AM
Post #1


Kid A!
*****


Group: Hackerss Member
Posts: 1,341
Joined: 22-March 06
From: .mx
Member No.: 6



Bien ahora que tengo un poco de tiempo describiré que es y como funciona un Callback, que en pocas palabras es una técnica que consiste en crear un objeto y que el objeto creado obtenga una referencia de quien lo instanció y pueda enviarle una respuesta.

Más fácil, los callbacks permiten a un objeto A asignar una tarea a un objeto B, es entonces cuando el objeto B puede notificar al objeto A (de manera asincrónica) cuando la tarea es completada.

Con esto separamos muy bien las responsabilidades entre objetos y mejoramos el uso de recursos smile.gif

Tenemos pues dos clases A y B (Cliente.java y Lanza.java):

Clase A - Cliente.java
CODE
package hss;

public class Cliente {
    
    Cliente(){
        Lanza lanza = new Lanza(this, 8);
        lanza.run();
    }
    
    public static void main(String args[]){
        new Cliente();
    }
    
    public void lanzada(){
        System.out.println("Lanzada!!!");
    }

}


Clase B - Lanza.java
CODE
package hss;

public class Lanza {
    
    int intervalo;
    Cliente cliente;
    
    Lanza(Cliente cliente, int intervalo){
        this.intervalo = intervalo;
        this.cliente = cliente;
    }
    
    void run(){
        for (int i = 0; i < intervalo; i++){
            cliente.lanzada();
        }
    }

}


Voy a explicarlo como si corriera en modo de debug, es decir tal cual es el flujo del programa.

Cliente.java - Método main()
CODE
    public static void main(String args[]){
        new Cliente();
    }


El método main por default es el primer método invocado, y crea una nueva instancia de la clase Cliente (crea una instancia de la misma clase en la que está)

Cliente.java - Constructor default
CODE
    Cliente(){
        Lanza lanza = new Lanza(this, 8);


Al ser instanciada la clase Cliente, el constructor por default es ejecutado, quien a su vez crea una nueva instancia de la clase Lanza y de nombre 'lanza', a quien le manda como parámetros 'this' (que es nuestro objeto Client actual, es como si se enviara él mismo) y un entero (8).

Lanza.java - Constructor que recibe Cliente y entero
CODE
    Lanza(Cliente cliente, int intervalo){
        this.intervalo = intervalo;
        this.cliente = cliente;
    }


El constructor de Lanza es ejecutado, recibe el objeto Cliente enviado con 'this' desde el objeto Client y el número entero, luego los copia a el 'Cliente' e 'intervalo' locales.

Cliente.java - Constructor default
CODE
        lanza.run();


la ejecución regresa al objeto Cliente y continúa con la siguiente línea en donde ejecuta el método run() del objeto lanza instanciado.

Lanza.java - Método run()
CODE
    void run(){
        for (int i = 0; i < intervalo; i++){
            cliente.lanzada();
        }
    }


Se ejecuta el método run() y tomamos la variable 'intervalo' que ya había guardado el constructor para iterar el número de veces que le dijimos.

Cliente.java - Método lanzada()
CODE
    public void lanzada(){
        System.out.println("Lanzada!!!");
    }


En cada iteración utilizamos el objeto Cliente que recibió el constructor para lanzar su método 'lanzada()' y reportar a Cliente que Lanza hizo ya lo que tenía que hacer, es aqui donde se realiza el Callback desde la clase instanciada hacia la clase que la instanció smile.gif

:::

Como verán, es un poco enredoso el seguimiento de un Callback, pero les sugiero que prueben el código en modo de debug en su IDE preferido para que lo vean correr paso a paso tongue.gif

Espero que esta técnica les sea de utilidad, saludos!


--------------------
Go to the top of the page
 
+Quote Post
Blako
post Aug 29 2007, 12:15 PM
Post #2


Forista
****


Group: Hackerss Member
Posts: 240
Joined: 22-February 07
From: Somewhere
Member No.: 1,873



Hey muy interesante, todavia no aprendo Callbacks!!

Pero suena muy interesante!!

Gracias por la info!! happy.gif

Solo una pregunta,, Podrias espesificar ke es el paquete hss ???

This post has been edited by zuportkl1: Aug 29 2007, 12:18 PM


--------------------
<<<<Disappear - Be Free>>>>
Go to the top of the page
 
+Quote Post
Soul Lost
post Aug 30 2007, 10:08 PM
Post #3


Un poco Geek
******


Group: Hackerss Member
Posts: 1,637
Joined: 22-March 06
From: UnderHouse
Member No.: 8



QUOTE(zuportkl1 @ Aug 29 2007, 01:15 PM) [snapback]42836[/snapback]
Solo una pregunta,, Podrias espesificar ke es el paquete hss ???


laugh.gif laugh.gif laugh.gif

El paquete hss es el nombre del paquete de un proyecto en java (seguramente que creó benek x_D) donde se encuentra un conjunto de clases (donde el directorio que las contienen, tiene el mismo nombre de paquete mismo)..

This post has been edited by Soul Lost: Aug 30 2007, 10:10 PM


--------------------
Siempre hay algo nuevo que aprender

Nuevo blog: www.soullost.org

Guías,Tutoritales,Howtos,Articulos. Bajo Licencia: CreativeCommons
Go to the top of the page
 
+Quote Post
marioly
post Aug 30 2007, 11:02 PM
Post #4


Regia
Group Icon


Group: Root Admin
Posts: 2,380
Joined: 14-April 06
From: Mty, Nuevo Leon
Member No.: 38



QUOTE(zuportkl1 @ Aug 29 2007, 01:15 PM) [snapback]42836[/snapback]
Hey muy interesante, todavia no aprendo Callbacks!!

Pero suena muy interesante!!

Gracias por la info!! happy.gif

Solo una pregunta,, Podrias espesificar ke es el paquete hss ???


El paquete hss es.., por que benek ya se aburrio de poner lol xD , como dijo Soul Lost, es el nombre del paquete, el pakage tu lo nombras y defines, es el conjunto de tus clases, solo lo nombro asi porque es un ejemplo para el foro.


--------------------
Go to the top of the page
 
+Quote Post
benek
post Aug 31 2007, 05:27 PM
Post #5


Kid A!
*****


Group: Hackerss Member
Posts: 1,341
Joined: 22-March 06
From: .mx
Member No.: 6



QUOTE(marioly @ Aug 31 2007, 12:02 AM) [snapback]43046[/snapback]
El paquete hss es.., por que benek ya se aburrio de poner lol xD , como dijo Soul Lost, es el nombre del paquete, el pakage tu lo nombras y defines, es el conjunto de tus clases, solo lo nombro asi porque es un ejemplo para el foro.


en realidad el paquete 'lol' ya lo tenía ocupado para otra cosa xD


--------------------
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic

 

RSS Lo-Fi Version Time is now: 2nd September 2010 - 10:49 PM