Padr+úo de projeto iterator

14
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

Transcript of Padr+úo de projeto iterator

Page 1: Padr+úo de projeto iterator

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

Page 2: Padr+úo de projeto iterator

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.

Page 3: Padr+úo de projeto iterator

Padrão de Projeto - Comportamental - Iterator 3

Page 4: Padr+úo de projeto iterator

Um objeto intermediário (iterator) é usado entre

o cliente e a coleção de objetos.

Padrão de Projeto - Comportamental - Iterator 4

Page 5: Padr+úo de projeto iterator

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

Page 6: Padr+úo de projeto iterator

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

Page 7: Padr+úo de projeto iterator

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.

Page 8: Padr+úo de projeto iterator

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

Page 9: Padr+úo de projeto iterator

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

Page 10: Padr+úo de projeto iterator

Estrutura

Padrão de Projeto - Comportamental - Iterator 10

Page 11: Padr+úo de projeto iterator

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

Page 12: Padr+úo de projeto iterator

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

Page 13: Padr+úo de projeto iterator

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

Page 14: Padr+úo de projeto iterator

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