Patron iterator

Páginas: 10 (2446 palabras) Publicado: 19 de septiembre de 2012
Iterator


Propósito

Un iterador es un patrón de diseño de software que abstrae el proceso de recorrer una colección de elementos sin revelar su representación interna.

Este patrón esta formado por una secuencia de elementos, una posición actual en la secuencia y una forma de avanzar al siguiente elemento de la secuencia convirtiéndolo en el elemento actual.

También conocido comoCursor.

Motivación

Un objeto colección, tal como una lista, debería proveer un modo de brindar acceso a sus elementos sin exponer su estructura interna, quizás, se desee recorrer la lista en diferentes formas, dependiendo de sus necesidades, o tal vez, se necesite tener más de un recorrido sobre la misma lista. 

Problema

Para entender mejor la idea anterior veamos los siguientesejemplos prácticos:

Ejemplo 1
Imaginemos como representar el ciclo de un consultorio médico.

El doctor atiende un paciente y al terminar, avisa a su asistente, quien se encargará de hacer pasar al próximo en la lista de espera.

Observe como el Doctor no conoce cual es el orden del próximo paciente a examinar. La responsabilidad sobre el orden en que son atendidos los pacientes es totalmente dela asistente e independiente de él.

Ejemplo 2
Consultar el inventario de un almacén. Cada elemento del inventario puede tener su propia descripción, localización, cantidad, etc.

Debe existir entonces una independencia entre quienes presentan los datos y la colección que almacena los elementos del inventario.

Acercándonos a las problemáticas anteriores, deberíamos contar con un mecanismoque permita proveer un modo de acceder a los elementos de las listas (Pacientes, Artículos en el inventario) sin exponer su estructura interna.

La idea principal sería tomar la responsabilidad del acceso y recorrido de la lista y colocarla dentro de un objeto Iterador (Asistente del Doctor, Presentador de los datos del Inventario). De esta forma, este objeto sería el responsable de mantener lapista del elemento actual; incluso según la necesidad, saber cuáles elementos ya han sido recorridos. 

El hecho de poder separar el mecanismo de recorrido de cada lista, permite definir iteradores para diferentes políticas de recorrido sin tener que enumerarlas en la lista. Por ejemplo, una lista de pacientes que requieren urgencia puede proveer acceso solo a aquellos pacientes de la lista quesu atención requiera inmediatez. 
Note como el iterador (Asistente del Doctor, Presentador de los datos del Inventario), y la lista (Pacientes, Artículos en el inventario) están acoplados, y el cliente (Doctor, Observador de los artículos del inventario) debe saber que es una lista lo que se está recorriendo, en lugar de alguna otra estructura agregada. De ahí que el cliente comprometa unaestructura agregada particular.
Sería mejor, si pudiéramos cambiar la clase agregada sin cambiar el código cliente. Esto podría ser logrado generalizando el concepto de iterador para soportar iteración polimorfa. 
Para lograrlo, definimos una clase AbstractList que provea una interfaz común para manipular listas. De igual forma, necesitamos una clase Iterator que defina una interfaz de iteracióncomún. Luego podemos definir subclases iteradoras concretas para las diferentes implementaciones de la lista. Como resultado, el mecanismo de iteración llega a ser independiente de las clases agregadas concretas. 
El problema restante radica en cómo crear el iterador. Ya que lo que queremos es escribir código independiente de las subclases concretas de las listas, no podemos entonces crear unainstancia de una clase específica. En su lugar, podemos hacer a los objetos de la lista, responsables por la creación de su propio iterador. Esto requiere una operación tal como CreateIterator, por medio de la cual los clientes solicitan un objeto iterador. 

Consideraciones

1. Acceder al contenido de un objeto agregado sin revelar su representación interna.
2. Permitir múltiples tipos...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Iterator
  • Patrones
  • patrones
  • El patrono
  • PATRONO
  • Patrón
  • Patrones
  • El Patron

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS