El lenguaje de programación Java

Slides:



Advertisements
Presentaciones similares
CJ02 – Técnicas avanzadas en java 1.4 y 5.0
Advertisements

Técnicas avanzadas en java 1.4 y java 5.0
Curso de java básico (scjp)
Curso de java básico (scjp)
Curso de java básico (scjp)
CJ02 – Técnicas avanzadas en java 1.4 y 5.0
Curso de Java Capitulo 7: Conceptos sobre poo Profesor:
Programación Interactiva Fundamentos de Java. 2 Ejecución de un programa Para Java una clase ejecutable es aquella que es pública y tiene un método main()
Tablas. Descripción general Introducción a las tablas Creación de tablas Uso de tablas.
Lenguaje de programación Java
Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase.
Igor Santos Grueiro. Muchos objetos tienen CLAVE.
Conceptos más avanzados de Programación Orientada a Objetos Programación 2005 Licenciatura de Lingüística y Nuevas Tecnologías.
Algoritmos y Estructura de Datos
Capitulo 3 Java util.
Genéricos en Java Jaime Ramírez, Ángel Lucas González
Tratamiento de listas en Java
1.2 Sintaxis del lenguaje Java.
Rosalía Laza Fidalgo Reyes Pavón Rial Curso
Marzo 2007 Lenguajes Visuales Clase III.
Colas y Listas Enlazadas
Archivos Contenido: Archivos de Texto Archivos de Acceso Aleatorio
HERENCIA.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
JAVA 1.5 Fernando Almeida Octubre Introducción Java Specification Request (JSR) 14Java Specification Request (JSR) 14 propone introducir tipos y.
Modificadores.
Polimorfismo Lenguajes de Programación II Corporación Universitaria del Caribe CECAR.
Lic. Rosemary Torrico Bascopé
Java Orientado a Objetos CLASES,OBJETOS Y MÉTODOS
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.
Tema 6: Clases Antonio J. Sierra.
Tablas hash Juan Ramón Pérez Pérez Prácticas EDI - © Juan Ramón Pérez.
Tema 10: Interfaces Antonio J. Sierra.
6. Herencia. Clases abstractas. Genericidad
Técnicas avanzadas de programación Interfaces
Colecciones.
SCJP Sun Certified Programmer for Java 6
UNIDAD 2 CLASES Y OBJETOS. CLASE Elementos cabecera y cuerpo de la clase. Cabecera: aporta información fundamental sobre la clase en sí y constituye de.
Clase Teórica No. 4 Programación IV
Patrón Observador Un patrón de diseño es una descripción de clases y objetos comunicándose entre si adaptada para resolver un problema de diseño general.
Matrices Es una estructura homogénea, compuesta por varios elementos, todos del mismo tipo y almacenados consecutivamente en memoria A cada elemento se.
El lenguaje de programación Java
JAVA J.A.C..
7. Interfaces Herencia múltiple Interfaces Comparable y Comparator
ESTRUCTURA DE DATOS EN JAVA
Tema 11: Excepciones Antonio J. Sierra.
Patrones Creacionales
Introducción a Java (2ª parte) - excepciones, colecciones, i/o, … -
Clases y objetos. La unidad fundamental del lenguaje Java es la clase, que proporciona la estructura de los objetos y mecanismos para fabricarlos, a partir.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA SIETE GENERICOS Y COLECCIONES.
UNIDAD VI Recursos esenciales de Java LSC. Natalia Rodríguez Castellón.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6
Metodología de Programación Ayudantía 5 lelagos.ublog.cl 2009.
El lenguaje de programación Java1 8. Colecciones e iteradores - interfaz Collection - clases ArrayList, LinkedList, HashSet, TreeSet - interfaz Map - clases.
Patrón Iterator Santiago García Sánchez Rebeca Marcos Salcedo Mª Cristina Zapatero Gironda.
Colecciones en JAVA José Luis Redondo García.
Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS.
Presentado por: PABLO ANDRES DIAZ SAIN HASSAM CAICEDO
PROGRAMACIÓN ORIENTADA A OBJETOS Unidad 1 GENERICIDAD
Algoritmos y Programación III 4. Colecciones, excepciones Carlos Fontela, 2006.
Clases “ Es una Abstracción de un elemento del mundo real ”
Factorías e Iterables Introducción del concepto de patrón de diseño Construcción de tipos para recorridos con for extendido Fundamentos de Programación.
Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Práctica 3.
Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Práctica 4 Versión Diseño de tipos Igualdad, representación, código,
Tipos SortedSet, Map y SortedMap Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Unidad Didáctica 16.
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
Iterables virtuales Concepto, Metodología de desarrollo y Ejemplos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión.
Arrays, Cadenas y Vectores Tipos Genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 5 Versión
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
Transcripción de la presentación:

El lenguaje de programación Java vi. Colecciones - interfaz Collection - clases ArrayList, LinkedList, HashSet, TreeSet - interfaz Map - clases TreeMap, HashMap - Iteratores: interfaz Iterator vii. Clases anidadas e internas El lenguaje de programación Java

El lenguaje de programación Java Colecciones en Java Permite almacenar y organizar objetos de manera útil para un acceso eficiente. Se encuentran en el paquete java.util Núcleo de abstracciones de colecciones de utilidad (interfaces) e implementaciones ampliamente útiles. Las interfaces proporcionan métodos para todas las operaciones comunes y las implementaciones concretas especifican la decisión de las operaciones no permitidas. (java.lang.UnsupportedOperationException) Sobre los elementos se puede iterar (Iterator) El lenguaje de programación Java

Jerarquía de colecciones devuelve devuelve Iterator Collection Map devuelve ListIterator List Set SortedMap AbstractMap AbstractCollection SortedSet TreeMap HashMap AbstractList AbstractSet extends HashSet TreeSet implements interface ArrayList AbstractSequentialList class LinkedList

Interfaz Collection (1/2) int size() boolean empty() boolean contains(Object elem) Iterator iterator() Object[] toArray(), Object[] toArray(Object dest[]) boolean add(Object elem), boolean remove(Object elem) void clear() List – Una colección cuyos elementos permanecen en un orden particular a menos que se modifique la lista (no significa lista enlazada aunque es una posible implementación). void add(int index, Object element) Object remove(int index) Object get(int index) Object set(int index, Object element) int indexOf(Object o) int lastIndexOf(Object o) List subList(int min, int max)

Interfaz Collection (2/2) Set – Una colección (conjunto) donde no puede haber elementos repetidos, y cuyos elementos no se almacenan necesariamente siguiendo un orden particular. Mismos métodos que Collection con otro contrato. SortedSet – Conjunto con elementos ordenados. Object first() Object last() SortedSet subSet(Object fromElement, Object toElement) SortedSet headSet(Object toElement) SortedSet tailSet(Object fromElement)

El lenguaje de programación Java Interfaz Map Map Un objeto que asocia claves con valores. No puede tener claves duplicadas. Object put(Object key, Object value); Object remove(Object key); Object get(Object key); containsKey, containsValue, isEmpty, size Proporciona tres vistas de colección: colección de claves (keySet), colección de valores (values), colección de asociaciones clave-valor (entrySet). SortedMap: Un mapa cuyas claves están ordenadas. Object firstKey(), Object lastKey(), SortedMap subMap(Object minKey, Object maxKey), SortedMap headMap(Object maxKey), SortedMap tailMap(Object minKey) El lenguaje de programación Java

El lenguaje de programación Java Iteración Collection >> Iterator iterator(); interface Iterator{ boolean hasNext(); /* Devuelve true si la iteración tiene mas elementos */ Object next(); /* Devuelve el siguiente elemento de la iteración Lanza excepción NoSuchElementException */ void remove(); /* Elimina el último elemento devuelto por la iteración Está capacitado para decir que no lo implementa UnsupportedOperationException */ } La interfaz ListIterator extiende a Iterator y maneja un objeto List ordenado. Permite iterar hacia delante y hacia atrás. El lenguaje de programación Java

Ejemplo de uso de Iteradores Cálculo del gasto total de un departamento public double gastoDpto(){ double gasto=0; Iterator it=plantilla.iterator(); while (it.hasNext()){ gasto+=((Empleado)it.next()).getSueldo(); } return gasto; Siendo plantilla una colección que implemente la interfaz Collection El lenguaje de programación Java

Implementaciones de Collection LinkedList – Una implementación de una lista doblemente enlazada. La modificación es poco costosa para cualquier tamaño, pero el acceso aleatorio es lento. Útil para implementar colas y pilas. getFirst, getLast, removeFirst, removeLast, addFirst, addLast ArrayList – Una lista implementada utilizando un array de dimensión modificable. Es costoso añadir o borrar un elemento cerca del principio de la lista si ésta es grande, pero es relativamente poco costoso de crear y rápido para acceso aleatorio. HashSet – Un Set implementado mediante una tabla hash. Es una buena implementación de propósito general por lo que la búsqueda, la adición y eliminación son insensibles al tamaño de los contenidos. TreeSet – Un SortedSet implementado utilizando un árbol binario equilibrado. Es más lento para buscar o modificar que un HashSet, pero mantiene los elementos ordenados. Asume que los elementos son comparables si no se le ha pasado un comparator en el constructor. Todas son Cloneable y Serializable El lenguaje de programación Java

Convenciones sobre excepciones UnsupportedOperationException Métodos opcionales en la implementación de una interfaz ClassCastException El tipo del elemento que se desea insertar no es del tipo apropiado IllegalArgumentException El valor del elemento no es apropiado para la colección NoSuchElementException La colección de la que se quiere devolver un elemento está vacía NullPointerException Se pasa como argumento una referencia con valor null cuando la colección no admite este valor. El lenguaje de programación Java

Declaración de colecciones Clase concreta import java.util.*; public class ColeccionSimple { public static void main( String args[] ) { List c = new ArrayList(); for( int i=0; i < 10; i++ ) c.add(new Integer(i)); Iterator it = c.iterator(); while( it.hasNext() ) System.out.println(it.next()); } interfaz El lenguaje de programación Java

Implementaciones de Map HashMap Una implementación de Map con una tabla hash. El método hashCode de cada clave se utiliza para seleccionar un lugar en la tabla Una colección de utilidad muy general con tiempos relativamente cortos de búsqueda e inserción. TreeMap Una implementación de SortedMap utilizando un árbol binario equilibrado que mantiene sus elementos ordenados por clave. Útil para conjuntos de datos ordenados que requieren una búsqueda por clave moderadamente rápida. Asume que los elementos son comparables si no se le ha pasado un comparator en el constructor. El lenguaje de programación Java

El lenguaje de programación Java Ejemplo 1/2 Generar números al azar (Math.random) y contar cuantas veces sale cada uno. HashMap = Colección de pares (clave-valor) Clave = número aleatorio generado Valor = contador que acumula las veces que ha aparecido class Contador { private int i; public Contador(){ i=1;} public void incrementar(){++i;} public String toString() { return Integer.toString(i); } El lenguaje de programación Java

El lenguaje de programación Java Ejemplo 2/2 class Estadistico { public static void main( String args[] ) { HashMap tabla = new HashMap(); for(int i=0; i < 10000; i++) { // Generar un número entre 0 y 20 Integer num = new Integer((int)(Math.random()*20)); if(tabla.containsKey(num)) //Incrementamos el contador asociado al número ((Contador)tabla.get(num)).incrementar(); else //Añadimos nuevo par: numero-contador tabla.put(num, new Contador()); } System.out.println(tabla); El lenguaje de programación Java

Las utilidades de Collections public static Object min(Collection col) public static Object max(Collection col) public static Object min(Collection col, Comparator comp) public static Object max(Collection col, Comparator comp) public static void reverse(List lista) public static void copy(List dst, List fnt) public static void sort(List lista) public static void sort(List lista, Comparator comp) public static int binarySearch(List lista, Object clave) public static int binarySearch(List lista, Object clave, Comparator comp) El lenguaje de programación Java

El lenguaje de programación Java Conclusiones Si un método tiene que devolver (pasar como parámetro) una colección de objetos, el tipo será Iterator o cualquiera de las interfaces de colección. El tipo de la declaración de los atributos y variables locales será cualquiera de las interfaces de colección. List lista = new ArrayList(); Excepción: LinkedList si la utilizamos como pila o cola. Utilizar SIEMPRE Iterator para el recorrido de cualquier colección. El lenguaje de programación Java

Clases anidadas e internas Un clase o interfaz se puede declarar dentro de otras clases o interfaces. Un tipo anidado se considera parte del tipo que lo contiene. Cada uno puede acceder a los miembros del otro (incluso los privados). Los tipos anidados pueden declararse: static (clases anidadas): permite una estructuración simple de tipos No estático (clases internas): define una relación especial entre el objeto anidado y el objeto de la clase que lo contiene Se recomienda un único nivel de anidamiento Toda clase interna produce un archivo .class ClaseExterna.class ClaseExterna$ClaseInterna.class El lenguaje de programación Java

Clases anidadas estáticas El modificador static precede al nombre de la clase. Igual que los miembros estáticos son independientes de los objetos que se creen de la clase externa (no se puede acceder a los campos no estáticos). Sirve como mecanismo para definir tipos lógicamente relacionados. La clases anidada se comporta como cualquier otra clase: Se pueden definir subclases. La clase que extienda a la clase anidada no hereda su privilegio de acceso a la clase que la contiene Implementar un interfaz Declararse como abstract o final Declaración de una variable: ClaseExterna.ClaseAnidada var; El lenguaje de programación Java

Ejemplo: Definir estructura de datos asociadas class Pila { private Nodo cabeza; private static class Nodo {     Object valor; Nodo siguiente; Nodo(Object v, Nodo s){ valor = v; siguiente = s; } public void push (Object obj){ cabeza = new Nodo (obj,cabeza); public Object pop (){ Object primero = cabeza.valor; cabeza = cabeza.siguiente; return primero; Nodo private—Sin modificador de acceso El lenguaje de programación Java

El lenguaje de programación Java Clases internas Clases anidadas no estáticas. Un objeto de la clase interna se asocia siempre con un objeto de la clase que la incluye, de manera que ve los atributos y métodos de la clase externa como propios. Los objetos de la clase interna se crean dentro de los métodos de instancia de la clase que las incluye. El objeto receptor del método de instancia se asocia por defecto con el objeto interno. La declaración es igual a la de cualquier otra clase con la restricción de que no pueden tener miembros estáticos (excepto si son finales). Puede ocultar atributos y métodos de la clase envolvente. El lenguaje de programación Java

El lenguaje de programación Java Ejemplo: Creación del objeto de la clase interna dentro de un método de instancia de la clase envolvente class CuentaBancaria{ private long numero; private long saldo; private Operacion ultimaOp; private class Operacion{ String descripcion; long cantidad; ... public String toString(){ return numero + “: ”+ descripcion+” “+cantidad; } public void reintegro(long cantidad){ saldo -=cantidad; ultimaOp= new Operacion(“reintegro”, cantidad); El lenguaje de programación Java

Ejemplo: acceso a métodos ocultos class Externa{ void imprimir(){} class Interna{ void imprimir(){} //oculta los métodos del mismo //nombre en la clase externa void mostrar(){ imprimir(); Externa.this.imprimir(); //OK.Invocación explícita al método de la clase Externa El lenguaje de programación Java

Ejemplo:Acceso a todos lo miembros de quien lo contiene interface Iterator{ boolean hasNext(); Object next(); void remove(); } public class Secuencia{ private Objects[] contenido; private int siguiente = 0; public Secuencia(int tamaño){ contenido = new Object[tamaño]; public void añadir(Object obj){ if (siguiente<contenido.length){ contenido[siguiente]=obj; siguiente++; El lenguaje de programación Java

Ejemplo (continuación) //Clase interna accede al atributo contenido de la clase Secuencia private class CIterator implements Iterator{ private int pos=0; public boolean hasNext(){ return (pos < contenido.length); } public Object next(){ if (pos >= contenido.length) throw new NoSuchElementException(); return contenido[pos++]; public void remove(){ throw new UnsupportedOperationException(); }//Fin de la clase Interna public Iterador iterador(){ return new CIterador(); } //Fin de la clase Secuencia El lenguaje de programación Java

Uso del iterador de la clase Secuencia Secuencia s = new Secuencia(10); ... Iterator iter = s.iterator(); while (iter.hasNext()){ System.out.println(iter.next()); } El lenguaje de programación Java

Clases internas locales Pueden definirse en cualquier punto del código (ej. dentro de un método). Inaccesibles desde el exterior del bloque de código donde se definen. Pueden acceder a todas las variables que estén dentro del alcance de donde se define (ej. variables y/o parámetros de un método) si se declaran como final. El lenguaje de programación Java

Ejemplo: Iterador creado dentro de un método public Iterator iterator(){ class CIterador implements Iterator{ private int pos=0; public boolean hasNext(){ return (pos < contenido.length); } public Object next(){ if (pos>= contenido.length) throw new NoSuchElementException(); return contenido[pos++]; public void remove(){ throw new UnsupportedOperationException(); return new CIterador(); El lenguaje de programación Java

Clases internas anónimas Se definen en el mismo momento en el que se instancian con new. No puede tener una cláusula explícita extends o implements. No puede tener constructores explícitos declarados. Permanece la necesidad de invocar a un constructor de la superclase. Ejemplo: subclase anónima que invoca al constructor y redefine un método SuperClase var = new SuperClase (valor){ public void met(Object obj){ //redefinicion de met } }; El lenguaje de programación Java

Ejemplo: Iterador anónimo public Iterator iterator(){ return new Iterator(){ private int pos=0; public boolean hasNext(){ return (pos < contenido.length); } public Object next(){ if (pos>= contenido.length) throw new NoSuchElementException(); return contenido[pos++]; public void remove(){ throw new UnsupportedOperationException(); }; El lenguaje de programación Java

Ventajas de la clases anidadas e internas Reduce los conflictos de nombres. Proporciona una organización estructural adicional a los paquetes y clases. Ejemplo: Lista.Nodo, Arbol.Nodo Implementar una clase (la clase interna) que necesite acceder a la estructura interna de otra porque necesite devolver objetos con privilegios. Ejemplo: iterador sobre un escenario Callbacks-Simplifica la gestión de eventos (GUI). El lenguaje de programación Java