Descargar

Patrones de Comportamiento del Software (página 3)

Enviado por Pablo Turmero


Partes: 1, 2, 3, 4
edu.red 31 Iterator (Iterador) Propósito Proporciona una forma para acceder a los elementos de una estructura de datos sin exponer los detalles de la representación. Motivación Un objeto contenedor (agregado o colección) tal como una lista debe permitir una forma de recorrer sus elementos sin exponer su estructura interna. Debería permitir diferentes métodos de recorrido Debería permitir recorridos concurrentes No queremos añadir esa funcionalidad a la interfaz de la colección

edu.red 32 Iterator (Iterador) Motivación Una clase Iterator define la interfaz para acceder a una estructura de datos (p.e. una lista). Iteradores externos vs. Iteradores internos. Iteradores externos: recorrido controlado por el cliente Iteradores internos: recorrido controlado por el iterador

edu.red 33 Iterador Externo (Gp:) ListIterator (Gp:) first() (Gp:) next() (Gp:) isDone() (Gp:) item() (Gp:) index() (Gp:) Lista (Gp:) count() (Gp:) append() (Gp:) remove() (Gp:) +list

edu.red 34 Iterador Externo List lista = new List(); … ListIterator iterator = new ListIterator(lista);

iterator.first(); while (!iterator.isDone()) { Object item = iterator.item(); // código para procesar item iterator.next(); } …

edu.red 35 Iteradores Externos en Java interface Iterator { boolean hasNext(); Object next(); void remove(); } Iterator it = lista.iterator(); while (it.hasNext()) { Object item = it.next(); // código para procesar item }

edu.red 36 Iterador Externo Polimórfico

edu.red 37 Iterador Interno La clase que modela la iteración ofrece métodos que controlan la ejecución: ejecutar una acción sobre todos los elementos, ejecutar una acción sobre aquellos elementos que cumplan una condición,etc. Ejemplo: iteradores en Smalltalk y Ruby Dados como parámetros una acción y/o condición, el método de iteración se encarga de recorrer la colección. En Eiffel y Java no podemos pasar rutinas o código como argumento, en lenguajes OO tipados dinámicamente como Smalltalk o Ruby se dispone de bloques de código.

edu.red 38 Iterador externo En Smalltalk, sea colCuentas una colección de instancias de Cuenta colCuentas select:[:cuenta| cuenta.saldo > 1000] colCuentas reject:[:cuenta| cuenta.saldo > 1000] colCuentas do: [:cuenta| cuenta.reintegro:1000

edu.red 39 Iterador Interno public void doIf() { Iterator it = col.iterator(); while (it.hasNext()) { Object o = iterator.next(); if (test(o)) action(o) } }

edu.red 40 Iterador Interno

edu.red 41 Iterador Consecuencias Simplifica la interfaz de un contenedor al extraer los métodos de recorrido Permite varios recorridos concurrentes Soporta variantes en las técnicas de recorrido

edu.red 42 Iterador Implementación ¿Quién controla la iteración? Externos vs. Internos ¿Quién define el algoritmo de recorrido? Agregado: iterador sólo almacena el estado de la iteración (Cursor). Ejemplo de uso del patrón Memento Iterador: es posible reutilizar el mismo algoritmo sobre diferentes colecciones o aplicar diferentes algoritmos sobre una misma colección

edu.red 43 Iterador Implementación ¿Es posible modificar la colección durante la iteración? Colección e iterador son clases íntimamente relacionadas: clases amigas en C++ y clases internas en Java Suele ser usado junto con el patrón Composite.

edu.red 44 Mediator (Mediador) Propósito Define un objeto que encapsula cómo interaccionan un conjunto de objetos. Favorece un bajo acoplamiento, liberando a los objetos de referenciarse unos a otros explícitamente, y permite variar la interacción de manera independiente. Motivación Muchas interconexiones entre objetos dificulta la reutilización y la especialización del comportamiento. Ventana que incluye un conjunto de elementos gráficos con dependencias entre ellos.

edu.red 45 Motivación Mediador

edu.red 46 Mediador Motivación

edu.red 47 Estructura Mediador

edu.red 48 Mediador Aplicabilidad Un conjunto de objetos se comunica entre sí de una forma bien definida, pero compleja. Las interdependencias son poco estructuradas y difíciles de comprender. Reutilizar una clase es difícil porque tiene dependencias con muchas otras clases. Un comportamiento que es distribuido entre varias clases debería ser adaptable sin crear muchas subclases.

edu.red 49 Mediador Consecuencias Evita crear subclases de los colegas, sólo se crean subclases del mediador. Desacopla a los colegas. Simplifica los protocolos entre las clases Abstrae el cómo cooperan los objetos Centraliza el control en el mediador: clase difícil de mantener

edu.red 50 Mediador Implementación No hay necesidad de definir una clase abstracta Mediator si los colegas trabajan con un único mediador. Los colegas deben comunicarse con el mediador cuando un evento de interés ocurre, varias posibilidades: patrón Observer interfaz de notificación especializada en Mediator (por ejemplo en Smalltalk-V, la clase ViewManager)

Partes: 1, 2, 3, 4
 Página anterior Volver al principio del trabajoPágina siguiente