09
May
13

Interface (Patrón de diseño)

Una interfaz se define como una “Conexión física y funcional entre dos aparatos o sistemas independientes” [Rae 2013], esta describe las operaciones (la cara al mundo) que una entidad puede realizar, de igual manera establece los limites, niveles de acceso y la manera en que se desarrolla la comunicación entre dos entidades, para nuestro caso caso dos piezas de software. Por lo general, se refiere a una abstracción que proporciona un activo de sí mismo a la parte exterior.

 

La idea principal de una interfaz es separar las funciones (firma de métodos) de las implementaciones (cuerpo del método) . Cualquier solicitud que coincida con la firma de la interfaz de un objeto también puede ser enviada a ese objeto, independientemente de su aplicación. Restando importancia a cual clase realiza la implementación y responda el llamado ya que el llamado se hace sobre la interfaz, brindando la capacidad de poder intercambiar fácilmente la clase que implementa la interfaz sin modificar el código donde se hace el llamado a dicha interfaz.

 

 

El concepto de una interfaz es fundamental en la mayoría de los lenguajes de programación orientados a objetos. En algunos, los objetos son conocidos sólo a través de sus interfaces de modo que no hay manera de acceder a un objeto sin tener que ir a través de su interfaz.

 

Los usos más comunes para las interfaces son:

  • Deseamos describir la el protocolo de comunicación de una clase fuera de su paquete.
  • Se debe cambiar la implementación de una funcionalidad en tiempo de ejecución.
  • Durante el diseño desconocemos cual será la implementación que se usará en tiempo de compilación.

 
Interfaces.java

package ingenio.ds.examples.patrones;

/*definición de la interfaz mensajero*/
interface Mensajero{
	/*definición del método enviar*/
	public void enviar(String titulo,String mensaje);
}

Clases.java

package ingenio.ds.examples.patrones;
import javax.swing.JOptionPane;

class Consola implements Mensajero{
	public void enviar(String titulo,String mensaje){
		System.out.println("Log : "+mensaje);
	}
}

class Popup implements Mensajero{
	public void enviar(String titulo,String mensaje){
		JOptionPane.showMessageDialog(null,
									 mensaje,
									 titulo,
									 JOptionPane.INFORMATION_MESSAGE);
	}
}

Main.java

package ingenio.ds.examples.patrones;

public class Main {
	/*describe el tipo de mensaje que usaremos*/
	public static String TIPO_MENSAJE="CONSOLA";
	public static void main(String argumentos[]){
		/*en este punto no conocemos la implementación que se usará para enviar el mensaje*/
		Mensajero mensajero=getMensajero();
		/*llamamos el método enviar */
		mensajero.enviar("Hola","Iniciar envio de mensaje");
		mensajero=getMensajero();
		mensajero.enviar("Hola","Patrón interface");
		mensajero=getMensajero();
		mensajero.enviar("Hola","Cerrar envio de mensaje");
	}

	public static Mensajero getMensajero(){
		/*dependiendo del 'contexto' retornará el mensajero necesario*/
		Mensajero mensajero=null;
		if(TIPO_MENSAJE=="CONSOLA"){
			mensajero=new Consola();
			TIPO_MENSAJE="POPUP";
		}else{
			mensajero=new Popup();
			TIPO_MENSAJE="CONSOLA";
		}
		return mensajero;
	}
}

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


I+Ds

Dudas consultas
Facebook
Twiter
Google +

Escribe tu dirección de correo electrónico para suscribirte a este blog, y recibir notificaciones de nuevas publicaciones por correo.

Únete a otros 348 seguidores

Ingenio DS en Facebook

Redes Sociales y Archivos

Entradas

mayo 2013
L M X J V S D
« Abr   Sep »
 12345
6789101112
13141516171819
20212223242526
2728293031  

IngenioDS en twiter


A %d blogueros les gusta esto: