Escolar Documentos
Profissional Documentos
Cultura Documentos
Iterator / Observer
Artur Pereira Neto
Conteúdo
01. Introdução e Contextualização
06. Referências
Introdução e Contextualização
Padrões de Projeto
• PADRÕES DE PROJETO SÃO SOLUÇÕES EM
NÍVEL DE DESIGN PARA PROBLEMAS
RECORRENTES QUE OS ENGENHEIROS DE
SOFTWARE E DESENVOLVEDORES
ENCONTRAM COM FREQUÊNCIA.
⚬ ESTRUTURAIS
⚬ COMPORTAMENTAIS
Padrões de Projeto
• UM PADRÃO ENCERRA O CONHECIMENTO
DE UMA PESSOA MUITO EXPERIENTE EM
UM DETERMINADO ASSUNTO DE UMA
FORMA QUE ESTE CONHECIMENTO PODE
SER TRANSMITIDO PARA OUTRAS
PESSOAS MENOS EXPERIENTES.
Padrões de Projeto
• A IDÉIA DE PADRÕES FOI APRESENTADA POR
CHRISTOPHER ALEXANDER EM 1977 NO CONTEXTO
DE ARQUITETURA (DE PRÉDIOS E CIDADES):
CRISTOPHER
ALEXANDER
O arquiteto e pesquisador
na universidade de
Berkeley. Reconhece e
cunha a terminologia
sobre padrões de design
aplicada a projetos de
arquitetura e urbanismo.
DesenvolvimentoHistórico
1977 1987
CRISTOPHER CUNNINGHAM E
ALEXANDER
O arquiteto e pesquisador InspiradosBECK
pelas ideias de
na universidade de Christopher Alexander
Berkeley. Reconhece e publicam o livro "Using
cunha a terminologia pattern languages for
sobre padrões de design object-oriented programs
aplicada a projetos de "
arquitetura e urbanismo.
DesenvolvimentoHistórico
1977 1987 1991
• Objetivo / Intenção
⚬ O Iterator é um padrão de projeto
comportamental que permite a você percorrer
elementos de uma coleção sem expor as
representações dele (lista, pilha, árvore, etc.)
Fonte: https://refactoring.guru/pt-br/design-patterns/iterator
• Também Conhecido Como
⚬ Cursor
Formato do padrão ITERATOR
• Motivação
⚬ Coleções são um dos tipos de dados mais usados em programação. Não obstante,
uma coleção é apenas um contêiner para um grupo de objetos.
Fonte: https://refactoring.guru/pt-br/design-patterns/iterator
⚬ A maioria das coleções armazena seus elementos em listas simples. Contudo, alguns
deles são baseados em pilhas, árvores, grafos, e outras estruturas complexas de
dados.Mas independente de quão complexa uma coleção é estruturada, ela deve
fornecer uma maneira de acessar seus elementos para que outro código possa usá-
los. Deve haver uma maneira de ir de elemento em elemento na coleção sem ter que
acessar os mesmos elementos repetidamente.
Formato do padrão ITERATOR
• Motivação
⚬ Se a coleção é baseada numa lista basta fazer um loop em todos os elementos.
⚬ Mas como proceder em uma estrutura de dados complexa, tal como uma árvore? Um
dia pode ser necessário percorrer em profundidade, no dia seguinte na amplitude, na
semana seguinte um acesso aleatório aos elementos da árvore.
Fonte: https://refactoring.guru/pt-br/design-patterns/iterator
Formato de um padrão ITERATOR
• Aplicabilidade
⚬ Em quais situações o padrão é aplicável
• Estrutura
⚬ Uma representação gráfica da estrutura de classes do padrão (usando object
modelling technique OMT91)
• Participantes
⚬ As classes e objetos que participam e quais são suas responsabilidades
• Colaborações
⚬ Como os participantes colaboram para exercer as suas responsabilidades
Formato de um padrão ITERATOR
• Solução proposta
⚬ A ideia principal do padrão Iterator é extrair o
comportamento de travessia de uma coleção
para um objeto separado chamado um
iterador.
Fonte: https://refactoring.guru/pt-br/design-patterns/iterator
Formato de um padrão ITERATOR
• Solução proposta
Fonte: https://refactoring.guru/pt-br/design-patterns/iterator
Formato de um padrão ITERATOR
• Estrutura
Fonte: https://refactoring.guru/pt-br/design-patterns/iterator
Formato de um padrão ITERATOR
• Estrutura
Fonte: https://refactoring.guru/pt-br/design-patterns/iterator
Formato de um padrão ITERATOR
• Estrutura
Fonte: https://refactoring.guru/pt-br/design-patterns/iterator
Formato de um padrão ITERATOR
• Estrutura
Fonte: https://refactoring.guru/pt-br/design-patterns/iterator
Formato de um padrão ITERATOR
• Estrutura
Fonte: https://refactoring.guru/pt-br/design-patterns/iterator
Formato de um padrão ITERATOR
• Estrutura
Fonte: https://refactoring.guru/pt-br/design-patterns/iterator
Formato de um padrão ITERATOR
• Estrutura
Fonte: https://refactoring.guru/pt-br/design-patterns/iterator
Aplicabilidade do padrão ITERATOR
• Utilize o padrão Iterator quando sua coleção tiver uma estrutura de dados complexa por debaixo dos panos,
mas você quer esconder a complexidade dela de seus clientes (seja por motivos de conveniência ou segurança).
O iterador encapsula os detalhes de se trabalhar com uma estrutura de dados complexa, fornecendo ao
cliente vários métodos simples para acessar os elementos da coleção.
Embora essa abordagem seja muito conveniente para o cliente, ela também protege a coleção de ações
descuidadas ou maliciosas que o cliente poderia fazer se estivesse trabalhando com as coleções
diretamente.
Aplicabilidade do padrão ITERATOR
• Utilize o padrão para reduzir a duplicação de código de travessia em sua aplicação.
Quando colocados dentro da lógica de negócio da aplicação, ele pode desfocar a responsabilidade do
codigo original e torná-lo um código de difícil manutenção.
Mover o código de travessia para os iteradores designados pode ajudar você a tornar o código da
aplicação mais enxuto e limpo.
Aplicabilidade do padrão ITERATOR
• Utilize o Iterator quando você quer que seu código seja capaz de percorrer diferentes estruturas de dados ou
quando os tipos dessas estruturas são desconhecidos de antemão.
O padrão fornece um par de interfaces genérica tanto para coleções como para iteradores.
Já que o código usa essas interfaces, ele ainda vai funcionar se você passar diversos tipos de coleções e
iteradores que implementam essas interfaces.
O padrão de projeto
OBSERVER
Formato do padrão OBSERVER
• Nome
⚬ Observer
• Objetivo / Intenção
⚬ O Observer é um padrão de projeto comportamental
que permite a definição de um mecanismo de
assinatura para notificar múltiplos objetos sobre
quaisquer eventos que aconteçam com o objeto que
eles estão observando. https://refactoring.guru/pt-br/design-patterns/observer
https://refactoring.guru/pt-br/design-patterns/observer
Formato de um padrão OBSERVER
• Estrutura
https://refactoring.guru/pt-br/design-patterns/observer
Formato de um padrão OBSERVER
• Estrutura
https://refactoring.guru/pt-br/design-patterns/observer
Formato de um padrão OBSERVER
• Estrutura
https://refactoring.guru/pt-br/design-patterns/observer
Formato de um padrão OBSERVER
• Estrutura
https://refactoring.guru/pt-br/design-patterns/observer
Formato de um padrão OBSERVER
• Estrutura
https://refactoring.guru/pt-br/design-patterns/observer
Formato de um padrão OBSERVER
• Estrutura
https://refactoring.guru/pt-br/design-patterns/observer
Aplicabilidade do padrão OBSERVER
• Utilize o padrão Observer quando mudanças no estado de um objeto podem precisar mudar outros objetos, e o
atual conjunto de objetos é desconhecido de antemão ou muda dinamicamente.
O padrão Observer permite que qualquer objeto que implemente a interface do assinante possa se
inscrever para notificações de eventos em objetos da publicadora.
• Utilize o padrão quando alguns objetos em sua aplicação devem observar outros, mas apenas por um tempo
limitado ou em casos específicos.
A lista de inscrição é dinâmica, então assinantes podem entrar e sair da lista sempre que quiserem.
Referências
Referências
• Freeman, E., Bates, B., Freeman, E., Robson, E., Sierra, K. (2004). Head First Design
Patterns. Alemanha: O'Reilly Media, Incorporated.
• https://refactoring.guru/pt-br