Interfaces y Colecciones
Interfaces y Colecciones
Interfaces y Colecciones
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,
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
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";
}
}
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.
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)
Nuevamente el gracioso de ideas infinitas nos dice ... "Maravilloso, pero sera
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);
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
Map
Arreglos
Desventajas
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
Collection Interfaces
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
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
Set Interface
No se aceptan duplicados
http://www.java-examples.com/java-collections-and-data-structures-(-java.util-package-)