You are on page 1of 39

INTERFACES EN JAVA

ESCOM IPN Rafael Aguilar Garca

Interfaces en Java
Definicin
Interfaces y jerarqua de clases
Interfaces como contratos
Interfaces y polimorfismo
Interfaces y herencia
Interfaces y API de Java

Clonable, Serializable, Runnable, ActionListener, etc.

Interfaces como tipo de referencia


ESCOM - IPN - Rafael Aguilar Garca

Definicin

Una interfaz (interface) es un tipo de referencia,


similar a una clase, que puede contener
solamente constantes y mtodos abstractos.
Los mtodos son inherentemente declarados como
public y abstract.
Las constantes son inherentemente declaradas como
public, static, y final.

ESCOM - IPN - Rafael Aguilar Garca

Sintaxis
[public] interface Interfaz1
{
int cte1 = 1;
boolean ct2 = true;
...
void metodo1( );
float metodo2(int v1, int v2);
String metodo3();
...
}

ESCOM - IPN - Rafael Aguilar Garca

Definicin

Una interfaz debe ser implementada por una clase


o ms clases.
Sintaxis:
public class Clase1 implements Interfaz1
{
int var;
public Clase1 ( ) { };
void metodo1( ) { }
float metodo2(int v1, int v2) { }
String metodo3() { . . . }
void otroMetodo( ){ }
}

ESCOM - IPN - Rafael Aguilar Garca

Interfaces y jerarqua de clases

ESCOM - IPN - Rafael Aguilar Garca

Interfaces y jerarqua de clases

Una interfaz permite relacionar dos o ms


jerarquas de clases distintas.
Decimos que las clases relacionadas implementan
un conjunto de mtodos comunes que estn en la
interfaz.
La siguiente figura ilustra este concepto:

ESCOM - IPN - Rafael Aguilar Garca

Interfaces y jerarqua de clases

ESCOM - IPN - Rafael Aguilar Garca

Interfaces como contratos

ESCOM - IPN - Rafael Aguilar Garca

Interfaces como contratos

En el desarrollo de software hay diversas reas


involucradas en el diseo e implementacin de
aplicaciones de software.
Estos grupos se ponen de acuerdo mediante un
contrato que describe la forma en que el software
interacta.
Tenemos entonces que los grupos de desarrollo
disean sus cdigos de forma independiente,
partiendo solamente del contrato acordado.
ESCOM - IPN - Rafael Aguilar Garca

Interfaces como contratos

La interfaz es el contrato.
Tenemos entonces equipos de software que
trabajan en la implementacin de ese contrato, y
tambin tenemos equipos que trabajan en la
aplicacin del mismo (usuarios del contrato).

El siguiente ejemplo ilustra este concepto.

ESCOM - IPN - Rafael Aguilar Garca

Interfaces como contratos - La interfaz


AutoRobot

El AutoRobot es un robot que nos transporta a


cualquier lugar que le indiquemos.
Para el diseo del AutoRobot partimos de un
contrato el cual establece todas las funcionalidades
que debe realizar:

ESCOM - IPN - Rafael Aguilar Garca

Interfaces como contratos - La interfaz


AutoRobot
public interface AutoRobot {
void startEngine( );
void changeSpeed(int speed);
void brakeEngine(int intensity);
int turn(Direction direction, double radius, double startSpeed, double
endSpeed);
int changeLanes(Direction direction, double startSpeed, double endSpeed);
int signalTurn(Direction direction, boolean signalOn);
int getRadarFront(double distanceToCar, double speedOfCar);
int getRadarRear(double distanceToCar, double speedOfCar);
......
// ms firmas de mtodos abstractos
}
ESCOM - IPN - Rafael Aguilar Garca

Interfaces como contratos - La interfaz


AutoRobot

Ahora requerimos que alguien lleve a cabo la


implementacin del contrato.
Las empresas armadoras de automviles sern las
encargadas de llevar a cabo dicha implementacin
en sus productos, por ejemplo la fbrica Audi, la
Toyota, o la VW.
El siguiente ejemplo muestra la implementacin
realizada por la fbrica Audi:

ESCOM - IPN - Rafael Aguilar Garca

Interfaces como contratos - La interfaz


AutoRobot
public class AudiRS_01 implements AutoRobot {
// Los mtodos de AutoRobot son implementados.
// Por ejemplo:
int signalTurn(Direction direction, boolean signalOn) {
// cdigo para encender el indicador LEFT del Audi
// cdigo para apagar el indicador LEFT del Audi
// cdigo para encender el indicador RIGHT del Audi
// cdigo para apagar el indicador RIGHT del Audi
}
// Implementacin de los otros mtodos de la interfaz AutoRobot
}
ESCOM - IPN - Rafael Aguilar Garca

Interfaces como contratos - La interfaz


AutoRobot

La implementacin del contrato AutoRobot es ahora


una API de la que pueden echar mano los
desarrolladores de aplicaciones.
Los desarrolladores de aplicaciones sern los que
programen el AutoRobot para maniobrarlo de
forma que pueda transportar a la gente de un
lugar a otro.
Aqu tendramos a empresas como ATT que cuentan
con una infraestructura de telecomunicaciones como
como satlites, radares, sensores emplazados en
toda una ciudad, etc.
ESCOM - IPN - Rafael Aguilar Garca

Interfaces como contratos - La interfaz


AutoRobot
public class ATTAutoRobot {
public static void main(String[ ] args)
AudiRS_01 AR = new AudiRS_01( );
AR.starEngine( );
AR.getRadarRear( );
AR.changeSpeed(5);
AR.accelerate(1);

}
}
ESCOM - IPN - Rafael Aguilar Garca

Interfaces y polimorfismo

ESCOM - IPN - Rafael Aguilar Garca

Interfaces y polimorfismo

Usando interfaces podemos llevar a cabo el


polimorfismo, es decir, podemos invocar a mtodos
de diferentes objetos teniendo implementaciones
distintas, segn el objeto al que estemos haciendo
referencia.
El siguiente ejemplo muestra este concepto:

ESCOM - IPN - Rafael Aguilar Garca

Interfaces y polimorfismo
interface Callback {
void callback(int param);
}
class Cliente implements Callback {
// Implementa el mtodo callback de la interfaz Callback
public void callback(int p) {
System.out.println(Mtodo callback llamado con + p);
}
void noInterfazMetodo( ) {// no es mtodo de la interfaz
System.out.println(Otros mtodos propios de la clase);
}
}

ESCOM - IPN - Rafael Aguilar Garca

Interfaces y polimorfismo
class TestInterface {
public static void main(String args [ ]){
Callback c = new Cliente( ); // Referencia a interfaz
c.callback(4);
}
}

Salida del programa anterior: Mtodo callback llamado con 4

ESCOM - IPN - Rafael Aguilar Garca

Interfaces y polimorfismo
class OtroCliente implements Callback {
// Implementa la interfaz Callback
public void callback(int p) {
System.out.println(Otra versin de callback);
System.out.println(El cuadrado de p es: + (p*p));
}
}

class TestInterfaz2 {
public static void main(String args[ ]) {
Callback c = new Cliente( );
OtroCliente ob = new OtroCliente( )
c.callback(4);
// Ahora c es una referencia a un objeto de la clase
// OtroCliente
c = ob;
c.callback(4);
}
ESCOM - IPN - Rafael Aguilar Garca
}

Interfaces y polimorfismo

Salida del programa anterior:


Mtodo callback llamado con 4
Otra version de callback
El cuadrado de p es 16

ESCOM - IPN - Rafael Aguilar Garca

Interfaces y herencia

ESCOM - IPN - Rafael Aguilar Garca

Interfaces y herencia

Una interfaz puede heredar de una o de mltiples


interfaces.
La herencia mltiple en interfaces est permitida en
Java.
La herencia mltiple de clases, que no est
permitida en Java, puede ser simulada mediante la
herencia mltiple de interfaces.

ESCOM - IPN - Rafael Aguilar Garca

Interfaces y herencia

Cuando una clase implementa una interfaz, accede


a implementar todos los mtodos de la interfaz.
Si la clase no implementa todos los mtodos, la
clase debe ser definida como clase abstracta.
Una interfaz puede heredar de otra interfaz.
En

este caso, la interfaz base es llamada superinterfaz,


de forma similar al trmino superclase para las clases
madre.
La interfaz derivada es llamada subinterfaz, de
manera similar al trmino subclase para las clases hijas
ESCOM - IPN - Rafael Aguilar Garca

Interfaces y herencia

Una clase solo puede heredar de una clase


(herencia simple).
En contraste, una interfaz puede heredar de
cualquier nmero de interfaces.
El siguiente diagrama UML muestra este concepto.

ESCOM - IPN - Rafael Aguilar Garca

Interfaces y herencia

ESCOM - IPN - Rafael Aguilar Garca

Interfaces y herencia
interface InterfazUno{
int cte1 = 1;
void metodo1( );
}
interface InterfazDos{
int cte2 = 2;
void metodo2( );
}
interface InterfazUnoDos extends InterfazUno, InterfazDos
{
int cte1_2 = 12;
void metodo1_2( );
}
ESCOM - IPN - Rafael Aguilar Garca

public class MiClase implements InterfazUnoDos{


public void metodo1( ){
System.out.println("Soy el metodo 1. cte1 = " + cte1);
}
public void metodo2( ){
System.out.println("Soy el metodo 2. cte2 = " + cte2);
}
public void metodo1_2( ){
System.out.println("Soy el metodo 1_2. cte1_2 = " + cte1_2);
}

public static void main(String [ ] args){


MiClase mc = new MiClase();
mc.metodo1();
mc.metodo2();
mc.metodo1_2();
}
}
ESCOM - IPN - Rafael Aguilar Garca

Interfaces y herencia

Salida del programa anterior:


Soy el mtodo 1. cte1 = 1
Soy el mtodo 2. cte2 = 2
Soy el mtodo 1_1. cte1_2 = 12

ESCOM - IPN - Rafael Aguilar Garca

Interfaces y API de Java

ESCOM - IPN - Rafael Aguilar Garca

Interfaces y API de Java

La Api de Java proporciona diversas


funcionalidades mediante interfaces. Por ejemplo:
Cloneable.
Serializable
Runnable
Etc.

ESCOM - IPN - Rafael Aguilar Garca

Interfaces y API de Java

Cloneable
Contiene el mtodo clone( ) que tambin forma
parte de la clase Object.
Nos permite hacer copias de objetos, incluso si estos
objetos estn conformados por otros ms. La copia
se realiza atributo-por-atributo.
El siguiente ejemplo ilustra el uso de esta interfaz
para duplicar (clonar) un objeto de la clase
Rectngulo que a su vez est constituido por un
objeto de la clase Punto.
ESCOM - IPN - Rafael Aguilar Garca

public class Rectangulo implements Cloneable{


private int ancho ;
private int alto ;
private Punto origen;
public Rectangulo() {
origen = new Punto(0, 0);
ancho=0;
alto=0;
}
public Rectangulo(Punto p) {
this(p, 0, 0);
}
public Rectangulo(int w, int h) {
this(new Punto(0, 0), w, h);
}
public Rectangulo(Punto p, int w, int h) {
origen = p;
ancho = w;
alto = h;
}

ESCOM - IPN - Rafael Aguilar Garca

//Continuacin de la clase rectngulo


public Object clone(){
Rectangulo obj=null;
try{
obj=(Rectangulo)super.clone();
}catch(CloneNotSupportedException ex){
System.out.println(" no se puede duplicar");
}
obj.origen=(Punto)obj.origen.clone();
return obj;
}
public void mover(int dx, int dy) {
origen.trasladar(dx, dy);
}
public int area() {
return ancho * alto;
}
public String toString(){
String texto=origen+" ancho: "+ancho+" alto: "+alto;
return texto;
}
}
ESCOM - IPN - Rafael Aguilar Garca

public class Punto implements Cloneable{


private int x;
private int y;
public Punto(int x, int y) {
this.x = x;
this.y = y;
}
public Punto() {
x=0;
y=0;
}
public Object clone(){
Object obj=null;
try{
obj=super.clone();
}catch(CloneNotSupportedException ex){
System.out.println(" no se puede duplicar");
}
return obj;
}

ESCOM - IPN - Rafael Aguilar Garca

//Continuacin de la clase Punto


public void trasladar(int dx, int dy){
x+=dx;
y+=dy;
}
public String toString(){
String texto="origen: ("+x+", "+y+")";
return texto;
}
}

ESCOM - IPN - Rafael Aguilar Garca

public class ClonicoApp {


public static void main(String[] args) {
Punto punto=new Punto(20, 30);
Punto pCopia=(Punto)punto.clone();
System.out.println("punto "+ punto);
System.out.println("copia "+ pCopia);
Rectangulo rect=new Rectangulo(new Punto(0, 0), 4, 5);
Rectangulo rCopia=(Rectangulo)rect.clone();
System.out.println("rectngulo "+ rect);
System.out.println("copia "+ rCopia);
try {
//espera la pulsacin de una tecla y luego RETORNO
System.in.read();
}catch (Exception e) { }
}
}

ESCOM - IPN - Rafael Aguilar Garca

You might also like