El blog del burgués

22 febrero 2011

Usando Threads en C#.NET: BackgroundWorker

Filed under: C# — elburgues @ 1:21 AM

Desarrollando aplicaciones muchas veces habremos tenido la necesidad de realizar una operación que potencialmente puede llevar unos cuantos segundos, incluso minutos. El problema que presenta esta situación es que si realizamos dicha operación en el hilo principal de nuestra aplicación, aunque sea por unos pocos segundos, la interfaz de nuestra aplicación deja de responder a nuestros movimientos con el ratón y/o el teclado, dando la sensación de que la aplicación se ha quedado bloqueada (aunque realmente no sea así), provocando incertidumbre e insatisfacción en el usuario. Lo deseable en estos casos sería realizar dicha tarea en un segundo hilo de trabajo e ir obteniendo información acerca del estado de la operación en la interfaz gráfica del programa. Sería deseable también tener la posibilidad de cancelar la tarea en cualquier momento, así como también tener la posibilidad de seguir interactuando con nuestra aplicación hasta que la operación en un segundo plano termine y nos ofrezca los resultados. (more…)

Anuncios

21 febrero 2011

Inyección de dependencias

Filed under: C#,CAB,SCSF — elburgues @ 8:04 PM

La inyección de dependencias es cuando una clase principal hace uso de una clase secundaria sin hacer referencia directa a ella. Alguna entidad externa proveerá la clase secundaria a la clase principal en tiempo de ejecución, inyectará la dependencia. Para ser útil, la clase secundaria deberá implementar una interfaz que la clase principal conocerá. El objetivo de esto es permitir cambiar el comportamiento de nuestra estructura de clases, cambiar que clase secundaria es inyectada a la clase principal. Como la clase principal no tiene una dependencia directa con ninguna clase secundaria, esto puede ser decidido en tiempo de ejecución. Esta es precisamente la diferencia entre la inyección de dependencias y el patrón strategy. De esta manera, el código se vuelve flexible, desacoplado y fácil de modificar. (more…)

14 febrero 2011

Inversión de Control (IoC)

Filed under: C#,CAB,SCSF — elburgues @ 8:20 PM

Normalmente, para reutilizar código fuente de alguien, se debe llamar a una librería. Es lo que estamos haciendo cuando usamos .NET framework. Por ejemplo, cuando llamas a Console.WriteLine(“bla bla…”), estás usando código fuente que ha escrito alguien, tu haces la llamada, por lo tanto, tu tienes el control. Sin embargo, hay veces que es .Net framework el que reutiliza código fuente escrito por ti. Por ejemplo, cuando escribes un algoritmo de ordenación de números enteros usando la interfaz IComparable. En ese caso la dirección del control está invertida, alguien está llamando a tu código en vez de ser tu el que llama al código de alguien. Eso es la inversión de control (IoC). (more…)

12 septiembre 2010

Separar la implementación de la interfaz

Filed under: C# — elburgues @ 8:30 AM

Comprando un ratón usb, da igual la marca, uno espera poder conectarlo en cualquier ordenador, ya que ambos se comunican a través de una interfaz bien definida (USB). Otra cosa son los detalles de implementación física del ratón. Se trata de lograr algo así en desarrollo de software, a través de las interfaces. Una interfaz provee la definición abstracta de un servicio entre clientes y servidores. Cada servidor es libre de proveer su propia interpretación de esa interfaz. La interfaz es implementada por un componente binario de caja negra que encapsula completamente su interior. Este principio es el de la separación de interfaz e implementación y contrasta con la orientación a objetos, en la que el objeto en sí es el centro de atención.

En la programación orientada a componentes, la unidad fundamental de reutilización es la interfaz, para usar un componente, el cliente lo único que necesita conocer es la definición de la interfaz y ser capaz de tener acceso al componente binario que implementa esa interfaz. Veamos un ejemplo:

ClassDiagram

Todo lo que el cliente tiene que hacer es instanciar una clase que soporte la interfaz y asignar el objeto a una variable de la interfaz:

IMiInterfaz objeto;  
objeto = new MiClase();   
objeto.Metodo1();

Si cambia la implementación en MiClase, el cliente no tiene porqué enterarse. Además, en el ejemplo, esto también es posible:

IMiInterfaz objeto;
objeto = new MiOtraClase();
objeto.Metodo1();

De esta manera tenemos acceso a la interpretación que MiOtraClase de para la interfaz. En el ejemplo, IMiInterfaz sería como la interfaz USB, en dónde cada ratón (MiClase, MiOtraClase), cumplen con ella (la implementan), pudiendo tener cada objeto ratón sus peculiaridades de diseño (color, tamaño etc, eso ya depende de cómo definas cada una de las clases). Sin embargo, .NET también te deja hacer esto:

MiClase objeto;
objeto = new MiClase();
objeto.Metodo1();

en donde se está accediendo directamente a la clase que provee el servicio, en vez de hacerlo a través de la interfaz. O sea, que .NET no te obliga a cumplir con este principio a la hora de programar, siendo así accesible también a todos aquellos programadores que no están acostumbrados a usar los conceptos abstractos de la programación orientada a interfaces, pero que sepáis que los desarrolladores .NET disciplinados siempre deberían forzar la separación en sus desarrollos para obtener los beneficios de la programación orientada a componentes.

26 mayo 2010

Manejo de Excepciones en los hilos

Filed under: C# — elburgues @ 12:06 AM
Tags:
Consideremos el siguiente programa: (more…)

14 abril 2010

Marcado de privilegios con un manifiesto

Filed under: C# — elburgues @ 6:59 AM

Recientemente me he topado con un problema y me ha parecido interesante publicar cómo se ha resuelto. Se trataba de probar el comportamiento bajo windows 7 de una aplicación .NET desarrollada bajo windows xp. (more…)

7 abril 2010

Documentos xml y firmas digitales

Filed under: C# — elburgues @ 7:23 AM

Se puede firmar y comprobar la firma de un documento XML o de parte de un documento XML con una firma digital. Las firmas digitales XML (XMLDSIG) permiten comprobar que no se modificaron los datos después de la firma. (more…)

6 abril 2010

Firmas Digitales con .NET

Filed under: C# — elburgues @ 7:28 AM

Los algoritmos asimétricos que adicionalmente tienen funciones de firma y verificación de firmas son los llamados algoritmos de firmas digitales. Lo que hacen es, a partir de un mensaje dado, crear un conjunto de datos adicionales (la firma), la cual es enviada junto con el mensaje a transmitir. (more…)

19 marzo 2010

Funciones variadic

Filed under: C# — elburgues @ 8:21 AM
Tags:

La primera vez que escribí una entrada en un blog, no lo hice en  el mío, sino en el de un compañero de trabajo, que fue quien realmente me introdujo en este divertido mundo del posteo. Él me ofreció la posibilidad de replicar de nuevo aquél artículo en mi blog y así lo he hecho. Gracias compañero. (more…)

Códigos Hash en .NET Framework

Filed under: C# — elburgues @ 7:31 AM

Un código hash es un valor numérico de longitud fija que representa o identifica unívocamente una cantidad de datos mayor, siendo el código hash un valor numérico mucho menor (bueno, digo unívocamente pero, para ser exactos, es mejor decir que técnicamente es poco factible encontrar dos mensajes distintos cuyo valor hash sea el mismo). O sea que, un algoritmo hash es un procedimiento matemático bien determinado que representa una cantidad (potencialmente) grande de datos mediante un entero mucho menor. (more…)

Página siguiente »

Blog de WordPress.com.