CJ02 – Técnicas avanzadas en java 1.4 y 5.0

Slides:



Advertisements
Presentaciones similares
Curso de java básico (scjp)
Advertisements

CJ02 – Técnicas avanzadas en java 1.4 y 5.0
Técnicas avanzadas en java 1.4 y java 5.0
Curso de java básico (scjp)
Sun Microsystems desarrolló, en 1991, el lenguaje de programación orientado a objetos que se conoce como Java. La intención de Sun era crear un lenguaje.
Java nos ofrece System.out para escribir en pantalla, pero también tenemos System.in para leer. System.in es un objeto de una clase de java que se llama.
Ayudantía Pre-Actividad 5 Multimedios. Ayudantía Pre-Actividad 5 (1) creación de varias clases, y composición (2) manejo de threads (3) manejo de excepciones.
Curso de java básico (scjp)
Curso de java básico (scjp)
Introducción a la programación en JAVA
EXCEPCIONES UNIDAD 5.
Programación Interactiva Introducción a Java
Tablas. Descripción general Introducción a las tablas Creación de tablas Uso de tablas.
POLIMORFISMO "una interfaz, múltiples métodos".
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.
Conceptos más avanzados de Programación Orientada a Objetos Programación 2005 Licenciatura de Lingüística y Nuevas Tecnologías.
Lenguaje de consulta de Hibernate
Arquitectura CLARO-TECNOTREE CAPITULO 4: Excepciones
Capitulo 4 Excepciones.
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.
UNIVERSIDAD LATINA (UNILA)
Marzo 2007 Lenguajes Visuales Clase III.
Excepciones y archivos Info 033. Exception El término Exception es la palabra corta para la frase "evento excepcional." Definition: Una excepción es un.
Primer Programa en JAVA
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.
Métodos Algoritmos y Desarrollo de Programas I. Cuando utilizar métodos  Los métodos se utilizan para romper un problema en pedazos de forma que este.
Estructuración y modularidad de los programas Fundamentos de Programación/ Programación I
Estructuras de Control
Polimorfismo Lenguajes de Programación II Corporación Universitaria del Caribe CECAR.
Lic. Rosemary Torrico Bascopé
Inicio Java: Algunas utilidades. Inicio Temporización En ingeniería nos encontramos con tareas que deben repetirse de forma periódica. Son tareas temporizadas.
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.
Tema 6: Clases Antonio J. Sierra.
Variables polimórficas (plantillas): definición, uso y aplicación
Técnicas avanzadas de programación Interfaces
Colecciones.
Igor Santos Grueiro. Ahora tenemos datos y datos …
1 TEMA 5. Seguridad en Java 1.Introducción a los Controladores de Seguridad 2.Decidir qué Métodos Sobreescribir del SecurityManager 3.Escribir un Controlador.
Programación orientada a objetos
SCJP Sun Certified Programmer for Java 6
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.
Jerarquía de Clases: Herencia, Composición y Polimorfismo
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SEMANA TRES ASIGNACION.
JAVA J.A.C..
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6
ESTRUCTURA DE DATOS EN JAVA
Patrones Creacionales
El lenguaje de programación Java
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA SIETE GENERICOS Y COLECCIONES.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA SIETE GENERICOS Y COLECCIONES.
1 Polimorfismo y Métodos Virtuales Agustín J. González ELO329.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6
Herramientas de polimorfismo y herencia en C++
Programación Orientada a Objetos
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6
Ivette C. Martínez - Héctor Palacios Java – Modulo 1 Introducción y Fundamentos del lenguaje de programación Java.
El lenguaje de programación Java1 8. Colecciones e iteradores - interfaz Collection - clases ArrayList, LinkedList, HashSet, TreeSet - interfaz Map - clases.
Colecciones en JAVA José Luis Redondo García.
PROGRAMACIÓN ORIENTADA A OBJETOS Unidad 1 GENERICIDAD
Algoritmos y Programación III 4. Colecciones, excepciones Carlos Fontela, 2006.
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.
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.
Concepto de Tipo y Subtipo Diseño e Implementación Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 10 Versión.
Transcripción de la presentación:

CJ02 – Técnicas avanzadas en java 1.4 y 5.0 Parte 2 - Novedades en java 5.0

Objetivos generales Generics Definición y uso Subtipos Wildcards Type erasure

GENERICS

Generics “Generics” permite abstraerse sobre los tipos Clases, interfaces y métodos pueden ser parametrizadas como Tipos. Permite crear código seguro. Si el código compila sin errores o warnings entonces no lanzará excepciones de ClassCastException en tiempo de ejecución. Permite crear código más simple y legible En versiones de Java 5, cuando se introducían objetos en una colección estos se guardaban como objetos de tipo Object, aprovechando el polimorfismo Esto obligaba a hacer un casting al tipo original al obtener los elementos de la colección: import java.util.ArrayList;  import java.util.List;     public class Ejemplo {     public static void main(String[] args) {       List lista = new ArrayList();       lista.add("Hola mundo");         String cadena = (String) lista.get(0); //casting.       System.out.println(cadena);     }   }  En versiones posteriores, se introdujo el concepto de Generics, para evitar esta situación. De esta forma, Generics permite crear código seguro, ya que ya sabemos de que tipo son los objetos que colocamos en una lista.

Generics Problemas: El compilador no puede chequear tipos en tiempo de compilación. Imposibilidad de definir listas de determinados tipos Ventajas: Decirle al compilador el tipo que maneja la colección El compilador realiza el casting Ver problemas: GenericsLab.java y GenericsLab2.java Como vemos, si se guardan objetos de distintos tipos en una misma lista, para acceder a ellos, debemos preguntarle a cada uno que tipo tiene, dado que si hiciéramos el casting a un objeto con el tipo erróneo, obtendríamos un error.

Generics – Definición y uso Definición:LinkedList<E> Parametro E representa el tipo de elementos guardados en la lista. Uso Reemplazar el parametro <E> por el tipo concreto, ejemplo: <Integer> Solo guardará elementos Integer en la lista LinkedList<Integer> li = new LinkedList<Integer>(); En este ejemplo, se muestra cómo definir una lista tipada. LinkedList, sólo guardará objetos de tipo Integer. Ejemplo: import java.util.ArrayList;   import java.util.List;      public class Ejemplo {     public static void main(String[] args) {       List<String> lista = new ArrayList<String>();       lista.add("Hola mundo");       String cadena = lista.get(0);       System.out.println(cadena);     }   }   En este ejemplo, manejamos una lista de Strings.

Generics – Definición y uso (2) // Definición Interface List interface List<E>{ void add(E x); Iterator<E> iterator(); } // Uso con tipo concreto String List<String> ls = new ArrayList<String>(10); En este ejemplo, vemos la definición de la interfaz List, para el manejo de listas. Recordar, que una interfaz define un contrato, es decir un conjunto de funcionalidades.

Generics – Definición y uso (3) En J2SE 5.0, todas las colecciones se reescribieron para ser clases Generics Vector<String> vs = new Vector<String>(); vs.add(new Integer(5)); // Compile error! vs.add(new String(“hello”)); String s = vs.get(0); // No casting needed En la versión 5 de Java, todas las colecciones fueron modificadas para que soporten Generics. Por lo tanto, ahora podemos usar vectores y listas con un tipo determinado.

Generics – Definición y uso (4) Clases generics pueden tener múltiples parámetros. HashMap<String, Mammal> map = new HashMap<String, Mammal>(); map.put(“wombat”, new Mammal("wombat")); Mammal w = map.get(“wombat”); En este ejemplo, vemos la estructura HashMap. Un hashmap, es una doble lista, la cual posee una clave y un valor. Un claro ejemplo para este tipo es una agenda telefónica, en la cual la clave son las letras del abecedario y los valores, los teléfonos y nombres de las personas cuyo nombre comienza con la letra de la clave. Para el ejemplo, la clave es de tipo String y el valor asociado es de tipo Mammal.

Generics – Generics y subtipos Casting de tipos: Object o = new String(“pepe”); //Correcto El siguiente código es incorrecto. Puede existir un error en tiempo de ejecución al generalizar. ArrayList<Integer> ai = new ArrayList<Integer>(); ArrayList<Object> ao = ai; // puede fallar ao.add(new Object()); Integer i = ai.get(0); // runtime ClassCastException En estos ejemplos, vemos que al querer asignar ArrayList<Object> ao = ai; , podemos obtener un error, dado que los tipos de ambos arraylist son distintos. En cuanto al segundo ejemplo, donde: Integer i = ai.get(0); , en este caso, se quiere obtener un objeto de Integer de una lista a la cual se le agregó un objeto de tipo Object. Recordar que al ser un Object, estamos en la raíz de la jerarquía de tipos, por lo que no podemos decir directamente que dicho objeto es un Integer. Por esta razón, obtenemos el error: ClassCastException, dado que el casting a Integer no es correcto.

Generics – Generics y subtipos (2) El siguiente código funciona: ArrayList<Integer> ai = new ArrayList<Integer>(); List<Integer> li = new ArrayList<Integer>(); Collection<Integer> ci = new ArrayList<Integer>(); Collection<String> cs = new Vector<String>(4); Si existen relaciones de herencia entre las clases generics En este ejemplo, se definieron varias estructuras con sus correspondientes tipos.

Generics – Generics y subtipos (3) El siguiente código funciona: ArrayList<Number> an = new ArrayList<Number>(); an.add(new Integer(5)); an.add(new Long(1000L)); an.add(new String(“hello”)); // compile error Entradas en una colección mantienen relación de herencia. En el ejemplo anterior, al agregar tipos derivados de la clase Number, no se obtienen problemas, dado que se respeta el tipo de la estructura. Sin embargo, no sucede lo mismo cuando intentamos agregar un objeto de tipo String. En ese caso, obtenemos un error en tiempo de compilación, ya que el compilador sabe que el tipo de la lista es Number, mientras que el objeto que se intenta agregar es String.

Generics – Wildcard (Comodines) Problema. Escribir el código que imprima el contenido de cualquier colección. Primera implementación: static void printCollection(Collection<Object> cols){ Iterator iter = cols.iterator(); while (iter.hasNext()) { System.out.println(iter.next()); } public static void main(String[] args) { ArrayList<String> array = new ArrayList<String>(); printCollection(array); // error de compilación } En este ejemplo, vemos que el método printCollection, recibe una Collection de tipo Object.

Generics – Wildcard (2) Solución – usar un comodin como tipo de argumento <?> Collection<?> significa: colección de tipo desconocido static void printCollection(Collection<?> cols){ Iterator iter = cols.iterator(); while (iter.hasNext()) { System.out.println(iter.next()); } Ver ejemplo: Wildcard.java Como vemos, al no especificar el tipo de la collection, no obtenemos un error de tipos, dado que este es desconocido.

Generics – Type Erasure Puedo instanciar una clase definida con generics sin utilizar ningún parámetro. Código escrito en versiones previas a J2SE 5.0 sigue compilando sobre la JVM J2SE 5.0. ArrayList<String> a = new ArrayList<String>(); ArrayList a = new ArrayList(); En versiones anteriores a Java , no se manejaban los Generics, por lo que al definir un ArrayList, una Collection, un Vector, no se especifica el tipo de la misma. Esta implementación, puede ser utilizada en Java 5.0.

Generics – Type Erasure Toda la información generada con Generics es eliminada luego de la compilación. La información de generics no existe en tiempo de ejecución ArrayList<Integer> ai = new ArrayList<Integer>(); ArrayList<String> as = new ArrayList<String>(); System.out.println(ai.getClass() == as.getClass()); ¿Que devuelve? Dado que toda la información generada con Generics es eliminada luego de la compilación, al ejecutar dicho código, obtenemos el valor true. Ambas listas son de tipo ArrayList.

Generics – Definiendo Generics Agregar en la definición de la clase los tipos de parametros Puedo definir mas de un tipo Class XXX<A,B,C> Por estandarización, utilizar letras mayusculas para definir los tipos. Utilizar dentro de la clase los tipos de parametros definidos en el encabezado como un tipo más.

Generics – Definiendo Generics Ejemplo: public class Pair<F, S> { F first; S second; public Pair(F f, S s) { first = f; second = s; } F getFirst(){ return first; En este ejemplo, definimos la clase Pair, con dos tipos: F y S. Como vemos, los nombres de los tipos están en mayúsculas, definimos más de un solo tipo y los utilizamos como si fueran otro tipo mas.

Generics – Definiendo Generics Se pueden definir especificaciones sobre tipos generics al utilizar comodines <?> Class Numero<E extends Number>{} Void metodo(Numero<? extends Integer> num){} No se puede indicar que un tipo generics implementa una interface. Class Numero<E implements Interface>{} //error de compilación Void metodo(Numero<? implements Interface > num){} //error de compilación Como vemos, los tipos definidos, pueden heredar de distintas clases pero no impementar interfaces. Para el caso: Class Numero<E extends Number>{} Vemos que la clase Numero, tiene un tipo E, el cual hereda de la clase Number, por lo tanto, al utilizar dicha clase, el tipo utilizado debera si o si heredar de Number. Class Numero <Long>{} //ok Class Numero <String>{} // error, ya que String no es válido.

Resumen Generics: qué son? Cómo se usan? Definición y uso Subtipos: como se aplica? Wildcards: ejemplos. Type erasure: ejemplos.

Bibliografía The Java Tutorial Trail de Generic http://java.sun.com/docs/books/tutorial/extra/generics/index.html Documentación online Java SE 5 http://java.sun.com/j2se/1.5.0/docs/ Especificación de la API Java SE 5 http://java.sun.com/j2ee/1.5.0/docs/api