JAVA 1.5 Fernando Almeida Octubre 2004. Introducción Java Specification Request (JSR) 14Java Specification Request (JSR) 14 propone introducir tipos y.

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)
2. Manejo de memoria Manejo de memoria estática
Curso de java básico (scjp)
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.
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:
Herencia en C#.
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.
Conceptos más avanzados de Programación Orientada a Objetos Programación 2005 Licenciatura de Lingüística y Nuevas Tecnologías.
Capitulo 3 Java util.
Introducción Eventos y Delegados.
Genéricos en Java Jaime Ramírez, Ángel Lucas González
Herencia y Polimorfismo
1.2 Sintaxis del lenguaje Java.
Algoritmos y Estructuras de Datos
Programación Orientada a Objetos en Java
Marzo 2007 Lenguajes Visuales Clase III.
PROGRAMACIÓN EN JAVA Curso-taller inicial de programación en JAVA Facultad de Estadística e Informática TEMA II.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Herencia e Interfaces.
0. Desarrollo de Programas: técnica del refinamiento.
Herencia y Polimorfismo en JAVA
Abstracción de los datos y Orientación a Objeto Clase 13.
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.
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
Colecciones.
Programación orientada a objetos
1 Interfaces Agustín J. González ELO Introducción En C++ se permite la herencia múltiple; es decir, es posible derivar una clase de dos o más clases.
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.
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.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SEMANA TRES ASIGNACION.
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.
ESTRUCTURA DE DATOS EN JAVA
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.
Herramientas de polimorfismo y herencia en C++
Interfaces y Clases Internas ELO329: Diseño y Programación Orientados a Objetos.
Interfaces ELO329: Diseño y Programación Orientados a Objetos.
1 Interfaces y Clases Internas ELO-329: Diseño y programación orientados a objetos Agustín J. González.
El lenguaje de programación Java1 8. Colecciones e iteradores - interfaz Collection - clases ArrayList, LinkedList, HashSet, TreeSet - interfaz Map - clases.
Herencia. Introducción La idea básica es poder crear clases basadas en clases ya existentes. Cuando heredamos de una clase existente, estamos re-usando.
Colecciones en JAVA José Luis Redondo García.
Detalles Generales sobre Java
PROGRAMACIÓN ORIENTADA A OBJETOS Unidad 1 GENERICIDAD
1 Asignación Dinámica de Memoria Agustín J. González ELO 329.
Programación orientada a objetos Capítulo 5 Comportamiento más sofisticado.
Algoritmos y Programación III 4. Colecciones, excepciones Carlos Fontela, 2006.
Clases “ Es una Abstracción de un elemento del mundo real ”
TALLER POO JAVA ERNESTO GOMEZ VARGAS. OBJETIVOS REALIZAR UNA APLICACIÓN SENCILLA DE P.O.O FAMILIARIZARSE CON LA HERRAMETA NETBEANS APLICAR EL CONCEPTO.
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,
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.
Arrays, Cadenas y Vectores Tipos Genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 5 Versión
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.
Colecciones Carlos Fontela, 2008.
Transcripción de la presentación:

JAVA 1.5 Fernando Almeida Octubre 2004

Introducción Java Specification Request (JSR) 14Java Specification Request (JSR) 14 propone introducir tipos y métodos genéricos en el lenguaje de programación JAVA. Desde los comienzos de JAVA, los desarrolladores han intentado agregarle los tipos genéricos al lenguaje. Los tipos genéricos han sido usados por años en otros lenguajes de programación y ahora serán parte de Java 1.5.

Mejoras generales de JAVA 1.5 Incorporación de Tipos Genéricos (Generics). Autoencapsulamiento y Desencapsulamiento. Importación estática. Sentencia FOR mejorada.

Tipos Genéricos Probablemente sea más conocido por parameterized types (tipos-parametrizados) ó templates (plantillas). Los dos mayores beneficios de los tipos genéricos in JAVA son: 1- Reducir en número de conversiones (casts) en el programa, así reduciendo el número de posibles errores. 2- Mejorar la claridad del código.

Ejemplo 1 : Reducción de Casts class DangerousCast { public static void main(String[] args) { Stack stack = new Stack(); stack.push(new Integer(1)); stack.push("2"); stack.push(new Integer(3)); while(!stack.isEmpty()) { Integer integer = (Integer) stack.pop();.... } } }

Ejemplo1 : Reducción de Casts (Generics) class CompilerSavesTheDay { public static void main(String[] args) { Stack stack = Stack (); stack.push(new Integer(1)); stack.push("2"); //Error de compilación. stack.push(new Integer(3)); while(!stack.isEmpty()) { Integer integer = stack.pop();.... }

Mejorar la claridad del código // Instancia de la estructura de datos List list = new LinkedList(); list.add(new LinkedList()); // Agregando un valor ((List) list.get(0)).add("value"); // Obteniendo un valor String value = (String) ((List) list.get(0)).get(0);

Mejorar la claridad del código (Generics) // instancia de la estructura de datos List > list = new LinkedList >(); list.add(new LinkedList ()); // Agregando un valor list.get(0).add("value"); // Obteniendo un valor String value = list.get(0).get(0);

Ejemplo de colecciones con Generics // Declaración de Map que acepta Integers y Strings. Map meses = new HashMap (); months.put(1, "Enero"); months.put(2, "Febrero"); months.put(3, "Marzo");.... // retorna "Enero“ String month = meses.get(1); // Declaración de una Lista de Strings List dias = new ArrayList (); days.add("Domingo"); days.add("Lunes"); days.add("Martes");

Ejemplo de colecciones con Generics // Definición de un Comparator para ordenar descendentemente // Strings en una rutina de sort. Comparator comparator = new Comparator () { public int compare(String s1, String s2) { return -s1.compareTo(s2); } }; // Ordenar los días en orden descendente Collections.sort(dias, comparator); // retorna Martes String dia = dias.get(0);

Colección sin utilizar Generics (Advertencia del compilador) // El siguiente código funciona pero genera una // advertencia de compilación. List diasNoSeleccionados = new ArrayList(); diasNoSeleccionados.add("Domingo"); diasNoSeleccionados.add("Lunes"); diasNoSeleccionados.add("Martes"); String diaNoSeleccionado ; diaNoSeleccionado = (String) diasNoSeleccionados.get(0);

public class Par { private Object primero; private Object segundo; public Par(Object primero, Object segundo) { this.primero = primero; this.segundo = segundo; } public Object getPrimero() { return this.primero; } Clases Genéricas

public Object getSegundo() { return this.segundo; } public static void main(String[] args) { // Par de número - mes Par ene = new Par(new Integer(1), "Enero"); int numMes ; numMes= ((Integer)ene.getPrimero()).intValue(); String nombreMes = (String) ene.getSegundo(); }

Clases Genéricas (Generics) public class Par { private T1 primero; private T2 segundo; public Pair(T1 primero, T2 segundo) { this.primero = primero; this.segundo = segundo; } public T1 getPrimero() { return this.primero; }

Clases Gnéricas (Generics) public T2 getSegundo() { return this.segundo; } public static void main(String[] args) { // Par número – mes Par ene; ene = new Par (1, "Enero"); int numMes = ene.getPrimero(); String nombreMes = ene.getSegundo(); }

Implementar una extensión de java.util.ArrayList que solo acepte tipos Number. public class MyNumberList extends java.util.ArrayList { public double sum() {.... } public double average() {.... } }

Continuación MyNumberList Las siguientes declaraciones son legales: MyNumberList myNumberList = new MyNumberList (); MyNumberList myNumberList2 = new MyNumberList (); Pero las siguientes declaraciones no lo son: MyNumberList myStringList = new MyNumberList (); MyNumberList myBooleanList = new MyNumberList ();

Métodos Genericos Así como las Clases e interfaces pueden ser genéricas, los métodos también pueden recibir parámetros genéricos. Veamos un ejemplo para una rutina de ordenamiento que funcionaría para una Collection de Objetos Comparable. public static void mySortRoutine(Collection collection);

Autoboxing / Unboxing List intList = new ArrayList(); for (int i=0; i < 10; i++) { // Ahora debemos encapsular todo int como Integer intList.add(new Integer(i)); } int sum = 0; for (int i=0; i < intList.size(); i++) { // Precisamos castear a Integer y utilizar intValue() // para obtener un int. int num = ((Integer) intList.get(i)).intValue(); sum += num; }

Autoboxing / Unboxing (Generics) List intList = new ArrayList (); for (int i=0; i < 10; i++) { // No es necesario encapsular los ints intList.add(i); } int sum = 0; for (int i=0; i < intList.size(); i++) { // Se puede obtener el int directamente sum += intList.get(i); }

Importación estática // "Constant Interface" antipattern – No usar! public interface Physics { public static final double AVOGADROS_NUMBER = e23; public static final double BOLTZMANN_CONSTANT = e-23; public static final double ELECTRON_MASS = e -31; } public class Guacamole implements Physics { public static void main(String[] args) { double moles =...; double molecules = AVOGADROS_NUMBER * moles;... }

Importación estática La idea de implementar una interfaz es de proveer un comportamiento y no de proveer constantes. La importación estática es una alternativa bastante clara, es análoga a la importación de paquete, excepto que esta solo importa los miembros estáticos. import static org.iso.Physics.*; class Guacamole { public static void main(String[] args) { double molecules = AVOGADROS_NUMBER * moles;... }

Iteración For con Colecciones void cancelAll(Collection c) { for (Iterator i = c.iterator(); i.hasNext(); ) { TimerTask tt = (TimerTask) i.next(); tt.cancel(); }

Iteración For con Colecciones void cancelAll(Collection c) { for (Object o : c) ((TimerTask)o).cancel(); } Aún mejor con el uso de tipos genéricos (Generics). void cancelAll(Collection c) { for (TimerTask task : c) task.cancel(); }

Links

Fin de la presentación de JAVA 1.5