Padrão de Projeto Iterator Projeto de Sistemas de Software Thiago Pinheiro de Araújo Iterator • Motivação – Permitir uma iteração por todos os elementos de um agregado, independente da estrutura de armazenamento. – Fornecer uma forma de acesso genérica aos elementos de um agregado sem expor sua representação interna. – Fazer duas iterações concorrentes em um agregado, cuja interface pode só permitir uma única por vez. Ex: Arvore binária. © LES/PUC-Rio Iterator • Propósito – Padronizar a iteração sobre os elementos de agregados. – Permitir modificações na estrutura interna do agregado sem afetar quem faz uso dele apenas para iteração. – Permitir a troca do tipo do agregado sem afetar quem faz uso dele apenas para iteração. © LES/PUC-Rio Iterator • Aplicabilidade – Prover interface única de iteração sobre agregados. – Onde existe ganho em usar um objeto, obtido através do padrão de projeto Factory, responsável pela iteração sobre os elementos do agregado. © LES/PUC-Rio Iterator • Estrutura © LES/PUC-Rio Iterator • Participantes – IAgregate • Interface que especifica a fábrica de iteradores. – ConcreteAgregate • Armazena os elementos efetivamente em uma estrutura de interesse. • Define o método de criação do seu iterador. – Iterator • Interface que define primitivas de controle sobre a iteração dos elementos. – ConcreteIterator • Implementa as primitivas de controle sobre a iteração. © LES/PUC-Rio Iterator • Colaborações – O usuário do Agregado pede um iterator. – O iterator mantém a posição corrente durante a iteração sobre os elementos do agregado. – Para cada passo na iteração, o usuário pode realizar operações sobre o elemento. © LES/PUC-Rio Iterator • Conseqüências – Generalidade na iteração sobre os elementos de um agregado. – Possibilidade de realizar múltiplas iterações concorrentes sobre um agregado. – Troca da implementação do agregado sem afetar quem faz iteração sobre seus elementos. © LES/PUC-Rio Iterator © LES/PUC-Rio Iterator • Bibliografia – [1] Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software, 2st edition, Addison-Wesley Professional Computing Series, 1998. © LES/PUC-Rio Fim!