A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Padrão de Projeto Iterator

Apresentações semelhantes


Apresentação em tema: "Padrão de Projeto Iterator"— Transcrição da apresentação:

1 Padrão de Projeto Iterator
Raphael do Vale © LES/PUC-Rio

2 Agenda Motivação Aplicabilidade Estrutura Participantes Conseqüências
Implementação Exemplo © LES/PUC-Rio

3 Iterator Motivação É preciso ter um meio de acessar os elementos de um objeto (como uma lista) sem expor a sua estrutura interna; Permitir diversas maneiras de se percorrer uma lista sem precisar criar um código especifico para isso; Poder ter mais de uma iteração concorrente na mesma listagem. Raphael do Vale

4 Iterator Motivação

5 Iterator Motivação Ao iterar por uma lista, não saberemos se ela é seqüencial ou hash.

6 Iterator Aplicabilidade Iterators são utilizados para
Acessar o conteúdo de objetos agregados sem que para isso seja necessário conhecer a sua estrutura interna; Acessar o conteúdo desses objetos de diversas formas. Inclusive podendo filtrar por determinados tipos de dados; Para fornecer uma única interface de iteração que percorra diferentes objetos agregados (iteração polimórfica). Raphael do Vale

7 Iterator Estrutura A lista é a responsável por instanciar o iterator.
Só possui métodos de iteração. Sem inclusão de itens ou operação de voltar. return new ConcreteIterator(this); Raphael do Vale

8 Iterator Participantes
InterfaceIterator Define a interface para acessar e percorrer elementos ConcreteIterator Implementa a interface InterfaceIterator Mantém o controle da posição corrente no percurso do ConcreteAgregado InterfaceAgregado Define uma interface de criação do Iterator ConcreteAgregado Implementa a interface de criação do AbstractIterator para retornar uma instância do ConcreteIterator apropriado O InterfaceAgregado não define métodos para inclusão, remoção ou qualquer operação comum à uma lista. Ele só define o método para a criação de um Iterator.

9 Iterator Conseqüências Suporta variações no percurso de um Agregado.
Caminhamento em árvores binárias. Simplificação da interface do agregado. Criação da interface do Iterator elimina métodos responsáveis pelo percurso do Agregado. Podem existir múltiplos percursos em um Agregado. Cada Iterator pode possuir um estado próprio e mantém o controle do percurso. Para cada Iterator instanciado, haverá um percurso em andamento.

10 Iterator Implementação public interface AbstractAgregado {
public class ListaDeVetor implements AbstractAgregado { private Vector vetor; private int tamanho = 0; public ListaDeVetor( int tamanhoInicial ) { this.vetor = new Vector( tamanhoInicial ); } public ListaDeVetor() { this.vetor = new Vector(); public AbstractIterator criaIterator() { return new IteratorVetor( this ); public Object retornaValorIndice( int indice ) { if( indice < this.tamanho ) return vetor.get( indice ); return null; public void adiciona( Object valor ) { this.vetor.add( valor ); this.tamanho++; public void remove( int indice ) { this.vetor.remove( indice ); public int getTamanho() { return this.tamanho; Implementação public class IteratorVetor implements AbstractIterator { private int indiceAtual = 0; private Iterator.ListaDeVetor lista; public IteratorVetor( ListaDeVetor lista ) { this.lista = lista; } public Object itemAtual() { return lista.retornaValorIndice( indiceAtual ); public boolean possuiProximo() { if( indiceAtual >= lista.getTamanho() ) return false; return true; public void proximo() { if( this.possuiProximo() ) this.indiceAtual++; public void primeiro() { this.indiceAtual = 0; public interface AbstractAgregado { AbstractIterator criaIterator(); } public interface AbstractIterator { Object itemAtual(); boolean possuiProximo(); void proximo(); void primeiro(); }

11 Iterator Exemplo Framework para persistência de dados
O sistema cliente não precisa saber como estão armazenados os dados que ele está percorrendo; XML, Tabelas de dados ou Webservices, não importa onde estão os dados, eles serão percorridos da mesma forma; O framework pode armazenar o resultado de uma consulta em um vetor antes de liberar o iterator ou pode apenas marcar o cursor no primeiro elemento. Para cada requisição de próximo, o cursor do banco de dados avança para o primeiro. Isso tudo sem conhecimento do cliente! Exemplo: Hybernate

12 Obrigado  © LES/PUC-Rio


Carregar ppt "Padrão de Projeto Iterator"

Apresentações semelhantes


Anúncios Google