Está en la página 1de 18

Colecciones y Genricos

Programacin 1

Myhara Aguilar Miranda


Walter Tercero Romero
Axell Chamorro Rodrguez

Docente: Ing. Araceli Torres

Mircoles, 8 de Febrero del 2016


Indice de Contenido:

1. Introduccin 3
2. Objetivos 4
A. Objetivo General 4
B. Objetivos Especficos 4
3. Marco Terico 5
A. Colecciones 5
Definicin 5
Aplicacin y Utilidad en Java 5
Tipos de Colecciones 5
B. Genricos en la POO 11
Definicin 11
Clases y Tipos 13
Mtodos y Constructores 15
4. Conclusiones 17
5. Referencias Bibliogrficas 18

2
1. Introduccin
Actualmente la Programacin Orientada a Objetos es un tema
que circula demasiado actualmente y que esta evolucionando de
manera exponencial de igual forma que nuevas tecnologas y
maneras mas sencillas de programar, de manera que el presente
trabajo esta enfocado en la POO como tal y nos dimos a a tarea
de lograr describir las colecciones y genricos tal y como lo
describen nuestros objetivos, desarrollar a la informacin de una
manera detallada y exacta, pero de igual forma de una manera
breve precisa y concisa para una mayor facilidad durante la
asimilacin de los conceptos y tipos. No olvidemos tambin que
con los distintos ejemplos de cdigos que tambin se pueden
implementar digitalmente desde un lenguaje de programacin
(Java en este caso) para mayor y desarrollo de la lgica del
lector.

3
2. Objetivos
A. Objetivo General
Conocer y comprender los conceptos, tipos y caractersticas de
Colecciones y Genricos de la Programacin Orientada a Objetos
utilizando el lenguaje de Java.
B. Objetivos Especficos
Destacar cada interfaz de las Colecciones y Genricos, de igual
cada un de sus caractersticas de una manera detallada.
Ejemplificar con cdigos cada una da las interfaces presentadas
segn las Colecciones y Genricos.
Aplicar y poner en prctica el contenido de esta investigacin
mediante el desarrollo de cdigos en Java.

4
3. Marco Terico
A. Colecciones
Definicin
Las colecciones son una agrupacin de objetos; de igual forma se les considera
como arrays de tamao dinmico; pero estos pueden ir variando su tamao(El
tamao se puede determinar con el mtodo .size() ), aadir y guardar
nuevos objetos de manera ordenada y/o eliminarlos. Las colecciones estn
contenidas en el paquete Java.util para gestionar colecciones de objetos.

Las colecciones en Java son un ejemplo destacado de implementacin de


cdigo reciclable utilizando un lenguaje orientado a objetos. Sin embargo, la
mayora de Colecciones son de tipo genricas.

Aplicacin y Utilidad en Java


Las colecciones permiten guardar un nmero arbitrario de objetos que se
pueden aadir y quitar por lo tanto cada elemento u objeto tiene un ndice
adems, los valores de los ndices pueden cambiar al eliminar o aadir
elementos

Los tipos abstractos de datos se definen como interfaces por lo tanto, se


implementan clases abstractas que permiten factorizar el comportamiento
comn a varias implementaciones.

Las colecciones estn implementadas como tipos genricos o parametrizados.

Tipos de Colecciones
Las colecciones pueden ser, segn se almacenen los objetos, de 2 tipos:

- Ordenadas: Pueden ser recorridas siguiendo un orden, ya sea por un


ndice como por el orden en el que se han insertado.
- Clasificadas: Los objetos estn clasificados siguiendo un orden
natural.definido por la clase del objeto.

5
En Java las principales interfaces que disponemos para trabajar con
colecciones son: Collection, Set, List, Queue y Map:
- Collection<E>: Define las operaciones comunes a todas las colecciones
de Java y permite usar colecciones basndonos en su interfaz en lugar de la
implementacin.

Operaciones bsicas de consulta:


- size(): devuelve el nmero de elementos.
- isEmpty(): indica si tiene elementos.
- contains(Object e): indica si contiene el objeto pasado como
parmetro utilizando el mtodo equals().

Operaciones bsicas de modificacin:


- add(T e): aade un elemento a la coleccin. Retorna un booleano
indicando si acepta la insercin.
- remove(Object e): intenta eliminar el elemento. Retorna un booleano
indicando si ha sido eliminado. Utiliza el mtodo equals() para localizar el
objeto.
- clear(): elimina todos los elementos.
- addAll(Collection<? extends T> col): aade todos los
elementos de la coleccin col.
- removeAll(Collection<?> col): elimina todos los objetos
contenidos en col.

Ejemplo 1: Collection

6
- List<E>: Elementos en una secuencia particular que mantienen un orden y
permite duplicados. La lista puede ser recorrida en ambas direcciones con un
ListIterator.

Ejemplo 2: List

Hay 3 tipos de constructores:


- ArrayList<E>: Su ventaja es que el acceso a un elemento en
particular es nfimo. Su desventaja es que para eliminar un elemento, se
ha de mover toda la lista para eliminar ese hueco.

La clase ArrayList implementa la funcionalidad de la lista add, get, size,


etc.
El tipo de parmetro indica de qu queremos que sea la lista:

7
- ArrayList<Person>
- ArrayList<TicketMachine>
- etc.
- Vector<E>: Es igual que ArrayList, pero sincronizado. Es decir, que si
usamos varios hilos, no tendremos de qu preocuparnos hasta cierto
punto.
- LinkedList<E>: En esta, los elementos estn conectados con el
anterior y el posterior. La ventaja es que es fcil mover/eliminar
elementos de la lista, simplemente moviendo/eliminando sus referencias
hacia otros elementos. La desventaja es que para usar el elemento N de
la lista, debemos realizar N movimientos a travs de la lista.

- Set<E>: La interfaz Set<T> define conjuntos de elementos no repetidos.


Implementaciones de conjuntos:

- HashSet<T>:
Guarda los elementos del conjunto en una tabla hash.Para evitar la insercin de
elementos repetidos, la igualdad de los objetos se comprueba comparando los
hashCode, si son iguales se compara con equals().

- TreeSet<T>:
Implementacin de conjuntos ordenados basada en rboles binarios
balanceados. Para su funcionamiento es necesario definir un orden (se estudia
ms adelante). Las operaciones de bsqueda y modificacin son ms lentas en
TreeSet que en HashSet.

- SortedSet<T>:
Esta interfaz es muy similar a la interface Set tan solo se diferencia en que
SortedSet permite que los elementos dentro del conjunto de la coleccin estn
ordenados totalmente, facilitando por tanto su acceso en bsquedas y haciendo
ms rpido su consulta.Los elementos son ordenados usando su orden natural,
o bien usando un Comparator.

8
Ejemplo 3: Set (Clase Principal)

Ejemplo 3: Set (Clase Persona)

9
- Queue<E>: Coleccin ordenada con extraccin por el principio e insercin
por el principio (LIFO Last Input, First Output) o por el final (FIFO First
Input, First Output). Se permiten elementos duplicados. No da excepciones
cuando la cola est vaca/llena, hay mtodos para interrogar, que devuelven
null. Los mtodos put()/take() se bloquean hasta que hay espacio en la cola/
haya elementos. Tiene una clase asociada a la que implementa:
- PriorityQueue: Los elementos son ordenados segn su orden natural.

Ejemplo 4: Queue.

- Map<K,V>: Un grupo de pares objeto clave-valor, que no permite duplicados


en sus claves. Es quizs el ms sencillo, y no utiliza la interfaz Collection. Los
principales mtodos son: put(), get(), remove().
- HashMap<K,V>: Se basa en una tabla hash, pero no es sincronizado.
- HashTable<K,V>: Es sincronizado, aunque que no permite null como
clave.
10
- LinkedHashMap<K,V>: Extiende de HashMap y utiliza una lista
doblemente enlazada para recorrerla en el orden en que se aadieron. Es
ligeramente ms rpida a la hora de acceder a los elementos que su
superclase, pero ms lenta a la hora de aadirlos.
- TreeMap<K,V>: Se basa en una implementacin de rboles en el que
ordena los valores segn las claves. Es la clase ms lenta.

Ejemplo 5: Map.

B. Genricos en la POO
Definicin
Los generics fueron introducidos en la versin 5 de Java en 2004 junto con
otras muchas novedades suponiendo en su historia una de las mayores
modificaciones o al mismo nivel de las novedades introducidas con Java 8 ms
recientemente al lenguaje Java.

Los generics son importantes ya que permiten al compilador informar de


muchos errores de compilacin que hasta el momento solo se descubriran en
tiempo de ejecucin, al mismo tiempo permiten eliminar los cast simplificando,
reduciendo la repeticin y aumentando la legibilidad el cdigo. Los errores por
cast invlido son especialmente problemticos de debuggear" ya que el error
se suele producir en un sitio alejado del de la causa.

11
Los generics permiten usar tipos para parametrizar las clases, interfaces y
mtodos al definirlas. Los beneficios son:

Comprobacin de tipos ms fuerte en tiempo de compilacin.


Eliminacin de casts aumentando la legibilidad del cdigo.
Posibilidad de implementar algoritmos genricos, con tipado seguro.
Un tipo usando generics tiene el siguiente aspecto, por ejemplo usando una
clase Box contenedor de una referencia a un tipo no determinado en la
definicin de la clase pero que lo ser en su uso. Una clase genrica puede
tener mltiples argumentos de tipos y los argumentos pueden ser a su vez tipos
genricos. Despus del nombre de la clase se puede indicar la lista de
parmetros de tipos con el formato <T1, T2, T3, >.

Puntos clave:
- T es el tipo genrico que ser reemplazado por un tipo real.
- T es el nombre que damos al parmetro genrico.
- Este nombre se sustituir por el tipo real que se le pasar a la clase.

El resultado ser el siguiente:

Hay que tener en cuenta que los generics de java solo funcionan con objetos. El
cdigo siguiente nos mostrar un error:

Los generics tiene algunas restricciones:

- No se pueden instanciar tipos genricos con tipos primitivos.


- No se pueden crear instancias de los parmetros de tipo.
- No se pueden declarar campos static cuyos tipos son parmetros de tipo.
- No se pueden usar casts o instanceof con tipos parametrizados.
- No se pueden crear arrays de tipos parametrizados.
- No se pueden crear, capturar o lanzar tipos parametrizados que
extiendan de Throwable.
- No se puede sobrecargar un mtodo que tengan la misma firma que otro
despus del type erasure.

12
A pesar de los generics y el compilador es posible poner en un String en un
HashSet<Integer> usando el tipo raw de HashSet, cosa que se denomina Heap
Pollution y que provoca exepciones ClassCastException en tiempo de
ejecucin. Usando colecciones envueltas por los mtodos
Collections.checkedSet, checkedList y checkedMap evitaremos el Heap
Pollution produciendo una excepcin no en el momento de extraer el objeto de
la coleccin sino en el momento de insertarlo.

Clases y Tipos
Existen una serie de convenciones para nombrar a los genricos:
- E Element (usado bastante por Java Collections Framework)
- K Key (Llave, usado en mapas)
- N Number (para nmeros)
- T Type (Representa un tipo, es decir, una clase)
- V Value (representa el valor, tambin se usa en mapas)
- S,U,V etc. usado para representar otros tipos.

Las clases y tipos genricos son una de gran utilidad para programar ciertas
funcionalidades en en entornos de programacin mviles como Android.
En el momento de la instanciacin de un tipo genrico indicaremos el
argumento para el tipo, en este caso Box contendr una referencia a un tipo
Integer. Con Java 7 se puede usar el operador diamond y el compilador inferir
el tipo segn su definicin para mayor claridad en el cdigo. Podemos usar
cualquiera de esta dos maneras prefiriendo usar el operador diamond por ser
ms clara.

Para mantener la compatibilidad con versiones anteriores a Java 5 los tipos


genricos que al usarse no indican argumentos de tipo se denominan raw. El
compilador indicar una advertencia como un uso potencialmente peligroso ya
que no podr validar los tipos.

13
Adems de las clases los mtodos tambin pueden tener su propia definicin
de tipos genricos.

La sintaxis completa de uso sera:

Aunque puede abreviarse ya que el compilador puede inferir los tipos:

Una clase puede tener mltiples limitaciones, si una es una clase debe ser la
primera y el resto de argumentos interfaces.

Un tipo puede ser asignado a otro mientras el primero sea compatible con el
segundo, es decir tengan una relacin es un. Una referencia de Object puede
referenciar una instancia de Integer (un Integer es un Object).

Sin embargo, en el caso de los generics, una referencia de Box<Number>


puede aceptar una instancia Box<Integer> or Box<Double> aun siendo Integer
y Double subtipos de Number?. La respuesta es no, ya que Box<Integer> y
Box<Double> en Java no son subtipos de Box<Number>. La jerarqua de tipos
es la siguiente:

14
Los tipos genricos pueden extenderse o implementarse y mientras no se
cambie el tipo del argumento la relacin es un se preserva. De modo que
ArrayList<String> es un subtipo de List<String> que a su vez es un subtipo de
Collection<String>.

La Clase ArrayList<E>
- Define un grupo de objetos de tipo E a los que se accede a partir del
ndice.
- Permite el crecimiento dinmico de la estructura de datos.
public class TestArrayList{
public static void main(String args[]){
List<Figura> lista = new ArrayList<Figura>();
lista.add(new Circulo());
Figura f = lista.get(0);
Circulo c = (Circulo) lista.get(0);
}}
El mtodo get puede lanzar IndexOutOfBoundsException (RuntimeException)

Mtodos y Constructores
Al igual que se definen clases genricas, es posible definir mtodos genricos
(incluso en clases no genricas).

15
Un cdigo genrico de ordenacin requiere:
- Restringir el tipo de datos de los elementos del vector a aquellos que
sean comparables.
- La clase de los elementos del vector debe implementar la interfaz
- Comparable<T>.

Los mtodos equals y compareTo


Se recomienda que las definiciones de equals y compareTo sean compatibles
(x.compareTo(y) == 0 ) < > x.equals(y)

16
4. Conclusiones
Para concluir, con esta investigacin se demuestra que colecciones y tipos
genricos ambos similares pero cada uno con grandes diferencias. De una
manera sintetizada, las colecciones con arreglos de tamao dinmico para
crear conjuntos de datos(es decir el tamao siempre puede variar) y los tipos
genricos son clases o mtodos parametrizados que permiten al usuario
extenderse a otras clases crendolas como genricas tambin.

Las colecciones tienen 4 principales interfaces List, Set, Map y Queue; adems
estn otros tipos de interfaces pero no son muy comunes. Los tipos genricos
poseen una gran cantidad de clases y/o mtodos todos estos se pueden utilizar
importndolos desde el paquete java. e instanciando normalmente para poder
acceder a sus mtodos segn lo que el programador desea realice su cdigo.

Colecciones y Genricos son funcionalidades casi nuevas de haberse aadido


a Java pero han sido muy tiles puesto en su mayora facilitan o mejor dicho se
pueden utilizar funciones para poder programar desde y para entornos mviles
como Android facilitando el desarrollo de nuevas caracterstica, funcionalidades
o aplicaciones con mayor rendimiento y utilidad.

La POO en nuestros das seguir evolucionando al igual que la tecnologa y


muchos otros entornos que lo harn de una manera ms eficaz y eficiente
cuando se implementan, desarrollan o efectan mayores estudios en el mbito
que el estudiante decide elegir siempre y cuando lo realice de una manera
activa y aplicada para una mayor rapidez en torno al desarrollo de nuevas
tecnologas.

17
5. Referencias Bibliogrficas
A. Departamento de Informtica Universidad de Murcia (2013) Colecciones en Java 4. Espaa.
B. Desconocido (2012) Colecciones y Genricos. Espaa.
C. Daniel Alfonso Caballero Cruz (2014) Desarrollo Web, Tecnologa y otras cosas. Mxico
D. Germn Molt (2015) Genericidad en Java. Espaa.
E. Hugo Robles (2016) Tutora acerca de Genricos en Java. Espaa.
F. Jon Segador (2012) Clases y Tipos Genricos. Espaa.
G. Jose I Acedo (2011) Colecciones y tipos genricos en Java. Espaa.
H. Juan Pavn Mestras (2007) Fundamentos de la Programacin Orientada a Objetos. Agrupacin
de objetos. Colecciones e iteradores. Espaa.
I. Manuel Sierra y Jos Luis Cuenca (2012) Curso Lenguaje de programacin Java Nivel Avanzado
I. Espaa
J. Oscar Garca(2013) Mtodos con Parmetros Genricos en Java. Espaa

18

También podría gustarte