El blog del burgués

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.

Anuncios

Dejar un comentario »

Aún no hay comentarios.

RSS feed for comments on this post.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Crea un blog o un sitio web gratuitos con WordPress.com.

A %d blogueros les gusta esto: