Вы находитесь на странице: 1из 30

Java Intermedio Ing.

Edgar Garca

Interface
El concepto de Interface lleva un paso ms adelante la idea de las clases abstractas. En Java una interface es una clase abstracta pura, es dcir una clase donde todos los mtodos son abstractos (no se implementa ninguno). Permite al diseador de clases establecer la forma de una clase (nombres de mtodos,

listas de argumentos y tipos de retorno, pero no bloques de cdigo).


Una interface puede tambin contener datos miembro, pero estos son siempre static y final. Una interface sirve para establecer un 'protocolo' entre clases.

Interface
Para crear una interface, se utiliza la palabra clave interface en lugar de class. La interface puede definirse public o sin modificador de acceso, y tiene el mismo significado que para las clases. Todos los mtodos que declara una interface

son siempre public.


Para indicar que una clase implementa los mtodos de una interface se utiliza la palabra clave implements. El compilador se encargar de verificar que la clase

efectivamente declare e implemente todos los mtodos de la interface. Una


clase puede implementar ms de una interface.

Declaracin y Uso
Una interface se declara:

interface nombre_interface {
tipo_retorno nombre_metodo ( lista_argumentos ) ; ... } Por ejemplo: interface InstrumentoMusical { void tocar(); void afinar(); String tipoInstrumento(); }

Declaracin y Uso
Y una clase que implementa la interface:
class InstrumentoViento extends Object implements InstrumentoMusical { void tocar() { . . . }; void afinar() { . . .}; String tipoInstrumento() {} } class Flauta extends InstrumentoViento { String tipoInstrumento() { return "Flauta";

}
}

Cual es la diferencia a una clase abstracta ?

Diferencias

Las clases abstractas permiten definir el cuerpo de los metodos. Las interfaces no. Las clases abstractas se heredan, las interfaces se implementan, permitiendo asi implenentar x cantidad de interfaces e implementando solo 1 clase. Las clases abstractas permite declarar miembros de la clase no constantes. En las interfaces todos son constantes.

Por qu usar interfaces ?

Imaginemos que tenemos que escribir un codigo que tome unos valores y los imprima por pantalla.

Escribamoslo...

void metodoConLasCuentas() { double valor=this.cuentas(datos); System.out.println ("El valor es "+valor); double valor2 = this.otrasCuentas(datos); System.out.println ("El otro valor es " + valor2); }

Ya est el programa. Se lo enseamos a nuestro jefe, a nuestro cliente, a nuestro mejor amigo y nos dice ... "Me gustara poder sacar eso por impresora". Nos ponemos manos a la obra y cambiamos nuestro programa

void metodoConLasCuentas() { double valor=this.cuentas(datos); this.sacaPorImpresora ("El valor es "+valor); double valor2 = this.otrasCuentas(datos); this.sacaPorImpresora ("El otro valor es " + valor2); }

Volvemos a enserselo al gracioso y nos dice ... "Es que yo querra poder elegir sobre la marcha si lo quiero en pantalla o en impresora". Nuevamente nos ponemos a tocar el cdigo, pero esta vez algo ms complejo

void metodoConLasCuentas() { double valor=this.cuentas(datos); if (porImprsora==true) this.sacaPorImpresora ("El valor es "+valor); else System.out.println ("El valor es "+valor); double valor2 = this.otrasCuentas(datos); if (porImpresora==true)

this.sacaPorImpresora ("El otro valor es " + valor2);


else System.out.println ("El otro valor es " + valor2); }

Nuevamente el gracioso de ideas infinitas nos dice ... "Maravilloso, pero sera

bueno poder guardar esos valores en base de datos".


Hartos de tocar el cdigo decidimos implementar una solucin que nos valga para todas las peticiones estpidas del pi..... La solucin es usar una interface. Hacemos nuestra interface as interface Escritor { public void escribe (String cadena); }

Ahora hacemos varias clases que implementen la interface, una clase Pantalla con el System.out.println, una clase Impresora con el sacaPorImpresora y una clase ABaseDeDatos con algo que sea capaz de meter esa cadena en la base de datos. Nuestro cdigo queda as de bonito ahora void metodoConLasCuentas (Escritor escritor) { double valor=this.cuentas(datos); escritor.escribe ("El valor es "+valor);

double valor2 = this.otrasCuentas(datos);


escritor.escribe ("El otro valor es " + valor2); }

Llamando a nuestro mtodo pasndole una clase Pantalla, sacar el texto por pantalla, con una clase Impresora, lo sacar por impresora y con un ABaseDeDatos lo guardar en base de datos. Ya no tenemos que tocar nunca ms nuestro cdigo. nicamente hacernos una nueva clase para la nueva idea del graciosillo y llamar a nuestro mtodo con la nueva clase.

Ejercicio
Crear una banda musical con los siguiente instrumentos: Guitarra Piano Bajo Bateria

Flauta

Necesita una manera de agrupar todos estos instrumentos ( Arreglos ) y ponerlos a tocar uno tras otro. 2 Oportunidades a la guitarra 3 Oportunidades Piano 1 Oportunidades Bajo 5 Oportunidades Bateria y Flauta

Ejercicio
Necesitamos afinar 5 instrumentos de Cuerda y 2 Instrumentos de Viento Crear una solucion utilizando interfaces que permita afinar todos los instrumentos utilizando solo 1 metodo comun para todos ellos. Ejemplo: Public void afinar(...) { //Afinar el instrumento....

Collections

Arrays

Iterators
Collections

Collection Set List

Map

Arreglos

Son la manera mas eficiente de guardar referencias a objetos. Ventajas

Sabe que tipo de dato guarda en compilacion

Desde que se inicializa sabe su size


Puede almacenar tipos primitivos directamente

Desventajas

Solo puede almacenar un tipo de objetos No se puede modificar el tamano

Helper class java.util.Arrays

Helper class java.util.Arrays Search and sort: binarySearch(), sort() Comparison: equals() (many overloaded)

Instantiation: fill()
Conversion: asList()

(many overloaded)

Collections

Es un grupo de data manejadas como un simple objeto. Una maleta. Puede crecer a mediado que se amerite Pueden contener unicamente Objetos

Pueden ser Thread-safe

Collection Interfaces

Las colecciones estan definidas por un set de interfaces

Soportadas por un set de clases que implementan esas interfaces

Las interfaces son usadas para dar flexibilidad a las colleciones.

Es facil cambiar de una coleccion a otra que implemente la misma interface.

Iterator interface

La idea: Seleccionar cada elemento de una coleccion: Esconder el tipo de coleccion elegida.

// the interface definition Interface Iterator { boolean hasNext(); Object next(); void remove(); } // an example public static void main (String[] args){ ArrayList cars = new ArrayList(); // note "one-way" traffic

for (int i = 0; i < 12; i++)


cars.add (new Car()); Iterator it = cats.iterator(); while (it.hasNext())

System.out.println ((Car)it.next());
}

Collection Interface
public interface Collection { // Basic Operations int size(); boolean isEmpty(); boolean contains(Object element); boolean add(Object element); Iterator iterator(); // Optional boolean remove(Object element); // Optional

// Bulk Operations
boolean containsAll(Collection c); boolean addAll(Collection c); // Optional boolean removeAll(Collection c); // Optional boolean retainAll(Collection c); // Optional

void clear();
// Array Operations Object[] toArray();

// Optional

Object[] toArray(Object a[]); }

Set Interface

No se aceptan duplicados

http://www.java-examples.com/java-collections-and-data-structures-(-java.util-package-)