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

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

1 Padrão: Iterador (Iterator) Tipo - “Object behavioral” Objetivo - acessar um agregado sem expor a representação Outros nomes - Cursor.

Apresentações semelhantes


Apresentação em tema: "1 Padrão: Iterador (Iterator) Tipo - “Object behavioral” Objetivo - acessar um agregado sem expor a representação Outros nomes - Cursor."— Transcrição da apresentação:

1 1 Padrão: Iterador (Iterator) Tipo - “Object behavioral” Objetivo - acessar um agregado sem expor a representação Outros nomes - Cursor

2 2 Motivação Deve ser possível acessar elementos de agregados sem expor representação Gostaríamos de poder enumerar elementos de várias maneiras, sem sobrecarregar interface do agregado

3 3 Solução Tirar responsabilidade do agregado, criando Iterador com este objetivo Iterador –define interface e método de acesso –guarda estado da busca Ao ser instanciado, Iterador recebe agregado a ser percorrido Interface: Primeiro(), Próximo(), Acabou(), ElementoAtual()

4 4 Exemplo: Lista

5 5 Colaborações IteradorConcreto mantém estado da busca e calcula póximo objeto da busca

6 6 Consequências Permite variações na enumeração de elementos de um agregado Permite várias enumerações concomitantes Simplifica interface do agregado (para ser geral precisamos de acesso aleatório)

7 7 Implementação - 1 Controle da iteração: iterador vs. cliente –Cliente - Iterador Externo - cliente control avanço e pede próximo elemento –Iterador - Iterador Interno - cliente fornece operação a ser efetuada em cada elemento –IteradorExerno - maior flexibilidade (e.g. igualdade) –IteradorInterno - facilidade de uso, dificuldade em implementar em C++

8 8 Implementação - 2 Definição do algoritmo de enumeração: iterador vs. agregado –Cursor: agregado define algoritmo, iterador guarda estado (cliente invoca Prox() no agregado, iterador como argumento) –Iterador como responsável: facilidade em diversificar, reutilização de iteradores, pode necessitar acesso privilegiado

9 9 Implementação - 3 Robustez do iterador –modificação de agregados durante enumeração (cópia ruim) –Iterador robusto: registrar iterador com agregado? (uma solucção) –referências bibliográficas disponíveis Operações adicionais –Anterior() (Previous()) –PulePara() (SkipTo())

10 10 Implementação - 4 Iteradores polimórficos em C++ –iterador deve ser alocado por um “factory method” –cliente precisa eliminá-los (solução “Proxy” na pilha) Iteradores podem necessitar de acesso privilegiado –Friends em C++ –Interface Protected no Iterador abstrato

11 11 Implementação - 5 Iteradores para Composites –estruturas recursivas –iterador precisa guardar caminho vs. iterador interno (posição com chamada recursiva) Iteradores nulos –em estruturas recursivas, utilizado nos casos de fim de busca

12 12 Padrões Relacionados Composites FactoryMethod - utilizado para iteradores em C++ Memento - iterador pode utilizar memento para guardar estado


Carregar ppt "1 Padrão: Iterador (Iterator) Tipo - “Object behavioral” Objetivo - acessar um agregado sem expor a representação Outros nomes - Cursor."

Apresentações semelhantes


Anúncios Google