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

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

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

Apresentações semelhantes


Apresentação em tema: "© LES/PUC-Rio Padrão de Projeto Iterator Raphael do Vale."— Transcrição da apresentação:

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

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

3 Raphael do Vale 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. Iterator

4 Motivação Iterator

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

6 Raphael do Vale 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). Iterator

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

8 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. Iterator

9 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. Iterator

10 Implementação public interface AbstractIterator { Object itemAtual(); boolean possuiProximo(); void proximo(); void primeiro(); } public interface AbstractAgregado { AbstractIterator criaIterator(); } 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; } } 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; } } Iterator

11 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 Iterator

12 © LES/PUC-Rio Obrigado


Carregar ppt "© LES/PUC-Rio Padrão de Projeto Iterator Raphael do Vale."

Apresentações semelhantes


Anúncios Google