Programación Orientada a Objetos

Slides:



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

Curso de java básico (scjp)
CJ02 – Técnicas avanzadas en java 1.4 y 5.0
Herencia en C#.
Lenguaje de consulta de Hibernate
Capitulo 3 Java util.
Marzo 2007 Lenguajes Visuales Clase III.
Lenguajes de Programación Tema 4. Paradigma Orientado a Objetos Java 1.5 Pedro García López
JAVA 1.5 Fernando Almeida Octubre Introducción Java Specification Request (JSR) 14Java Specification Request (JSR) 14 propone introducir tipos y.
Tablas hash Juan Ramón Pérez Pérez Prácticas EDI - © Juan Ramón Pérez.
Técnicas avanzadas de programación Interfaces
Colecciones.
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.
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.
Tema 17: java.util Antonio J. Sierra.
Informática III Colecciones en Java Lectura adicional: interface.html.
Programación Orientada a Objetos
Programación Orientada a Objetos Profesor : Ernesto Eduardo Vivanco Tapia.
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.
Algoritmos y Programación III 4. Colecciones, excepciones Carlos Fontela, 2006.
Tratamientos Secuenciales Generalizados II Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 19 Versión
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.
Implementación de Iterables Construcción de Iterables virtuales o basados en otros iterables Fundamentos de Programación Departamento de Lenguajes y Sistemas.
Tipos SortedSet, Map y SortedMap Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Unidad Didáctica 16.
Diseño de tipos Igualdad, representación, código, copia y relación de orden Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos.
Tratamientos secuenciales I Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 8 Versión
Iterables virtuales Concepto, Metodología de desarrollo y Ejemplos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión.
Criterios de ordenación y Guava Comparator, Comparable y Ordering Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión.
Crear Aplicación Cliente para Conectarse a una Base de Datos.
Introducción a la Programación Orientada a Objetos (POO) Conceptos de clase, objeto e interfaz. Atributos y métodos Fundamentos de Programación Departamento.
1 Clase 5: primeros programas (3ª parte) iic1102 – introducción a la programación.
Interfaces y Clases Internas ELO329: Diseño y Programación Orientados a Objetos.
PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento y constructores.
Unidad Didáctica 11 Reutilización Versión 1.0.0
Programación Avanzada
Programación Avanzada
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
ArrayList Collecciones
Colecciones Carlos Fontela, 2008.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
El celular en los parciales SI o NO
IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería
Vectors (Vectores)‏ e Iteradores
Diseño y Programación Orientada a Objetos
Diccionarios y Colecciones
Sonia Rueda Herencia y Polimorfismo
Diccionarios y Mapeos Estructuras de Datos 2017.
Herencia en C#.
Interfaces Gráficas de Usuario
IPOO 2 cuatrimestre 2016 Departamento de Ciencias e Ingeniería
IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería
Vectors (Vectores)‏ e Iteradores
ARRAYS Y COLECCIONES DE DATOS
Fundamentos básicos del lenguaje C#. Parte 1 Introducción a C#
Interfaces Gráficas de Usuario
IPOO 2 cuatrimestre 2018 Departamento de Ciencias e Ingeniería
Diccionarios y Colecciones
Vectors (Vectores)‏ Agustín J. González ELO329.
Templates (en español: Pantillas, modelos, patrones)‏
Programación Orientada a Objetos
Programación Orientada a Objetos
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Clases abstractas e interfaces
TALLER DE CERTIFICACIÓN INTERNACIONAL
Transcripción de la presentación:

Programación Orientada a Objetos Unidad 4 Colecciones Universidad de Chile Departamento de Ciencias de la Computación Profesor: Juan Claudio Navarro jnavarro@dcc.uchile.cl, juancla.navarro@gmail.com

Temario Generics Interfaces Implementaciones Ordenamiento Algoritmos Collection List Set Queue Map Implementaciones Ordenamiento Algoritmos

Framework de Colecciones Java provee un framework de colecciones en el paquete java.util, que contiene: Interfaces: tipos abstractos de datos que representan colecciones Implementaciones: implementaciones concretas de las interfaces Algoritmos: métodos que realizan cálculos útiles, como buscar y ordenar

Generics Generics permite parametrizar tipos de datos, lo que hace posible diseñar clases y métodos que difieren la especificación de uno o más tipos de datos hasta que la clase (o método) sea declarada e instanciada class ListaGenerica<T> { void agregar(T elemento) { ... } } class Prueba { void prueba() { ListaGenerica<Integer> lista1 = new ListaGenerica<Integer>(); lista1.agregar(5); lista1.agregar(45627); listaGenerica<Persona> lista2 = new ListaGenerica<Persona>(); lista2.agregar(new Persona(...)); ...

Interfaces El framework de colecciones de Java está basado contiene dos interfaces en la raíz de la jerarquía Collection: grupo de elementos ; permite agregar elementos a la colección y luego recorrerlos Map: objeto que asocia llaves y valores ; permite asociar objetos a llaves, y posteriormente obtener los objetos a partir de sus llaves

Interfaces

Implementaciones de Colecciones

Listas Listas v/s arreglos: Las listas crecen dinámicamente El framework de colecciones provee métodos utilitarios: búsqueda, ordenamiento, etc. List<String> lista = new ArrayList<String>(); lista.add("Hola"); lista.add("A ver qué tal..."); lista.add("Chao!"); Collections.sort(lista); System.out.println(lista);

Comparación y Ordenamiento Los elementos se ordenan en base a: su "orden natural", dado por su implementación de la interfaz Comparable una implementación de la interfaz Comparator entregada como parámetro a métodos de ordenamiento, o a constructores de colecciones ordenadas La interfaz Comparable<T>: El método compareTo(T o) retorna negativo, 0 o positivo, según si el objeto es menor, igual o mayor que el parámetro, respectivamente Muchas clases de la librería estándar implementan esta interfaz: las clases numéricas, String, Date, etc. La interfaz Comparator<T>: El método compare(T o1, T o2) retorna negativo, 0 o positivo, según si el parámetro o1 es menor, igual o mayor que el parámetro o2, respectivamente

Comparando Objetos Propios Para comparar objetos propios, se debe implementar Comparable o Comparator class Persona implements Comparable<Persona> { private final String nombre; private final String apellido; public Persona(String nombre, String apellido) { this.nombre = nombre; this.apellido = apellido; } public String getNombre() { return nombre; } public String getApellido() { return apellido; } public int compareTo(Persona p) { int n = apellido.compareTo(p.apellido); return n != 0 ? n : nombre.compareTo(p.nombre); public String toString() { return apellido + ", " + nombre; }

Comparando Objetos Propios public class PruebaOrdenamiento { public static void main(String[] args) { List<Persona> personas = new ArrayList<Persona>(); personas.add(new Persona("Sergio", "González")); personas.add(new Persona("Carolina", "Alvarez")); personas.add(new Persona("Andrea", "González")); personas.add(new Persona("Patricio", "Sotomayor")); Collections.sort(personas); System.out.println(personas); }

Implementaciones de List y Set La interfaz List Provee manejo posicional Existen dos implementaciones principales ArrayList: en general, tiene mejor desempeño, tiene tiempo constante de acceso a los datos LinkedList: puede ser mejor que ArrayList cuando se insertan muchos elementos por el comienzo, o cuando se itera y se eliminan elementos al interior La interfaz Set No permite elementos duplicados HashSet: no ordena los elementos TreeSet: provee ordenamiento (implementa SortedSet), basado en el "orden natural" de los elementos (implementación de Comparable), o en el orden definido por una implementación de Comparator entregada como parámetro en el constructor

La Interfaz Iterator Un Iterator es un objeto que permite recorrer un Collection public interface Iterator { boolean hasNext(); Object next(); void remove(); // opcional } Ejemplo: un filtro static void filter(Collection c) { Iterator i = c.iterator(); while (i.hasNext()) if (!cond(i.next())) i.remove();

Maps Un Map asocia llaves a valores Un Map no permite llaves duplicadas Operaciones principales: put(K llave, V valor): agrega un par (llave, valor) V get(K llave): obtiene el valor asociado a una llave Set<K> keySet(): retorna el conjunto de llaves Collection<V> values(): retorna la colección de valores Set<Map.Entry<K,V>> entrySet(): retorna el conjunto de pares Implementaciones principales HashMap: almacena los elementos en un hash table, y tiene el mejor desempeño TreeMap: almacena los elementos ordenados ascendentemente por sus llaves; el ordenamiento puede estar basado en el "orden natural", o en un Comparator particular, al igual que en TreeSet

Implementaciones de Map

Uso de Map Agregando y recuperando información: Map<String,String> map = new HashMap<String,String>(); map.put("hola", "Buenos días"); map.put("chao", "Hasta pronto"); System.out.println(map.get("hola")); System.out.println(map.get("chao")); Iterando sobre las llaves: for (Object key : map.keySet()) System.out.println(key); Iterando sobre los valores: for (Object value : map.values()) System.out.println(value); Iterando sobre los pares {llave,valor}: System.out.println(key + " - " + map.get(key));

Algoritmos Java provee un conjunto de algoritmos polimórficos en la clase Collections: binarySearch(), copy(), fill(), max(), min(), replaceAll(), reverse(), rotate(), shuffle(), sort(), swap() La mayoría opera sobre objetos de tipo List, pero algunos (min y max) operan sobre objetos Collection

Implementaciones “Wrapper” Implementaciones “wrapper” delegan el trabajo a la colección especificada, y agregan funcionalidad extra La clase Collections provee métodos static para crear colecciones sincronizadas e inmutables public class Collections { public static Collection synchronizedCollection(Collection c); public static Set synchronizedSet(Set s); public static List synchronizedList(List list); public static Map synchronizedMap(Map m); public static SortedSet synchronizedSortedSet(SortedSet s); public static SortedMap synchronizedSortedMap(SortedMap m); ... public static Set unmodifiableSet(Set s); public static List unmodifiableList(List list); public static Map unmodifiableMap(Map m); public static SortedSet unmodifiableSortedSet(SortedSet s); public static SortedMap unmodifiableSortedMap(SortedMap m); }

LINQ (.NET) .NET incluye una librería de colecciones similar a la de Java Language-Integrated Query (LINQ) permite construir y ejecutar queries que operan sobre diferentes fuentes de datos: colecciones, bases de datos, datasets de ADO.NET, documentos XML, etc.

Ejemplos LINQ Un ejemplo simple Obteniendo un valor “singleton” Recorriendo objetos de una estructura de datos

Resumen Interfaces principales: Collection, List, Set, Queue, Map Es posible agregar (add()) elementos a un Collection, y luego recorrerlos (iterator()) Un Map permite asociar valores a llaves (put()), y luego obtener el valor asociado a una llave (get()) Las colecciones soportan el "ordenamiento natural" de los elementos, y ordenamientos particulares definidos como implementaciones de la interfaz Comparator La clase Collections provee un conjunto de algoritmos polimórficos (ordenamiento, búsqueda, etc.), y métodos para generar colecciones inmutables y sincronizadas