viernes, 11 de mayo de 2012

Interfaz


¿Que es?

      Una interfaz es una declaración de comportamiento, es decir un conjunto de métodos sin su implementación. Define un protocolo de comportamiento. Es un contrato que publica una clase para ser utilizada por otras clases. Puede heredar de otras interfaces.

Ejemplo en Java:

    
public interface Imprimible {
        
         public void imprimir ();
         public void imprimir (Tamaño t, Estilo e);
      }

Utilizacion:

    
public class Documento implements Imprimible{

         public void imprimir(){
         //Acá va la definición.
         }

         public void imprimir(Tamaño t, Estilo e){
         //Acá va la definición.
         }
      }

Ejemplo de mini programa con interfaces:

public class Aeropuerto {
    
    public void darPermisoDeAterrizaje(Volador v){
        
       /*
       Aca va el codigo de despejar pista y permitir aterrizar al volador v
       En el programa se puede iterar sobre una lista de voladores e ir dando
       permiso de aterrizaje a cada volador, sin especificar que tipo 
       especifico de volador se trata 
       */
       
        v.aterrizar();
        
        if(v instanceof AvionPrivado){
            AvionPrivado ap = (AvionPrivado)v;
            System.out.println("Aterrizo Licencia " + ap.getLicencia());
        }
        
         if(v instanceof AvionDePasajeros){
            AvionDePasajeros adp = (AvionDePasajeros)v;
            System.out.println("Aterrizo Licencia " + adp.getAerolinea());
        }
         
       if(v instanceof Superman){
            Superman sp = (Superman)v;
            System.out.println("Aterrizo Licencia " + sp.getNombre());
        }
        
    }
}


Luego tenemos distintos TransportesAereos, un AvionDePasajeros, un AvionPrivado y luego tenemos a Superman.
Entonces lo que se hace es utilizar la interfaz para definir un mismo comportamiento a clases bien distintas, porque no heredan de la misma clase genérica.

public interface Volador {
    //Obligamos a cada volador a programar su modo de aterrizar
    public void aterrizar();
}

public abstract class TransporteAereo {
 }

class AvionPrivado extends TransporteAereo implements Volador{
    
    private String licencia;
    
    @Override
    public void aterrizar() {
      //Aca va el codigo del modo que tiene que aterrizar un avion privado
    }
    
    public String getLicencia() {
        return licencia;
    }
    
     public void setLicencia(String licencia) {
        this.licencia = licencia;
    }
     
}

class AvionDePasajeros extends TransporteAereo implements Volador{

    private String aerolinea;
    
    @Override
    public void aterrizar() {
    //Aca va el codigo del modo que tiene que aterrizar un avion de pasajeros
    }
    
    public String getAerolinea() {
        return aerolinea;
    }
    
     public void setAerolinea(String licencia) {
        this.aerolinea = licencia;
    }
}

class Superman extends TransporteAereo implements Volador{

    @Override
    public void aterrizar() {
    //Aca va el codigo del modo que tiene que aterrizar de Superman
    }
    
    public String getNombre() {
        return "Clark Kent";
    }
    
}



public class Programa {
    public static void main(String[] args) {
        
        AvionPrivado v1 = new AvionPrivado();
        v1.setLicencia("L123456F");
        
        AvionDePasajeros v2 = new AvionDePasajeros();
        v2.setAerolinea("Aerolineas Args");
        
        Superman v3 = new Superman();
        
        Aeropuerto ap = new Aeropuerto();
        
        ap.darPermisoDeAterrizaje(v1);
        
        ap.darPermisoDeAterrizaje(v2);
        
        ap.darPermisoDeAterrizaje(v3);
    }
}


En este caso se ve como se puede llamar al método aterrizar () de los objetos Voladores, porque la interfaz Volador tiene un método aterrizar () y al implementar una interfaz se esta diciendo que se tendrá ese comportamiento, es decir que se implementan sus métodos.

No hay comentarios:

Publicar un comentario