Genéricos en Java Jaime Ramírez, Ángel Lucas González

Slides:



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

Curso de java básico (scjp)
Complejidad Computacional
Curso de java básico (scjp)
EXCEPCIONES UNIDAD 5.
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.
Archivos Implementar un método que lea una secuencia de números enteros de un archivo y compute la cantidad de elementos leídos.
Abstracciones y Modelos
Introducción Abdelahad, Corina Natalia Abdelahad, Yanina Zoraida
Lección 1 Introducción a la POO
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
Herencia y Polimorfismo
1.2 Sintaxis del lenguaje Java.
Algoritmo y Estructura de Datos I
Programación Orientada a Objetos en Java
Marzo 2007 Lenguajes Visuales Clase III.
Archivos Contenido: Archivos de Texto Archivos de Acceso Aleatorio
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.
Método en Java.
Recursión Se dice que un método es recursivo si forma parte de sí mismo o se define en función de sí mismo. La recursión es un medio particularmente poderoso.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Introducción a la Programación Orientada a Objetos Redefinición y Sobrecarga Dada la siguiente jerarquía de clases: Alfa Delta Beta.
Herencia e Interfaces.
Java. Objeto Es la instancia de una clase. Cada objeto se crea utilizando la palabra reservada new. Un objeto es conocido como una instancia. Ejemplo.
JAVA 1.5 Fernando Almeida Octubre Introducción Java Specification Request (JSR) 14Java Specification Request (JSR) 14 propone introducir tipos y.
Realizado por: Bertha Palomeque A. Rodrigo Barzola J. Sensor de Temperatura utilizando el Starter Kit Javelin Stamp.
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.
Medio de tele-comunicación
Modificadores.
0. Desarrollo de Programas: técnica del refinamiento.
Herencia y Polimorfismo en JAVA
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.
Tema 6: Clases Antonio J. Sierra.
1 Herencia en Java Agustín J. González Diseño y Programación Orientados a Objetos.
6. Herencia. Clases abstractas. Genericidad
Variables polimórficas (plantillas): definición, uso y aplicación
Unidad I Java y C++ : Similitudes y diferencias
If anidados y Switch Prof. Lillian Bras.
Public class MiClase { public static int tmp = 123; // miembro variable public static final double PI = ;// miembro constante public float.
Técnicas avanzadas de programación Interfaces
Archivos y Búsqueda Secuencial
Programación orientada a objetos
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
Suponiendo que además en la clase U hay: import java.util.*; class U{ static Scanner teclado = new Scanner(System.in); static public int readInt(String.
Jerarquía de Clases: Herencia, Composición y Polimorfismo
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SEMANA TRES ASIGNACION.
El lenguaje de programación Java
JAVA J.A.C..
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
7. Interfaces Herencia múltiple Interfaces Comparable y Comparator
Java. Java nació el año 1991, por un par de ingenieros de la Sun Microsystems.
Capítulo 1 “Elementos de Programación”
Capitulo # 4 herencia PROGRAMACION III UNIVERSIDAD
Prof. Mayra M. Méndez Anota.  Herramientas  Características  Convenciones  Estructura de una clase  Sintaxis de: métodos, atributos, constructores.
ESTRUCTURA DE DATOS EN JAVA
Patrones Creacionales
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
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,
Las interfaces Predicate y Function Versión Unidad Didáctica 17 Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos.
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.
Tipos genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 3.
Paso de parámetros Diseño de programas iterativos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 7 Versión.
Transcripción de la presentación:

Genéricos en Java Jaime Ramírez, Ángel Lucas González DLSIIS. Facultad de Informática Universidad Politécnica de Madrid.

Introducción Java permite definir clases con variables o parámetros que representan tipos => Clases genéricas Esto es posible, cuando el tipo de un dato no afecta al tratamiento que se le va a dar a ese dato. Un mecanismo similar está disponible en lenguajes como C#, C++ o Ada.

Introducción Aparecen en la versión 1.5. Antes se utilizaba la clase Object como “comodín” para simular los genéricos, pero esto conllevaba: Se podían mezclar objetos de las clases más dispares en una misma estructura contenedora de objects. Había que realizar muy a menudo castings (conversión de Object a cualquier otra clase).

Motivación Supongamos que en un programa necesitamos una clase ParEnteros: public class ParEnteros { private int a, b; public ParEnteros(int a, int b){ this.a = a; this.b = b; } public ParEnteros swap (){ return new ParEnteros(b, a);

Motivación Pero también necesitamos un clase ParCaracteres con los mismos métodos que la anterior. La implementación de los métodos es la misma, porque no depende del tipo del dato manipulado => abstraemos el tipo convirtiéndolo en un parámetro genérico T.

Ejemplo clase genérica Par public class Par<T> { private T a, b; public Par(T a, T b){ this.a = a; this.b = b; } public Par<T> swap (){ return new Par<T>(b, a);

Ejemplo clase genérica Par public class Prueba { public static void main(String[] args) { // Instanciación de la clase genérica para Integer // No se puede usar int porque no es una clase Par<Integer> p = new Par<Integer>(1,2); // Instanciación de la clase genérica para Character Par<Character> p1 = new Par<Character>('a','b'); p = p.swap(); p1 = p1.swap(); }

Restringiendo el parámetro genérico Supongamos que deseamos añadir a la clase Par un método max(): public T max(){ return ((a>b) ? a : b); } Si añadimos este método sin más, obtendremos un error de compilación, ya que a y b no tienen por qué ser de un tipo comparable con >.

Restringiendo el parámetro genérico Debemos decirle al compilador que el tipo T sólo representará tipos de valores comparables con el > o una función equivalente (compareTo). public class Par<T extends Comparable> { private T a, b; public Par(T a, T b){ this.a = a; this.b = b; } public T max(){ return ((a.compareTo(b)>0) ? a : b); ..................

Restringiendo el parámetro genérico En general, se puede declarar un parámetro genérico de forma que al instanciar la clase se debe proporcionar una clase A que sea subclase de otra B o implemente una cierta interfaz B: class ClaseGen<T extends B>{ ....................... } ClaseGen<A> obj; // instanciación

Restringiendo el parámetro genérico class Stats< T extends Number > {     private T[] nums;        Stats(T[] o) {       nums = o;     }        double average() {       double sum = 0.0;        for(int i=0; i < nums.length; i++)         sum += nums[i].doubleValue();        return sum / nums.length;    }   }

Restringiendo el parámetro genérico double w = dob.average(); System.out.println("dob average is " + w);  // Esto no compila porque String no es // subclase de Number  // String strs[] = { "1", "2", "3", "4", "5" };  // Stats<String> strob =  // new Stats<String>(strs);    // double x = strob.average();  // System.out.println("strob average is "+v); }   } public class BoundsDemo {  public static void main(String args[]) {   Integer inums[] = { 1, 2, 3, 4, 5 };  Stats<Integer> iob =  new Stats<Integer>(inums); double v = iob.average(); System.out.println("iob average is " + v); Double dnums[] =  { 1.1, 2.2, 3.3, 4.4, 5.5 }; Stats<Double> dob = new Stats<Double>(dnums);     

Clases genéricas como parámetros de funciones boolean sameAvg(Stats<?> ob) {      if(average() == ob.average())         return true;    else      return false; } Por medio del tipo Stats<?> indicamos que esta función puede recibir un objeto de cualquier instancia de la clase genérica Stats<T extends Number>

Clases genéricas como parámetros de funciones Integer inums[] = { 1, 2, 3, 4, 5 };       Stats<Integer> iob = new Stats<Integer>(inums);         double v = iob.average();       System.out.println("iob average is " + v);          Double dnums[] = { 1.1, 2.2, 3.3, 4.4, 5.5 };       Stats<Double> dob = new Stats<Double>(dnums);         double w = dob.average();       System.out.println("dob average is " + w);               System.out.print("Averages of iob and dob ");      if(iob.sameAvg(dob))        System.out.println("are the same.");       else        System.out.println("differ.");  

Herencia y genéricos Véase el ejemplo de los apuntes de la asignatura (pags 75-79): Implementación de una clase genérica Cola.