Professional Documents
Culture Documents
Colecciones e iteradores
Programacin Orientada a Objetos Facultad de Informtica
Juan Pavn Mestras Dep. Ingeniera del Software e Inteligencia Artificial Universidad Complutense Madrid
Basado en el curso Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Klling
Conceptos a tratar
Colecciones Bucles Iteradores Arrays Paquetes: liberas de clases
Libreras de clases
No vamos a implementar las estructuras de datos para guardar las notas: usaremos libreras
As no hay que hacerlo todo desde cero
Como la agrupacin de objetos es algo habitual, en Java hay una librera de clases para esto: package java.util
Un ejemplo de lista
import java.util.ArrayList; /** Indica que se va a utilizar * ... la clase ArrayList del */ paquete java.util public class Notebook { // Storage for an arbitrary number of notes. private ArrayList<String> notes; /** * Perform any initialization required for the * notebook. */ public Notebook() { notes = new ArrayList<String>(); } ...
Juan Pavn Mestras Facultad de Informtica UCM, 2007-08
Colecciones Se especifica
El tipo de la coleccin: ArrayList El tipo de objetos que contendr: <String> Esto se lee como: ArrayList de String
Caractersticas de la coleccin
Incrementa su capacidad como sea necesario Se puede saber el tamao con el mtodo size() Guarda los objetos en orden Los detalles de cmo ocurre todo esto estn ocultos
Realmente importan? El hecho de no conocerlos nos impide usar la coleccin?
10
Uso de la coleccin
public class Notebook { private ArrayList<String> notes; ... public void storeNote(String note) { notes.add(note); Adicin de una nota } public int numberOfNotes() { return notes.size(); } ... }
Juan Pavn Mestras Facultad de Informtica UCM, 2007-08 Programacin Orientada a Objetos
(delegacin)
11
12
Recuperacin de un objeto
Comprobacin de la validez de los ndices
public void showNote(int noteNumber) { if(noteNumber < 0) { // This is not a valid note number. } else if(noteNumber < numberOfNotes()) { System.out.println(notes.get(noteNumber)); } else { // This is not a valid note number. } } Recupera e imprime la nota
13
14
Clases genricas
Las colecciones estn implementadas como tipos genricos o parametrizados La clase ArrayList implementa la funcionalidad de la lista
add, get, size, etc.
15
Resumen
Las colecciones permiten guardar un nmero arbitrario de objetos
Que se pueden aadir y quitar Cada elemento tiene un ndice Los valores de los ndices pueden cambiar al eliminar o aadir elementos Los principales mtodos de ArrayList son add, get, remove y size
Las libreras de clases suelen contener clases de coleccin bien probadas Las libreras de clases en Java se llaman packages La clase ArrayList del paquete java.util es un ejemplo de tipo genrico o parametrizado
16
Iteracin
Habitualmente queremos repetir varias veces un conjunto de acciones
Por ejemplo, imprimir las notas de la agenda una a una
La mayora de los lenguajes de programacin incluyen sentencias de bucle para hacer esto:
while, repeat, for,
17
Iteracin
Habitualmente queremos repetir varias veces un conjunto de acciones
Por ejemplo, imprimir las notas de la agenda una a una
La mayora de los lenguajes de programacin incluyen sentencias de bucle para hacer esto:
while, repeat, for,
18
Para cada elemento de la coleccin, hacer las cosas del cuerpo del bucle
19
Ejemplo
/** * List all notes in the notebook. */ public void listNotes() { for(String note : notes) { System.out.println(note); } }
20
Bucle while
El bucle for-each repite el cuerpo del bucle para cada objeto de una coleccin A veces es necesario una variacin mayor
Se puede utilizar entonces una condicin booleana para decidir si seguir o no con el bucle Esto se puede hacer con un bucle while
21
Bucle while
Sentencias a repetir
Mientras se quiera continuar, hacer las cosas del cuerpo del bucle
22
Mientras el valor de index sea menor que el tamao de la coleccin, imprimir la siguiente nota, e incrementar index
Juan Pavn Mestras Facultad de Informtica UCM, 2007-08
23
while:
No es necesario procesar toda la coleccin Se puede utilizar para otras cosas que no sean colecciones Pero hay que tener ms cuidado: podra darse un bucle infinito
while (true) { // esto no acaba nunca }
24
// Print all even numbers from 0 to 30. int index = 0; while(index <= 30) { System.out.println(index); index = index + 2; }
25
int index = 0; boolean found = false; while(index < notes.size() && !found) { String note = notes.get(index); if(note.contains(searchString)) { // We don't need to keep looking. found = true; } else { index++; } } // Either we found it, or we searched the whole // collection.
26
java.util.Iterator
Iterator<ElementType> it = myCollection.iterator(); while(it.hasNext()) { call it.next() to get the next object do something with that object } public void listNotes() { Iterator<String> it = notes.iterator(); while(it.hasNext()) { System.out.println(it.next()); } }
Juan Pavn Mestras Facultad de Informtica UCM, 2007-08 Programacin Orientada a Objetos
27
Bucle while
Si se quiere parar a mitad de camino Para repeticiones que no se hacen sobre una coleccin
Objeto Iterator
Si se quiere parar a mitad de camino A menudo en las colecciones donde el acceso indexado no es muy eficiente o imposible
28
29
Resumen
Las sentencias de bucle permiten repetir un bloque de instrucciones
El bucle for-each permite la iteracin sobre una coleccin entera El bucle while permite la repeticin controlada por una expresin booleana Todas las clases de coleccin suelen ofrecer objetos iteradores especiales que permiten el acceso secuencial a la coleccin
30
array
Los arrays Java pueden guardar referencias a objetos o valores de tipos primitivos
Tienen una sintaxis especial
31
Arrays en Java
Coleccin de variables, todas del mismo tipo
Los elementos pueden ser tipos primitivos u objetos
Aunque son objetos, su declaracin, creacin e inicializacin es diferente que para otros objetos Declaracin
El tipo de variable que tiene un array se especifica al declararlo, aadiendo un par de corchetes ([])
// // // //
A es un array de enteros igual que antes ERROR: no se especifica el tamao en la declaracin un array de cadenas
String S,T[]; // S es una cadena y T un array de cadenas String[] S,T; // Ambos, S y T, son arrays de cadenas
32
Arrays en Java
Creacin e inicializacin de arrays
El tamao de un array se especifica al crearlo con el operador new
33
Arrays en Java
Array de arrays
int[][] A; A = new int[2]; for (int i = 0; i < A.length; i++) A[i] = new int[3]; // tambin se puede hacer as: A = new int[2][3];
34
Arrays en Java
Acceso a los elementos de un array
El primer elemento de un array tiene el ndice 0 Se comprueba automticamente los lmites del array
Si se intenta acceder fuera de los lmites del array (entre 0 y length-1), se produce la excepcin IndexOutOfBoundsException
35
El proyecto weblog-analyzer
Un servidor web registra los detalles de cada acceso Ayuda al webmaster a realizar sus tareas:
Pginas ms populares Periodos de mayor ocupacin Trfico de datos Referencias rotas
36
Creacin de un array
public LogAnalyzer() Creacin de objeto array { hourCounts = new int[24]; reader = new LogfileReader(); } ... }
37
El array hourCounts
38
39
El bucle for
Hay dos variaciones del bucle for: for-each y for. El bucle for se utiliza normalmente para iterar un nmero fijo de veces Generalmente se utiliza con una variable que se incrementa (o decrementa) una cantidad fija en cada iteracin
40
Bucle for
41
for(int hour = 0; hour < hourCounts.length; hour++) { System.out.println(hour + ": " + hourCounts[hour]); }
while loop version int hour = 0; while(hour < hourCounts.length) { System.out.println(hour + ": " + hourCounts[hour]); hour++; }
42
// Imprime mltiplos de 3 que sean menores que 40 for(int num = 3; num < 40; num = num + 3) { System.out.println(num); }
43
Resumen
Los arrays son apropiados cuando se trabaja con colecciones de tamao fijo
Tienen una sintaxis especial y estn soportados de manera nativa por el lenguaje de programacin
Los bucles for son una alternativa a los bucles while cuando el nmero de repeticiones es conocido
44
45
Si no se declara un paquete especfico entonces se considera que pertenece a un paquete por defecto (default) que no tiene ningn nombre
El paquete por defecto slo se suele utilizar en aplicaciones pequeas o temporales Se recomienda acostumbrarse a definir paquetes para todas las aplicaciones
46
Paquetes
Los paquetes:
Definen contextos de denominacin
Para evitar colisin de nombres
47
Paquetes
Los paquetes pueden anidarse
Define una jerarqua: paquete.subpaquete.subpaquete.clase
48
Paquetes
Convencin para el nombrado de paquetes (para conseguir nombres exclusivos):
dominio.empresa.departamento.proyecto Autor del paquete (nombre de dominio Internet al revs)
Ejemplo:
es.ucm.sip.jpavon.cursoJava
49
Paquetes
Un paquete determina un subdirectorio del disco
En el ejemplo anterior: es/ucm/sip/jpavon/cursoJava/
CLASSPATH=C:\JAVA\JDK1.1\lib\classes.zip;.;
50
Paquetes
Utilizacin de nombres (pblicos) de un paquete:
Usando el nombre completo: class ImprimeFecha1 { public static void main (String[] args) { java.util.Date ahora = new java.util.Date(); System.out.println(ahora); } } Usando la clusula import: import java.util.Date; class ImprimeFecha2 { public static void main (String[] args) { Date ahora = new Date(); System.out.println(ahora); } }
Juan Pavn Mestras Facultad de Informtica UCM, 2007-08 Programacin Orientada a Objetos
51
Paquetes import
No es necesario para el paquete java.lang
Siempre se asume: import java.lang.*
* permite importar todas las clases e interfaces de un paquete import java.util.*; // todas las clases e interfaces de util import java.*; // ERROR: no vale para paquetes
Ejemplo: Para importar la clase Applet, hay dos posibilidades: import java.applet.Applet; // directamente la clase import java.applet.*; // todos los nombres del paquete
52
Paquetes
Paquetes estndar de Java
java.lang // clases e interfaces bsicas (se importa por defecto) java.applet // clase Applet e interfaces para interaccin con navegador java.awt // Abstract Windowing Toolkit java.io // E/S java.net // clases para comunicacin a travs de protocolos Internet java.rmi // Programacin distribuida java.security // Seguridad en Java java.util // Utilidades Javax.swing // componentes grficos para Java
53
Paquetes
Ejemplo
package ucm.sip.juan.curso.java; import java.util.Date;
La clase ImprimeFecha est declarada dentro del paquete ucm.sip.juan.curso.java
class ImprimeFecha { public static void main (String[] args) { Date ahora = new Date(); System.out.println(ahora); } }
La clase System est dentro del paquete java.lang (que se importa por defecto) Se podra poner java.lang.System.out.println
Juan Pavn Mestras Facultad de Informtica UCM, 2007-08 Programacin Orientada a Objetos
54