Prévia do material em texto
Modelagem de Padrões de Projeto Aula 31 - Iterator Iterator (aka iterador) Criacionais Ilustrações: SHVETS (2022) Prototype Abstract Factory Builder Factory Method Singleton Command Comportamentais Chain of Responsibility Memento Observer Visitor Template Method Iterator State Strategy Mediator ✓ ✓ ✓ ✓ ✓ ✓ ✓ Estruturais Adapter Flyweight Bridge FacadeDecorator Composite Proxy ✓ ✓ ✓ ✓ ✓✓ ✓ ✓ ✓ ✓ ● É um padrão de projetos projetado para percorrer elementos de uma coleção sem que seja necessário saber previamente qual é a topologia que organiza esses objetos. ● As coleções podem ser pilhas, árvores, listas, conjuntos, grafos, etc Imagem de kjpargeter no Freepik Definição Imagem de kjpargeter no Freepik Exemplo - Estrutura A interface Iterator declara as operações necessárias para percorrer uma coleção: buscar o próximo elemento, pegar a posição atual, recomeçar a iteração, etc. Fonte: SHVETS (2022) Estrutura Os Iteratores concretos implementam algoritmos específicos para percorrer uma coleção. O objeto iterador deve monitorar o progresso da travessia por conta própria. Isso permite que diversos iteradores percorram a mesma coleção independentemente de cada um. Fonte: SHVETS (2022) Estrutura A interface Coleção declara um ou mais métodos para obter os iteradores compatíveis com a coleção. Observe que o tipo do retorno dos métodos deve ser declarado como a interface do iterador para que as coleções concretas possam retornar vários tipos de iteradores. Fonte: SHVETS (2022) Estrutura As Coleções concretas retornam novas instâncias de uma classe iteradora concreta em particular cada vez que o cliente pede por uma. Fonte: SHVETS (2022) Estrutura O Cliente trabalha tanto com as coleções como os iteradores através de suas interfaces. Dessa forma o cliente não fica acoplado a suas classes concretas, permitindo que você use várias coleções e iteradores com o mesmo código cliente. Tipicamente, os clientes não criam iteradores por conta própria, mas ao invés disso os obtêm das coleções. Ainda assim, em certos casos, o cliente pode criar um diretamente; por exemplo, quando o cliente define seu próprio iterador especial. Fonte: SHVETS (2022) Im ag em d e F re ep ik Es tu do d e ca so Im ag em d e F re ep ik Es tu do d e ca so ✓ Atende ao princípio da responsabilidade única. ✓ Atende ao princípio do aberto/fechado. ✓ Paralelismo: Cada iterador é isolado e possui acesso a apenas os seus próprios estados de iteração ✓ O cliente controla a iteração. Im ag em d e p ik is u p er st ar n o F re ep ik (Des) Vantagens de utilizar o padrão ✖ Se utilizado indiscriminadamente, pode tornar o código desnecessariamente complexo. ✖ Há muitas linguagens que implementam iteradores para diversos cenários. Eles podem ser mais otimizados e dispensar a implementação de um iterador personalizado. D úv id as ? Atividade 39 O código a seguir implementa um controlador de estoque que contém alguns produtos na List produtos. https://dartpad.dev/?id=14b78a5d4f45a8263ee8d7ac5ad0ad15 Implemente um Iterator (com as devidas interfaces) para os produtos de forma que ao chamar o método proxProduto, o iterator percorra a List produtos e retorne o elemento cuja data de validade seja a mais recente possível, retirando o produto da lista. https://dartpad.dev/?id=14b78a5d4f45a8263ee8d7ac5ad0ad15 Referências SHVETS, Alexander. Mergulho nos Padrões de Projeto. Edição 2023-1.24. Kyiv: Refactoring.guru. 2022.