Iterator

Revisión del 13:34 19 feb 2012 de Yaucp03038jcscu (discusión | contribuciones) (Página creada con ' {{Definición |nombre=Iterator |imagen= UMLClassDiagram02.gif |tamaño= |concepto= Proporciona una forma de acceder secuencialmente a los elementos de un objeto compuesto por...')
(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Iterator
Información sobre la plantilla
UMLClassDiagram02.gif
Concepto:Proporciona una forma de acceder secuencialmente a los elementos de un objeto compuesto por agregación.

Iterator. El patrón de diseño Iterator proporciona una forma de acceder secuencialmente a los elementos de un objeto compuesto por agregación sin necesidad de desvelar su representación interna.

Como usarlo

  • Cuando se quiere acceder a los elementos de un objeto agregado sin mostrar su representación interna.
  • Cuando se quieren permitir recorridos múltiples en objetos agregados.
  • Cuando se quiere proporcionar una interfaz uniforme para recorrer diferentes estructuras de agregación (iteración polimórfica).

Ventajas

  • Se incrementa la flexibilidad, dado que para permitir nuevas formas de recorrer una estructura basta con modificar el iterador en uso, cambiarlo por otro (parametrización) o definir uno nuevo.
  • Se enfatiza la distribución de responsabilidades (y, por ello, la simplicidad de los elementos del sistema), dado que la interfaz del agregado se ve libre de una serie de operaciones, más propias de la interfaz del iterador.
  • Se facilitan el paralelismo y la concurrencia, puesto que, como cada iterador tiene consciencia de su estado en cada momento, es posible que dos o más iteradores recorran una misma estructura simultánea o solapadamente.

Relacionado con

  • Iterador se aplica a menudo a estructuras recursivas del tipo de Composición.
  • Los Iteradores polimórficos se basan en Método de Fábrica a la hora de instanciar el tipo de iterador apropiado a cada caso.
  • También es habitual que Iterador use un Recuerdo para capturar el estado de una iteración, de forma interna.

Otros aspectos de interés

  • Cuando el Cliente controla la iteración se dice que el Iterador es externo y cuando la controla el propio Iterador se dice que es interno. Los Iteradores externos son más flexibles y potentes, mientras que los internos son más sencillos de usar. Los Iteradores externos son problemáticos con estructuras recursivas como las de Composición (se suelen usar entonces Iteradores Nulos).
  • Si el algoritmo para recorrer la estructura lo proporciona el agregado, el Iterador sólo guarda el estado y se le llama CURSOR. Si el algoritmo reside en el propio Iterador es más fácil usar el mismo sobre estructuras diferentes o diferentes algoritmos sobre la misma estructura, puede violarse el encapsulamiento, por necesidad de acceder a variables privadas de la estructura.
  • Dada la estrecha relación entre el Agregado y el Iterador éste puede ser una clase amiga de aquel, sin necesidad de sobrecargar la interfaz de dicho Agregado.
  • Un Iterador robusto no debe verse afectado por altas y bajas en los elementos de estructura que recorre ni necesitar hacer una copia de la misma cada vez que ésta se modifica (que los cambios se reflejen en el estado del Iterador).
  • Cada AgregadoConcreto es el encargado de crear el Iterador Concreto que se adapta a su estructura concreta.

Fuentes