O documento descreve o padrão de projeto Iterator, que fornece uma forma de acessar sequencialmente os elementos de uma coleção sem expor sua representação interna. O padrão define um objeto iterador que controla a iteração e mantém o estado atual, permitindo varreduras diferentes da coleção sem alterar sua interface.
1. Padrão de Projeto
Iterator
Antonio Álvaro Oliveira da Silva
Instituto Federal de Educação, Ciência e Tecnologia - IFCE campus Crato
Programação Orientada a Objetos II
2. Objetivo
Disponibilizar uma forma de acesso
sequencial aos elementos de um
agregado sem expor a sua representação
subjacente.
Padrão de Projeto - Comportamental - Iterator 2
Intenção: iterar sobre uma coleção de objetos
sem expor sua representação.
Obedecer o princípio do encapsulamento.
4. Um objeto intermediário (iterator) é usado entre
o cliente e a coleção de objetos.
Padrão de Projeto - Comportamental - Iterator 4
5. Motivação
Deve-se poder percorrer uma lista encadeada, por
exemplo, sem conhecer sua estrutura interna.
Isolar o uso de uma coleção (estrutura de dados) de sua
representação interna, de forma a poder mudar a estrutura
sem afetar quem a usa.
Para determinadas estruturas, pode haver formas
diferentes de caminhamento encapsuláveis.
Podem existir diferentes varreduras simultâneas.
Padrão de Projeto - Comportamental - Iterator 5
6. Exemplos de Iterador
Árvore pode ser caminhada "em ordem", "em pós-ordem” e em "pré-
ordem" . Árvore pode ter 3 tipos de Iteradores Específicos:
Escolhendo o iterador escolhemos a forma de percorrer a árvore.
Iterador com filtro
Só retorna certos elementos da coleção.
A idéia do Iterador é retirar da coleção a responsabilidade de acessar e
caminhar por seus elementos
Essa responsabilidade é delegada a um novo objeto separado – o Iterator.
Padrão de Projeto - Comportamental - Iterator 6
7. Como criar um Iterador?
Não podemos usar new de uma classe concreta diretamente, pois o
iterador a ser criado depende da coleção a ser varrida.
Iterdor it = new Iterador(colecao);
Solução: A coleção tem um Factory Method para criar um iterador.
Iterador it = colecao.criarIterador();
Padrão de Projeto - Comportamental - Iterator 7
Quando usar o Iterador?
Para navegar em uma coleção
elemento por elemento.
8. Aplicabilidade
Para acessar o conteúdo de uma coleção sem expor suas
representação interna.
Para suportar múltiplas formas de caminhamento.
Usando iteradores específicos .
Para prover uma interface única para varrer coleções diferentes.
Isto é, para suportar uma iteração polimórfica .
Padrão de Projeto - Comportamental - Iterator 8
9. Iterador
Qual a diferença entre:
for (int i = 0; i < c.getSize(); i++)
System.out.print(c.get(i));
E:
Iterator it = c.iterator(); // Iterador Generico
while (it.hasNext())
System.out.print(it.next() + " ");
Padrão de Projeto - Comportamental - Iterator 9
11. Propriedades
Iterador
• Define uma interface para acessar e percorrer os elementos.
IteradorConcreto
• Implementa a interface de Iterador.
• Mantém o controle da posição corrente no percurso do agregado.
Agregado
• Define uma interface para criação de um objeto Iterador.
AgregadoConcreto
• Implementa a interface de criação do Iterator para retornar uma instancia
do IteradorConcreto apropriado.
Padrão de Projeto - Comportamental - Iterator 11
12. O IteradorConcreto mantém uma referência para o
elemento atual do agregado e é capaz de calcular o
próximo elemento da varredura.
Padrão de Projeto - Comportamental - Iterator 12
13. Consequências
Suporta variações na varredura do agregado.
Simplificam a interface do agregado.
Suportam diferentes varreduras simultâneas.
Padrão de Projeto - Comportamental - Iterator 13
14. Detalhes da implementação
Iteradores internos versus iteradores externos
Operadores do iterador
Pode permitir ou não andar para trás, pular posições, etc.
Iteradores nulos são interessantes para prover condições
limites.
Padrão de Projeto - Comportamental - Iterator 14