agrupando objetos (parte-i) - umss€¦ · agrupando objetos en colecciones … (continúa) para...

61
Corina Flores Programa MEMI AGRUPANDO OBJETOS (Parte-I) Por Corina Flores Villarroel [email protected] UMSS - Programa MEMI

Upload: others

Post on 25-Apr-2020

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Corina Flores Programa MEMI

AGRUPANDO OBJETOS (Parte-I)

Por Corina Flores Villarroel [email protected]

UMSS - Programa MEMI

Page 2: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Corina Flores Programa MEMI

Contenido   Conceptos a saber:

  Colecciones   Iteradores   Ciclos   Arreglos

Page 3: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Corina Flores Programa MEMI

Contenido 1.  Agrupando Objetos en colecciones de

tamaño flexible 2.  Una agenda personal 3.  Una mirada a la librería de clases 4.  Objetos estructurados con colecciones 5.  Clases genéricas 6.  Numeración con colecciones 7.  Eliminando un elemento de una colección

Page 4: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Corina Flores Programa MEMI

Contenido continúa … 8.  Procesando una colección entera

8.1 El ciclo for 8.2 El ciclo while 8.3 Iterando sobre una colección 8.4 Acceso por índices vs. iteradores

Page 5: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Corina Flores Programa MEMI

Introducción   El objetivo del capítulo es introducir algunas formas

en las cuales los objetos pueden ser agrupados juntos en colecciones.

  Particularme discutiremos la clase ArrayList, como un ejemplo de colección de tamaño flexible, y el uso de un arreglo de objetos para una colección de tamaño fijo.

Page 6: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Corina Flores Programa MEMI

Introducción En una colección hay necesidad de

iterar (acción de repetir varias veces) sobre elementos de que ésta contiene, para ello se introducirá tres nuevas estructuras de control:

  dos versiones del ciclo for y   el ciclo while

Page 7: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Corina Flores Programa MEMI

¿Qué es una colección? Conjunto de cosas de un mismo tipo que

tienen algo en común. Ej. Marca, tamaño, forma.

Page 8: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Corina Flores Programa MEMI

Agrupando Objetos en colecciones de tamaño flexible

  Cuando escribimos programas, a menudo necesitamos agrupar objetos en colecciones. Por ejemplo:

  Una agenda electrónica para almacenar notas, citas, reuniones, fechas de cumpleaños, y más.

  Registrar los libros y revistas de una biblioteca.

  Mantener un registro o kardex de estudiantes antiguos y presentes.

Page 9: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Corina Flores Programa MEMI

Agrupando Objetos en colecciones de tamaño flexible

  Ante estas típicas situaciones el número de items (elementos) almacenados en una colección varía de vez en vez.

Por ejemplo en una agenda electrónica se pueden: –  Añadir nuevas notas o citas, así como –  Borrar las antiguas

En una biblioteca se pueden: –  Cambiar libros nuevos por antiguos.

Page 10: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Corina Flores Programa MEMI

Agrupando Objetos en colecciones de tamaño flexible

•  Generalmente en los ejemplos citados y otros similares, se maneja un número de elementos que no necesariamente es conocido (fijo) de antemano, lo que significa que el número de elementos de la colección puede ser variable.

•  En los próximos puntos nos ocuparemos de examinar cómo Java permite agrupar un número arbitrario de objetos en un simple contenedor de objetos.

Page 11: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Agrupando Objetos en colecciones … (Continúa)

Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete java.util en el que se encuentra la clase ArrayList. Así:

Un ArrayList contiene tantos objetos como necesitemos

Corina Flores Programa MEMI

import java.util.ArrayList;

Page 12: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Representando colecciones

  Declaración:

Corina Flores Programa MEMI

private ArrayList<TipoDatoObjeto> nombreColeccion;

Hacemos uso de la clase ArrayList

Page 13: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Representando colecciones

  Declaración:

Corina Flores Programa MEMI

private ArrayList<TipoDatoObjeto> nombreColeccion;

String // Objetos de tipo cadena Integer // Objetos de tipo entero Producto // Objetos creados por el usuario que necesitan almacenar un grupo de datos en un sólo objeto llamado Producto

Page 14: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Representando colecciones Declaración

  Declaración:

Corina Flores Programa MEMI

private ArrayList<TipoDatoObjeto> nombreColeccion;

El nombre de la colección representado por una variable

private ArrayList nombreColeccion;

Page 15: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Representando colecciones Inicialización

  Inicialización: Las colecciones se inicializan en el constructor de

la clase que estamos contruyendo, a través de la llamada a su constructor de la clase ArrayList.

Corina Flores Programa MEMI

Page 16: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Representando colecciones Inicialización

Corina Flores Programa MEMI

1.  ArrayList() construye un ArrayList con capacidad cero por defecto, pero crecerá según le vayamos añadiendo. Ejemplos:

nombreColeccion = new ArrayList(); nombreColeccion = new ArrayList<TipoDatoObjeto> ();

  ArrayList tiene varios constructores, dependiendo de cómo necesitemos construir el ArrayList.

  Los siguientes dos constructores nos ayudarán a empezar:

Page 17: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Representando colecciones Inicialización

Corina Flores Programa MEMI

2.  ArrayList(int capacidadInicial) construye un ArrayList vacío con una capacidad inicial especificada:

Ejemplos: nombreColeccion = new ArrayList(5); nombreColeccion = new ArrayList<TipoDatoObjeto> (5);

  Otro de los constructores de ArrayList es:

Un objeto ArrayList sólo contiene referencias a objetos.

Page 18: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Almacenando objetos a la colección

  Almacenar: Para añadir objetos al ArrayList, llamamos a su(s)

método(s) add con el operador punto. Así:

Corina Flores Programa MEMI

public void añadir(TipoDatoObjeto Objeto) { … nombreColección.add(Objeto); … }

Page 19: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Recuperar objetos desde la colección

  Recuperar: Para recuperar u obtener objetos almacenados

desde un ArrayList, llamamos a su(s) método(s) get con el operador punto. Así:

Corina Flores Programa MEMI

public void obtener(int PosicionObjeto) { … nombreColección.get(PosiciónObjeto); … }

Page 20: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Conocer la cantidad de objetos que contiene la colección

  Tamaño actual de la colección: Para saber acerca de la cantidad de objetos

almacenados actual en un ArrayList, llamamos a su método size con el operador punto. Así:

Corina Flores Programa MEMI

public int tamañoActual() { … return nombreColección.size(); }

Page 21: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Recorrer en la colección

  Recorridos: Para recorrer sobre una colección o ArrayList, de

inicio a fin (es decir, toda la colección), utilizamos la clase Iterator para lo que será necesario importar el paquete java.util.Iterator; para llamar a sus métodos iterator(), hasNext() y next con el operador punto. Así como se nota en el ejemplo:

Corina Flores Programa MEMI

import java.util.Iterator;

Page 22: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Recorrer en la colección (Iterator)

Corina Flores Programa MEMI

public void recorrerColección () { Iterator<TipoDatoObjeto> it = nombreColección.iterator();

while(it.hasNext()) { System.out.println(it.next()); } }

Page 23: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Recorrer en la colección (for each)

Corina Flores Programa MEMI

public void recorrerColección () { for (<tipoDatoObjeto> variable: nombreColeccion) { System.out.println(variable); } }

Page 24: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Corina Flores Programa MEMI

Una agenda personal •  Una aplicación vista como una agenda

personal tiene las siguientes características básicas:

  Permite almacenar citas   No tiene límite en el número de citas que éste

puede almacenar   Muestra citas individuales   Indica el número de citas que almacena

actualmente.

Page 25: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Corina Flores Programa MEMI

Una agenda personal •  Para trabajar en una aplicación como

ésta debemos ser capaces de almacenar un número arbitrario de objetos (las citas).

•  Analizemos el siguiente código … abrir el proyecto Agenda de la página de progra

Page 26: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Corina Flores Programa MEMI

Una mirada a la librería de clases •  Una característica de los lenguajes OO que los

hace poderosos es la “librería de clases”

•  Estas librerías proveen a los desarrolladores de programas una amplia variedad de funcionalidades probadas

•  Java a esta librería de clases los denomina como “paquetes”

Page 27: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Corina Flores Programa MEMI

Una mirada a la librería de clases •  Nosotros usaremos las librerías de clases

exactamente de la misma manera como usamos nuestras clases, es decir, aquellas que creamos.

•  En muchos casos son construídos usando new y las clases tienen campos, constructores y métodos.

Page 28: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Corina Flores Programa MEMI

Una mirada a la librería de clases •  Pongamos nuestra atención en la clase Agenda

•  Hacemos uso de la clase ArrayList que está definida en el paquete java.util

•  ArrayList es un ejemplo de una colección. •  Las colecciones pueden almacenar un número

arbitrario de elementos, donde cada elemento es otro objeto.

Page 29: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Corina Flores Programa MEMI

Una mirada a … continúa… Con …

  import java.util.ArrayList;

Se dispone de la clase ArrayList que se encuentra dentro del paquete java.util

Page 30: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Corina Flores Programa MEMI

Una mirada a … continúa…   private ArrayList<String> citas;

  Usamos ArrayList en la cabecera de la clase Agenda para definir un campo de citas.

  Aquí construímos una nueva cita, <String>

Page 31: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Corina Flores Programa MEMI

Una mirada a … continúa…   Cuando usamos colecciones, tenemos

que especificar dos tipos: 1.  El tipo de la colección misma: ArrayList 2.  El tipo de los elementos que planea

almacenar la colección: String

private ArrayList<String> citas;

1 2 Esto se lee como ArrayList de String

Page 32: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Corina Flores Programa MEMI

Una mirada a … continúa… private ArrayList<String> citas;

  En el constructor de Agenda, se crea un objeto de tipo ArrayList<String> y se almacena en el campo citas

Tipo de la variable citas

Page 33: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Corina Flores Programa MEMI

Una mirada a … continúa… citas = new ArrayList<String> ();

  Las clases como ArrayList son conocidas como clases genericas

  La clase ArrayList, define muchos metodos, en el ej. Podemos ver a:

add, size y get

Page 34: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Corina Flores Programa MEMI

Una mirada a … continúa… public void anhadirCita(String cita) { citas.add(cita); }

public int numberoDeCitas() { return citas.size(); }

public void mostrarCita(int citaNumeror) { … System.out.println(citas.get(citaNumero)); …. }

Page 35: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Corina Flores Programa MEMI

Estructura de objetos con colecciones

  Para entender como una colección de objetos como ArrayList opera … veamos las siguientes figuras.

agenda1: Agenda

citas ArrayList<String>

: String : String

“Llamar por telf…

Almacenamos dos Citas en el objeto Agenda

“Visitar dentista”

Page 36: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Corina Flores Programa MEMI

Estructura de objetos con colecciones

  Si almacenamos tres citas … en Agenda agenda1: Agenda

citas ArrayList<String>

: String

“Visitar dentista”

: String

“11:30 reunión …

: String

“Llamar por telf…

Page 37: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Corina Flores Programa MEMI

Estructura de objetos con colecciones

  Hay al menos tres cosas importantes que notar como características de la clase ArrayList:

1.  Es capaz de incrementar su capacidad internamente tanto como requiere.

2.  Mantiene en una cuenta privada el número de elementos que almacena actualmente. El método size retorna el número de objetos que almacena actualmente.

3.  Mantiene el orden de elementos según su inserción. Recuperándolos más tarde en el mismo orden.

Page 38: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Corina Flores Programa MEMI

Estructura de objetos con colecciones

  Notemos que …

  Un objeto Agenda, es tratado como un simple campo que almacena objetos de tipo ArrayList<String>.

  El objeto ArrayList, mantiene su propia cuenta de los objetos insertados.

Page 39: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Ejemplo … import java.util.ArrayList; import java.util.List;

public class Ejemplo { ArrayList lista; public Ejemplo() { lista = new ArrayList(); }

public void anadir(){ lista.add("Hola mundo"); }

public void mostrar(){ String cadena = (String) lista.get(0); System.out.println(cadena); } }

Corina Flores Programa MEMI

Page 40: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Analizando el ejemplo   Veamos que ocurre cuando en el ejemplo anterior en

vez de añadir una cadena como “hola mundo”, enviamos un número, así …

lista.add(999);

  El programa compila, pero lanzará una excepción en tiempo de ejecución, porque el programa hace algo ilegal en la comprobación de tipos.

Corina Flores Programa MEMI

Page 41: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Genéricas en Java   Las llamadas genéricas de Java son una mejora al

sistema de tipos que nos permite programar abstrayéndonos de los tipos de datos.

  Gracias a los generics podemos especificar el tipo de objeto que introduciremos en la colección, de forma que el compilador conozca el tipo de objeto que vamos a utilizar, evitándonos así el casting.

Corina Flores Programa MEMI

Page 42: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Genéricas en Java   Así el compilador podrá comprobar el tipo de los

objetos que introducimos, y lanzar un error en tiempo de compilación si se intenta introducir un objeto de un tipo incompatible, en lugar de que se produzca una excepción en tiempo de ejecución.

Corina Flores Programa MEMI

Page 43: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Genéricas en Java   Para utilizar genericas con nuestras colecciones tan

solo tenemos que indicar el tipo entre < y > a la hora de crearla.

  A estas clases a las que podemos pasar un tipo como “parámetro” se les llama clases parametrizadas, clases genéricas, definiciones genéricas o simplemente genéricas (generics).

Corina Flores Programa MEMI

Page 44: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Ejemplo import java.util.* public class Genericas { ArrayList <String> lista; ArrayList <Integer> lista1;

public Genericas() { lista = new ArrayList<String>(); lista1 = new ArrayList<Integer>(); }

public void anadir(){ lista.add("Hola mundo"); lista1.add(2002); }

public void mostrar(){ System.out.println(lista.get(0)); System.out.println(lista1.get(0)); } } Corina Flores Programa MEMI

Page 45: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Corina Flores Programa MEMI

Clases genéricas   El uso de clases genéricas es una funcionalidad

que permite garantizar el tipo de elementos colocados en una colección Java.

  ArrayList es un tipo de clase genérica, porque permite almacenar cualquier tipo de elementos en una colección

  La nomenclatura utilizada por clases genéricas es <Tipo de Clase>, misma que debe ser utilizada en la referencia de la colección, al inicializar la clase y al momento de extraerla en el iterador.

Page 46: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Corina Flores Programa MEMI

Clases genéricas   Para el caso de un ArrayList<Tipo de Clase>

  Así un ArrayList requiere de un segundo tipo para ser especificado como parámetro cuándo éste es usado para declarar campos o variables.

  Las clases en las se requiere tal tipo son llamadas como clases genéricas

El tipo de clase hace referencia al Tipo de dato a almacenar

Page 47: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Corina Flores Programa MEMI

Clases genéricas   Las clases genéricas a diferencia de otras clases,

no definen un solo tipo de dato sino muchos tipos.

  Por ejemplo, una clase ArrayList puede ser usada para especificar un ArrayList de Personas, un ArrayList de Rectángulos, un ArrayList de Productos y más.

Page 48: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Corina Flores Programa MEMI

Clases genéricas   Así:

Private ArrayList<Persona> miembros;

Private ArrayList<Producto> frutas;

Aquí el ArrayList contiene a objetos Personas

El ArrayList contiene a objetos Productos

Page 49: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Corina Flores Programa MEMI

Clases genéricas   ArrayList<Persona> y ArrayList<Producto> son de

dos tipos diferentes.

  Al emplear este mecanismo, cualquier intento de colocar un tipo de objeto distinto a aquel definido en la clase genérica, resulta en un error al momento de compilar.

Page 50: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Corina Flores Programa MEMI

Numerando dentro la colección   Los elementos almacenados en colecciones tienen

un número y posición implícitos que comienzan en cero.

  Una posición de un objeto en una colección es más comunmente conocido como índice

  El primer elemento añadido a una colección lleva el índice número 0, el segundo 1, el tercero 2 y así sucesivamente.

Page 51: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Corina Flores Programa MEMI

Numerando dentro la colección   Si vemos la siguiente figura …

agenda1: Agenda

citas ArrayList<String>

: String

Visitar dentista”

: String

“11:30 reunión …

: String

“Llamar por telf…

0 1 2

Indice

Page 52: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Corina Flores Programa MEMI

Numerando dentro la colección   En síntesis el tamaño de una colección esta

determinado como: [0 … (tamaño -1)], esto podemos obtener con el método get

  Cuidado!

  No intentar acceder a elementos de la colección fuera de los índices válidos para ArrayList. Cuando uno intenta, esto da un error

Page 53: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Corina Flores Programa MEMI

Borrando un elemento de la colección   La clase ArrayList tiene un método remove que

permite borrar o eliminar un elemento de la colección.

  Para realizar esta tarea necesita del índice del elemento que se desea borrar.

  Su sintaxis: remove(Número_índice);

Page 54: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Corina Flores Programa MEMI

Borrando un elemento de la colección   Veamos el siguiente ejemplo: public void borrarCita(int citaNumero) { if(citaNumero < 0) { // Numero invalido, cita no existe. } else if(citaNumero < numberDeCitas()) { // Es válido el numero de cita, entonces podemos borrar. cita.remove(citaNumero ); } else { // No es válido el nuemro de cita, no hacemos nada. } }

Page 55: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Corina Flores Programa MEMI

Borrando un elemento de la colección   Qué sucede …   Al borrar un elemento de la colección, el elemento

imnediatamente despúes de éste se mueve a ocupar la posición del elemento borrado.

  En consecuencia … El número de los índices cambian, es decir, se

decrementan en 1

Page 56: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Corina Flores Programa MEMI

Procesando una colección entera   Añadir y borrar elementos de una colección,

significa que el número de índices podría cambiar de vez en vez.

  Por ejemplo, cuando añadimos un elemento aumenta en 1 el índice, en cambio si borramos el índice disminuirá en 1.

  Para realizar tareas como imprimir todos los elementos de una colección será preciso saber el número de elementos que contiene

Page 57: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Corina Flores Programa MEMI

Procesando una colección entera   Por ejemplo: Si tenemos que mostrar las citas

almacenadas en Agenda tendríamos que escribir sentencias como …

System.out.println(citas.get(0)); System.out.println(citas.get(1)); System.out.println(citas.get(2));

Etc…

Page 58: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Corina Flores Programa MEMI

Procesando una colección entera   Pero … ¿cuántos println serán necesarios escribir?

  Tantos como elementos almacenados en la colección exista.

  Una forma de optimizar este hecho es introduciendo la sentencia for-each loop

Page 59: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Corina Flores Programa MEMI

El ciclo for-each   El ciclo for-each, permite ejecutar un conjunto de

acciones repetidas veces, con la ventaja de escribir las acciones solo una vez

  Sintaxis:

for (Tipo_Elemento elemento : colección) { // cuerpo del ciclo }

Page 60: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Corina Flores Programa MEMI

El ciclo for-each   En Java existe dos variaciones de ciclo for:

1.  Ciclo for-each 2.  Ciclo for

  El ciclo for-each, tiene dos partes:   Una cabecera de ciclo,   Un cuerpo, que sigue a la cabecera. Contiene las

sentencias que se desea ejecutar, una y otra vez.

Page 61: AGRUPANDO OBJETOS (Parte-I) - UMSS€¦ · Agrupando Objetos en colecciones … (Continúa) Para trabajar con colecciones de tamaño flexible, primero es necesario importar el paquete

Corina Flores Programa MEMI

El ciclo for-each   Veamos el siguiente ejemplo:

public void listarCitas() { for(String cita : citas) { System.out.println(cita); } }

Tipo_Elemento Elemento

Colección