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( );
[Link]( );
[Link]( );
[Link](5);
[Link](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) {
[Link](Mtodo callback llamado con + p);
}
void noInterfazMetodo( ) {// no es mtodo de la interfaz
[Link](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
[Link](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) {
[Link](Otra versin de callback);
[Link](El cuadrado de p es: + (p*p));
}
}
class TestInterfaz2 {
public static void main(String args[ ]) {
Callback c = new Cliente( );
OtroCliente ob = new OtroCliente( )
[Link](4);
// Ahora c es una referencia a un objeto de la clase
// OtroCliente
c = ob;
[Link](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( ){
[Link]("Soy el metodo 1. cte1 = " + cte1);
}
public void metodo2( ){
[Link]("Soy el metodo 2. cte2 = " + cte2);
}
public void metodo1_2( ){
[Link]("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)[Link]();
}catch(CloneNotSupportedException ex){
[Link](" no se puede duplicar");
}
[Link]=(Punto)[Link]();
return obj;
}
public void mover(int dx, int dy) {
[Link](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=[Link]();
}catch(CloneNotSupportedException ex){
[Link](" 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)[Link]();
[Link]("punto "+ punto);
[Link]("copia "+ pCopia);
Rectangulo rect=new Rectangulo(new Punto(0, 0), 4, 5);
Rectangulo rCopia=(Rectangulo)[Link]();
[Link]("rectngulo "+ rect);
[Link]("copia "+ rCopia);
try {
//espera la pulsacin de una tecla y luego RETORNO
[Link]();
}catch (Exception e) { }
}
}
ESCOM - IPN - Rafael Aguilar Garca