sábado, 27 de julio de 2013

Delegados o criptografía

Delegados ¿¿¿¿???

Es curioso lo criptográficas que llegan a ser la explicación de algunos conceptos, por ejemplo el concepto de delegado, que está vinculado al de evento. Si buscas información encontraras una y otra vez las siguientes descripciones "firma de un evento", "puntero a una función", y ponen ejemplos que no se entienden un carajo, están escritos para listos, de hecho muchas veces parece que esté escrito a propósito para que no se entienda y así le da más glamour al concepto.

Microsoft no es una excepción en este caso, en realidad la msdn muchas veces deja que desear, dando explicaciones muy teóricas pero sin exponer ejemplos claros (http://msdn.microsoft.com/es-es/library/system.delegate(v=vs.80).aspx) , ves el ejemplo y piensas, "pero que carajos están haciendo...", al final lo que se acaba interpretando (al menos los normalitos) es que para llamar a una función se están complicando la vida, para hacer una analogía da a entender que si un tío que está en Pamplona tiene sed, se va a San Sebastián y pide agua.

Después lees muchos otros post donde remarcan "firma del evento...el controlador de evento clic responde a la firma del delegado de un evento..." y otras frases tecnicistas que no explican nada.

Pués bien, al final si ves el vídeo del link que dejo a continuación, sí que se entiende. La explicación más apropiada, comprensible y fácil para un delegado que se me ocurre es que en el contexto de ejecución de dos objetos (por ejemplo dos formularios winforms) y también por ejemplo en el contexto de los threads, con los delegados se consigue COMUNICACIÓN entre los mismo.

En el video se ve claro que dado dos forms (form1 y form2) el form2 podrá enviarle notificaciones al form2 pasándole argumentos, es decir que form2 puede llamar a funciones de form1 aunque ni siquera sepa que existe. Esto es aplicable a N forms o Threads.

Ahí va el link http://www.youtube.com/watch?v=gRSc6PPNjvk

Hasta otra

2 comentarios:

  1. Yo lo entiendo mejor en el contexto del patrón "observer" (http://en.wikipedia.org/wiki/Observer_pattern)

    Un delegado (según parece en C#) es la interfaz que tienen los métodos observadores, los que estarán suscritos a las notificaciones del objeto observado.

    En C# se necesitan delegados para asegurar que todos los métodos observadores tienen los mismos parámetros, porque en C# el tipado es estático.

    En Ruby no hacen falta delegados porque el tipado es dinámico, es decir, se confía en la profesionalidad del programador y a cambio se le da más libertad.

    Se entiende? :)

    ResponderEliminar
  2. Sí, técnicamente es una muy buena explicación, pero la mía está más orientada a "dummies"

    ResponderEliminar