PDF de programación - Interfaces - El lenguaje de programación Java

Imágen de pdf Interfaces - El lenguaje de programación Java

Interfaces - El lenguaje de programación Javagráfica de visualizaciones

Publicado el 31 de Mayo del 2018
966 visualizaciones desde el 31 de Mayo del 2018
274,2 KB
8 paginas
Creado hace 17a (13/11/2006)
Interfaces

• Herencia múltiple





Interfaces Comparable y Comparator

Interfaces de marca:
– Cloneable

1

Interfaces

• Permite SIMULAR la herencia múltiple.
• La definición de un interfaz no tiene constructor, por lo que no es

posible invocar el operador new sobre un tipo interfaz.

• Declaración:

• Interface es el modo de declarar un tipo formado sólo por métodos
(final static), ambos
abstractos
public, permitiendo que se escriba cualquier implementación para estos
métodos.

(abstract) y constantes

• Aunque un interfaz puede extender múltiples interfaces, no puede

extender clases.

[public] interface MiInterfaz [ extends otraI1,otraI2,... ] {

double PI = 3.14159;
void met1(); //public abstract
...

}

2

1

Interfaces


Implementación:
– Un interfaz se utiliza definiendo una clase que implemente el interfaz a

través de su nombre

– La clase debe proporcionar la definición completa de todos los métodos
declarados en el interfaz y, también, la de todos los métodos declarados en
todos los superinterfaces de ese interfaz.

– Una clase puede implementar más de un interfaz, incluyendo varios
nombre de interfaces separados por comas. En este caso, la clase debe
proporcionar la definición completa de todos los métodos declarados en
todos los interfaces de la lista y de todos los superinterfaces de esos
interfaces.

Class MiClase extends OtraClase

implements UnInterfaz, OtroInterfaz {

...

}

El lenguaje de programación Java

3

Colisión de nombres
public interface Interfaz1 {

int CTE = 1;
void met();

public interface Interfaz2 {

int CTE = 789;
void met();

}

}

}

}

public class Clase implements Interfaz1, Interfaz2{

public void met(){ //única semántica del método

System.out.println(“Única implementación de met");
System.out.println(“El valor de la cte es” + Interfaz1.CTE);

El lenguaje de programación Java

4

2

Interfaces

OtraClase

UnInterfaz

supertipos

MiClase

OtraClase oc; UnInterfaz ui;
MiClase mc = new MiClase();
oc = mc;
ui = mc;

• Una interfaz puede utilizarse como nombre de tipo.
• mc incluye todos sus supertipos (clases e interfaces).
• A ui se le puede asignar cualquier objeto que implemente
la interfaz.

El lenguaje de programación Java

5

Clase abstracta vs interfaces

• Dos DIFERENCIAS importantes:

– Una clase abstracta puede estar parcialmente implementada, partes protected

y/o static. Una interfaz está limitada a métodos públicos y abstractos.

– Las interfaces proporcionan una forma de herencia múltiple. Una clase puede

heredar de una única clase, incluso si sólo tiene métodos abstractos.

• Recomendaciones:

– clase parcialmente diferida ⇒ clases abstractas
– clase sin ninguna implementación ⇒ Interfaz

• Hay cierta SIMILITUD entre ambas. El propósito de los interfaces es
proporcionar nombres, es decir, solamente declara lo que necesita
implementar el interfaz, pero no cómo se ha de realizar esa implementación;
es una forma de encapsulación de los protocolos de los métodos sin forzar
al usuario a utilizar la herencia.

6

3

Clase Arrays
• static void sort (Object [] a)

Aunque el parámetro es un array de Object presupone que es un
array de objetos comparables (Comparable[])

• static void sort (Object [] a, Comparator c)

• static boolean equals (Object [] a, Object [] a2)

• static int binarySearch(Object [] a, Object key)

• static int binarySearch(Object [] a, Object key,

Comparator c)

El lenguaje de programación Java

7

Interfaces Comparable y Comparator
puede
• La

java.lang.Comparable

ser
implementada por cualquier clase cuyos objetos puedan ser
ordenados.

interfaz

• Tiene un único método que devuelve un valor menor, igual o
mayor que cero si el objeto actual es menor, igual o mayor
que el objeto que se le pasa como parámetro.

public interface Comparable{

int compareTo(Object o);

}

• Para las colecciones ordenadas es posible especificar el orden
(distinto al orden natural definido por el método compareTo)
establece
que
interfaz
java.util.Comparator.

mediante

se

el

8

4

public interface Comparator{

int compare(Object o1, Object o2);

}

Ejemplo Comparable

• Compara los empleados de una empresa por antigüedad
public class Empleado implements Comparable{


public int compareTo (Object otro){

int otroAnyo = (Empleado)otro.anyoContrato;
if (anyoContrato == otroAnyo) return 0;
else if (anyoContrato < otroAnyo) return -1;

else return 1;

}

}
• Ordenamos los empleados por antigüedad:

Empleado[] plantilla;

Arrays.sort(plantilla);

El lenguaje de programación Java

9

Ejemplo Comparator

• El criterio para ordenar los empleados atendiendo al orden

alfabético de sus nombres:
public class ComparadorAlfabetico implements Comparator{

public int compare(Object o1, Object o2){
Empleado e1 = (Empleado)o1;
Empleado e2 = (Empleado)o2;
return e1.getNombre().compareTo(e2.getNombre());

}

}

• Ordenamos los empleados por orden alfabético (criterio

distinto al “natural”)
Empleado[] plantilla;

Arrays.sort(plantilla, new ComparadorAlfabetico());

El lenguaje de programación Java

10

5

Ejemplo: ListaOrdenada

• Se determina el criterio de ordenación en el momento de

la creación de la ListaOrdenada

• Se pueden definir distintos criterios de ordenación:

– Orden alfabético
– Antigüedad (fechaContrato)
– Sueldo

«interface»

Comparator

ListaOrdenada

LinkedList

ComparatorAlfabetico

ComparatorAntigüedad

El lenguaje de programación Java

11

Interfaces de marca: Cloneable

• Devuelve un nuevo objeto cuyo estado inicial es una
copia del estado actual del objeto sobre el que se invoca
a clone

• Factores a tener en cuenta:

– La clase que proporciona el método clone debe implementar el interfaz
– Definir el método clone como public (en la clase Object es

Cloneable
protected, por lo que no se puede hacer el clone de un Object)

– Puede ser necesario cambiar la implementación por defecto del método
– Se puede utilizar la excepción CloneNotSupportedException

para hacer un clone en profundidad

para indicar que no se debería haber llamado al método clone.

El lenguaje de programación Java

12

6

Clonación de objetos

public class Pila implements Cloneable {

public Object clone() throws CloneNotSupportedException{
}
...

return super.clone();

}
• La implementación por defecto hace un clone superficial:
objPila2=(Pila)objPila1.clone();

buffer
tope

2

2 9 7 3

buffer
tope

2

objPila1

El lenguaje de programación Java

objPila2

13

Clone en profundidad

• Redefinir clone para que haga una copia en profundidad

public class Pila implements Cloneable{

...
public Object clone() throws CloneNotSupportedException
{

Pila nuevaPila = (Pila)super.clone();
nuevaPila.buffer = (int[])buffer.clone();
return nuevaPila;

}

}

buffer
tope

2

objPila1

2 9 7 3

2 9 7 3

El lenguaje de programación Java

2

buffer
tope
objPila2

14

7

Clone y tipo retorno

• Antes de la versión 1.5 el tipo de retorno siempre era Object

• A partir de la versión 1.5 nos permite redefinir el tipo de retorno (tipos

de retorno covariantes)

public class Pila implements Cloneable{

...
public Pila clone() throws CloneNotSupportedException
{

//Llamamos a Object.clone()
Pila nuevaPila = (Pila)super.clone();
nuevaPila.buffer = (int[])buffer.clone();
return nuevaPila;

}

}

El lenguaje de programación Java

15

CloneNotSupportedException

• ¿Capturar la excepción o declararla?

public class Pila implements Cloneable {


public Pila clone(){

try{
}catch (CloneNotSupportedException e){

return super.clone();
//No va a ocurrir porque es Cloneable
return null;

}

}

}

excepción

• Capturarla es adecuado para clases finales
• Capturarla impide que las subclases puedan lanzar la

El lenguaje de programación Java

16

8
  • Links de descarga
http://lwp-l.com/pdf11493

Comentarios de: Interfaces - El lenguaje de programación Java (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad