Buscar

Aula 31 - Iterator



Continue navegando


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.