Вы находитесь на странице: 1из 7

Razonamiento Geomtrico Definicin de framework

! Framework: trmino usado en programacin orientada


a objetos para definir un conjunto de clases que
definen un diseo abstracto para solucionar un
El framework de colecciones de Java conjunto de problemas relacionados
1.2
! Qu diferencia hay entre framework y patrn?
" El nivel de abstraccin de un patrn es mayor que el del
framework
" Ejemplos de patrones
MVC: modelo/vista/controlador
Singleton: objeto nico
DAO: Data Access Object

Copyright 2008-2009 Universidad de Alicante 1 Copyright 2008-2009 Universidad de Alicante 2

Qu se define en un framework? Ejemplos de frameworks

! Ejemplo: Swing ! Swing: framework de interfaces grficas de usuario


" Un conjunto de clases e interfaces. Por ejemplo, las clases
que define distintos tipos de componentes (Jbutton, ! Jakarta Struts: framework de aplicaciones web en Java
Jtable, ) o las interfaces de gestin de eventos basado en el patrn MVC
(MouseListener, )
! JMF (Java Media Framework): framework para el
" Modelos de uso de las clases e interfaces. Por ejemplo, pasos tratamiento de contenidos multimedia (audio, vdeo,
para definir una GUI.
etc.)
" Modelo de funcionamiento del framework en tiempo de
ejecucin, en el que hay que enganchar los nuevos objetos ! JAI (Java Advanced Imaging): framework para el
aadidos por nosotros. Por ejemplo, definicin y tratamiento procesamiento de imgenes en Java
de eventos.

Copyright 2008-2009 Universidad de Alicante 3 Copyright 2008-2009 Universidad de Alicante 4


La interfaz Iterator Mtodos equals y hashCode

! La interfaz java.util.Iterator se usa para ! La comparacin entre objetos Java se realiza con el operador
recorrer las colecciones posicionales == y el mtodo equals. Java utiliza el primero para comparar
igualdad de referencia (dos variables apuntan al mismo objeto
Interface Iterator { fsico) y el segundo para igualdad de contenidos.
boolean hasNext();
Object next(); ! La clase java.lang.Object define un mtodo equals por
void remove(); defecto que utiliza la igualdad de referencia. Si queremos
} implementar la igualdad de contenidos en los objetos de
nuestras clases, hay que sobreescribir este mtodo.
! Ejemplo
Interator it = puntos.iterator(); ! El mtodo hashCode tambin se define en la superclase
while (it.hasNext()) { Object y devuelve un int que define la clave hash de un
Point2D p = (Point2D) it.next(); objeto. Debe ser compatible con equals (si equals devuelve
canvas.draw(p); true, hashCode debe devolver el mismo int para dos
} objetos).

Copyright 2008-2009 Universidad de Alicante 5 Copyright 2008-2009 Universidad de Alicante 6

La interfaz Comparable Ejemplo de Comparable

! La interfaz java.lang.Comparable define un public boolean equals(Object o) {


nico mtodo if (!(o instanceof Punto2D))
return false;
public interface Comparable {
public int compareTo(Object o); Punto2D punto = (Punto2D) o;
} return (x == punto.x) && (y == punto.y);
}!
! El mtodo compareTo debe devolver un entero
public int compareTo(Object o) {
negativo, 0, o positivo cuando el objeto que recibe el if (this.equals(o))
mensaje es menor, igual o mayor que el Object o return 0; // consistente con equals
Punto2D punto = (Punto2D) o;
pasado como parmetro. if (x >= punto.x && y > punto.y)
return 1;
! Es aconsejable que el mtodo sea consistente con return -1;
equals, esto es, devuelva 0 si y slo si los dos objetos }
}
que se comparan con equals son iguales.

Copyright 2008-2009 Universidad de Alicante 7 Copyright 2008-2009 Universidad de Alicante 8


Ejemplos de frameworks de Definicin de un framework para
colecciones colecciones
! C++: STL (Standard Template Library) ! Framework de colecciones
" arquitectura unificada para representar y manipular
! Java 1.2: Collection Framework colecciones
! Java: JDSL " independiente de los detalles de representacin
! Coleccin: agrupacin de objetos
! Dos grandes tipos de colecciones:
" Acceso por posicin (listas, conjuntos, )
" Acceso por clave (diccionarios, )

Copyright 2008-2009 Universidad de Alicante 9 Copyright 2008-2009 Universidad de Alicante 10

Qu contiene un framework de
Colecciones en Java
colecciones?
! Interfaces ! Arrays
" TADs que definen la funcionalidad " La clase ms sencilla, est fuera del framework collection
! Implementaciones ! Iterator
" Clases que implementan las interfaces de las colecciones " Iterator
" Un TAD (por ejemplo Secuencia o Lista) puede tener ms de
una implementacin ! Colecciones
" Collection
! Algoritmos " Set
" mtodos que realizan computaciones, como bsquedas u " List
ordenaciones, sobre objetos que implementan las interfaces
" Map

Copyright 2008-2009 Universidad de Alicante 11 Copyright 2008-2009 Universidad de Alicante 12


Arrays en Java Interfaces de las colecciones

! Los Arrays son el tipo ms sencillo de coleccin ! Las colecciones se definen por la siguiente jerarqua de
interfaces
Point2D[] puntos;
puntos = new Point2D [100];
for (int i=0; i <= puntos.length(); i++)
puntos[i]= new Point2D();

! El tipo de los objetos del array debe declarase en


tiempo de compilacin. [Fuente: Tutorial del Java de Sun]

! La clase java.utils.Array proporciona un conjunto ! Ventajas de definir interfaces:


de mtodos auxiliares estndar: " Se separa la especificacin de la implementacin
" Es ms sencillo reemplazar el funcionamiento de una clase por otra que
" Ordenacin y bsqueda basada en el algoritmo quicksort: implementa la misma interfaz y que es ms eficiente
sort(), binarySearch()

Copyright 2008-2009 Universidad de Alicante 13 Copyright 2008-2009 Universidad de Alicante 14

La interfaz Collection La interfaz Set, implementaciones


public interface Collection {
// Basic Operations
! Es la misma que Collection, con la particularidad de que no
int size(); se permiten objetos iguales en la coleccin.
boolean isEmpty();
boolean contains(Object element);
boolean add(Object element); // Optional
! Implementacin HashSet
boolean remove(Object element); // Optional " Usa una tabla hash
Iterator iterator();
" No introduce orden en sus elementos
// Bulk Operations " Los mtodos add, remove y contains son muy eficientes: O(c)
boolean containsAll(Collection c);
boolean addAll(Collection c); // Optional
boolean removeAll(Collection c); // Optional ! Implementacin TreeSet
boolean retainAll(Collection c); // Optional " Usa un rbol
void clear(); // Optional
" Introduce un orden en los elementos, til para recorrer el conjunto
// Array Operations " Los mtodos add, remove y contains son O(log (n))
Object[] toArray();
Object[] toArray(Object a[]);
}

Copyright 2008-2009 Universidad de Alicante 15 Copyright 2008-2009 Universidad de Alicante 16


Ejemplo La interfaz List

public interface List extends Collection {


import java.util.*; // Positional Access
Object get(int index);
public class FindDups { Object set(int index, Object element); // Optional
public static void main(String args[]) { void add(int index, Object element); // Optional
Set s = new HashSet(); Object remove(int index); // Optional
for (int i=0; i<args.length; i++) abstract boolean addAll(int index, Collection c); // Optional
if (!s.add(args[i]))
System.out.println("Duplicate detected: "+args[i]); // Search
System.out.println(s.size()+" distinct words detected: "+s); int indexOf(Object o);
} int lastIndexOf(Object o);
}
// Iteration
ListIterator listIterator();
% java FindDups i came i saw i left ListIterator listIterator(int index);
Duplicate detected: i
Duplicate detected: i // Range-view
4 distinct words detected: [came, left, saw, i] List subList(int from, int to);
}

Copyright 2008-2009 Universidad de Alicante 17 Copyright 2008-2009 Universidad de Alicante 18

Implementaciones de List Ejemplo de ArrayList


import java.util.*;
! ArrayList public class Shuffle {
public static void main(String args[]) {
" Usa un array extensible como implementacin List l = new ArrayList();
for (int i = 0; i < args.length; i++)
" Operaciones get y set en tiempo constante l.add(args[i]);
Collections.shuffle(l, new Random());
System.out.println(l);
! LinkedList }
" Basada en una lista doblemente enlazada }

" Operaciones add y remove en tiempo constante An ms corto:


import java.util.*;

public class Shuffle {


public static void main(String args[]) {
List l = Arrays.asList(args);
Collections.shuffle(l);
System.out.println(l);
}
}

Copyright 2008-2009 Universidad de Alicante 19 Copyright 2008-2009 Universidad de Alicante 20


Ejemplo de LinkedList El iterador ListIterator

import java.util.*;
public class MyStack { public interface ListIterator extends Iterator {
private LinkedList list = new LinkedList(); boolean hasNext();
public void push(Object o){ Object next();
list.addFirst(o);
} boolean hasPrevious();
public Object top(){ Object previous();
return list.getFirst();
} int nextIndex();
public Object pop(){ int previousIndex();
return list.removeFirst();
} void remove(); // Optional
void set(Object o); // Optional
public static void main(String args[]) { void add(Object o); // Optional
Point2D punto; }
MyStack s = new MyStack();
s.push (new Point2D());
punto = (Point2D)s.pop();
}
}

Copyright 2008-2009 Universidad de Alicante 21 Copyright 2008-2009 Universidad de Alicante 22

La interfaz Map La interfaz Map

! Un Map (correspondencia) es un objeto que asocia una clave a public interface Map {
// Basic Operations
un valor. Tambin se denomina Diccionario. Object put(Object key, Object value);
Object get(Object key);
Object remove(Object key);
! Mtodos para aadir y borrar: boolean containsKey(Object key);
boolean containsValue(Object value);
" put(Object key, Object value) int size();
boolean isEmpty();
" remove(Object key)
// Bulk Operations
! Mtodos para la extraccin de objetos void putAll(Map t);
void clear();
" get(Object key)
// Collection Views

! Mtodos para obtener las claves, los valores y las parejas (clave, public Set keySet();
public Collection values();
valor) como un conjunto public Set entrySet();

" keySet() // devuelve un set // Interface for entrySet elements


public interface Entry {
" values() // devuelve un collection Object getKey();
" entrySet() // devuelve un set Object getValue();
Object setValue(Object value);
}
}

Copyright 2008-2009 Universidad de Alicante 23 Copyright 2008-2009 Universidad de Alicante 24


Implementacin de Map Ejemplo

! HashMap import java.util.*;


public class Freq {
" Basado en una tabla hash private static final Integer ONE = new Integer(1);
public static void main(String args[]) {
" No se realiza ninguna ordenacin en las parejas (clave, Map m = new HashMap();
valor)
// Initialize frequency table from command line
for (int i=0; i < args.length; i++) {
! TreeMap Integer freq = (Integer) m.get(args[i]);
m.put(args[i], (freq==null ? ONE :
" Basado en un rbol rojo-negro new Integer(freq.intValue() + 1)));
" Las parejas (clave, valor) se ordenan sobre la clave }

System.out.println(m.size()+ " distinct words detected:");


System.out.println(m);
}
}

Copyright 2008-2009 Universidad de Alicante 25 Copyright 2008-2009 Universidad de Alicante 26

Вам также может понравиться