Interfase

1 Sinopsis

Permite que una clase exponga sus servicios y datos por medio de un conjunto de definiciones de QUE es lo que proporciona.

2 Contexto

Se tiene un sistema en el cual se procesa la informacion, se captura y se imprime. Se tiene 3 sistemas de computo que procesan, capturan e imprimen respectivamente. Se necesita establecer una relacion cliente-proveedor entre distintos modulos de software. Dicha relacion se establece por medio de interfases.

3 Solucion

Definir una interfase. Codificar todos los modulos relacionados (clientes) alrededor de la interfase (NUNCA con una implementacion) Construir los modulos que cumplen el contrato de la interfase.

4 Consecuencias

Permite comunicar varios modulos entre si a traves de un contrato, que es la interfase. Tecnicas de encapsulamiento se ven beneficiadas. Permite implantar herencia multiple en lenguajes que carecen de ella o es muy caro y/o confuso hacerlo, usando delegacion

5 Ejemplo

Se usa en ambientes como CORBA, J2EE y todo lo que este relacionado con frameworks Se necesita representar en un sistema de computo el concepto de una Cohete, Auto y la combinacion de ambos. El Auto se representa como una interfase, que solo corre


public interface AutoIF  {
    ....
}
See the complete code for AutoIF here.
public void correr(); 

El Cohete se representa como una interfase, que solo vuela


public interface CoheteIF  {
    ....
}
See the complete code for CoheteIF here.
public void volar(); 

Y para unir ambas interfases, se define la interfase CoheteAutoIF


public interface CoheteAutoIF extends CoheteIF,AutoIF  {
    ....
}
See the complete code for CoheteAutoIF here.

Por cada interfase, se proporciona una implementacion


public class Cohete implements CoheteIF  {
    ....
}
See the complete code for Cohete here.
public void volar() { System.out.println("V"); }     

public class Auto implements AutoIF  {
    ....
}
See the complete code for Auto here.
public void correr() { System.out.println("C"); }     

La clase CoheteAuto implementa al CoheteAutoIF, pero utiliza delegacion para implementar los metodos de las interfases CoheteIF y AutoIF


public class CoheteAuto implements CoheteAutoIF  {
    ....
}
See the complete code for CoheteAuto here.
  private Cohete _coh= new Cohete();
  private Auto _aut = new Auto();
  public void correr() { _aut.correr(); }
  public void volar() { _coh.volar();}

Las clases que usan estos modulos, se comunican via las interfases


public class EstacionEspacial  {
    ....
}
See the complete code for EstacionEspacial here.
   public void lanzar(CoheteIF ch) {
     ch.volar();
   }

public class Carretera  {
    ....
}
See the complete code for Carretera here.
public void alojar(AutoIF carro) {
   carro.correr();
}

El diagrama UML es el siguiente: