Skip to content
Igor Avila Pereira edited this page Dec 16, 2024 · 65 revisions

Guias


Playlists

Padrões Comportamentais

Padrões Estruturais

Padrões Criacionais


Aulas

11/12 - Atividade Avaliada 2


04/12 - Revisão 2 bim

Código

Lista 2


27/11 - Builder

Slides

Códigos

  • Builder1: Classe Builder Interna

  • Builder2: Classe Builder Externa

  • Builder3: Classe Builder Gerada por Loombok

  • Builder4: Classe Builder Gerada por Immutables

Trabalho 9 - Builder

Vídeos - Padrão Builder:

<dependencies>

<!-- https://mvnrepository.com/artifact/org.immutables/builder -->
<dependency>
    <groupId>org.immutables</groupId>
    <artifactId>builder</artifactId>
    <version>2.10.0-rc0</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.immutables/value -->
<dependency>
    <groupId>org.immutables</groupId>
    <artifactId>value</artifactId>
    <version>2.10.0-rc0</version>
    <scope>provided</scope>
</dependency>

</dependencies>

Material Complementar:

Extra: Singleton

Materiais Complementares:


13/11 - Proxy

Aula:

Vídeos:

Encontro Síncrono - Proxy - 18/11/21:

Links Complementares:


06/11 - Decorator

Exemplos

image

Slides

UML

Trabalho 7 - Decorator

Vídeos - Padrão Decorator:

Leitura Complementar:


30/10 - Atividade avaliada presencial (4.0)


23/10 - Revisão 1 bim

exercicios_1bim.pdf

código


16/10 - Iterator

Código

Iterator

Algumas linguagens de programação permitem que classes e objetos containers, ou seja, objetos que agrupam outros objetos, possam ser iteradosatravés do foreach sem a necessidade  de   expor   a   estrutura   interna,   seus   índices   e   sua   implementação. Eles   são   Conhecidos   como  objetos iteráveis, ou objetos que disponibilizam um Iterador (Iterator).

Intenção

Disponibilizar   os   objetos   agregados   para   consulta   através   de   iteração   sem   revelar   a  estrutura interna ou preocupar­se com ela.

Motivação

Por   vezes   temos   objetos   tem   que   agregam   coleções   internas   as   quais   não   queremos  revelar, ou seja, permitir que clientes externos modifiquem ou conheçam a estrutura desta lista.

Aplicabilidade

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.

Slides

Trabalho 6 (Iterator)

Iterator no Java:

Exemplos de uso: O padrão é muito comum no código Java. Muitos frameworks e bibliotecas o usam para fornecer uma maneira padrão de percorrer suas coleções.

Aqui estão alguns exemplos das principais bibliotecas Java:

Todas as implementações de java.util.Iterator (também java.util.Scanner).

Todas as implementações de java.util.Enumeration.

Identificação: O iterador é fácil de reconhecer pelos métodos de navegação (como next, previous e outros). O código cliente que usa iteradores pode não ter acesso direto à coleção que está sendo percorrida.

Material Complementar:


09/10 - Command

Ex:

  • Controle de Automação Residencial

  • Controle de Rotas para Ambiente Web

Códigos Aula

Slides

image

image

O padrão de projeto Command possui várias características que o tornam uma escolha valiosa em muitos cenários de desenvolvimento de software:

  • Desacoplamento: Separa o objeto que solicita a ação (invoker) do objeto que realiza a ação (receiver), promovendo um design mais modular e flexível.
  • Extensibilidade: Facilita a adição de novos comandos sem alterar o código existente, seguindo o princípio aberto/fechado (Open/Closed Principle).
  • Reversibilidade: Permite implementar facilmente operações de desfazer (undo) e refazer (redo), armazenando o histórico de comandos executados.
  • Composição: Comandos podem ser compostos em comandos mais complexos, permitindo a criação de macros ou sequências de operações.
  • Registro e Log: Facilita o registro e a auditoria de operações, já que cada comando pode ser registrado com detalhes específicos sobre a ação realizada.
  • Flexibilidade: Permite parametrizar objetos com diferentes solicitações, tornando o sistema mais adaptável a mudanças.

Embora o padrão de projeto Command tenha muitas vantagens, ele também apresenta algumas características negativas que devem ser consideradas:

  • Complexidade Adicional: A implementação do padrão Command pode adicionar complexidade ao código, especialmente em sistemas simples onde o padrão pode ser desnecessário.
  • Sobrecarga de Objetos: Pode resultar em um grande número de classes e objetos, já que cada comando geralmente requer sua própria classe concreta.
  • Manutenção: Com o aumento do número de comandos, a manutenção do código pode se tornar mais difícil, exigindo mais esforço para gerenciar e atualizar os comandos.
  • Desempenho: Em sistemas com muitos comandos, o armazenamento e a execução de comandos podem impactar o desempenho, especialmente se houver necessidade de registrar ou desfazer muitas operações.
  • Overhead de Memória: O armazenamento de estados para permitir operações de desfazer (undo) pode consumir uma quantidade significativa de memória, dependendo da complexidade das operações e da frequência com que são realizadas.

Essas desvantagens não anulam os benefícios do padrão Command, mas é importante considerá-las ao decidir se este padrão é adequado para o seu projeto específico.

Trabalho 5 (Command)

Vídeo - Aula

Vídeos - Command:

Material Complementar:


02/10 - State

Bom

  • desacopla a lógica de um estado da classe de contexto
  • permite a criação de novos estados apenas adicionando novas classes
  • elimina condicionais complexas da classe de contexto

Ruim

  • se você tem apenas poucas condicionais simples, aplicar este padrão pode deixar seu código mais complexo do que o necessário

Vídeos:

Códigos:

Material Complementar:

Strategy vs State

The State and Strategy Patterns have the same class diagram, but they differ in intent. The Strategy Pattern typically configures Context classes with a behavior or algorithm, which can be done through composition during runtime. State Pattern allows a Context to change its behavior as the state of the Context changes.

https://acervolima.com/diferenca-entre-o-estado-e-o-padrao-de-design-de-estrategia-em-java/

Links:


25/09 - Template Method

Exemplos:

  • Relatório
  • Template
  • Algoritmos de Ordenação
  • Cálculo do Frete
  • Exportação/Conversão de Arquivos CSV
  • Extração de dados de documentos de diversos formatos
  • Gerador de templates HTML
  • Gerador de Relatórios de diversas fontes: csv, banco de dados e etc.

Códigos - Aula

Video - Encontro

Presentes:

  • Erick
  • Yuri
  • Annie
  • Jaime
  • Ana Clara
  • Gabriel
  • Gabriel Barela
  • Bruno
  • Leticia

Padrão Template Method:

Slides:

Trabalho - Template Method:

Vídeos:

Diferença entre o Template Method e o Strategy:

Material Complementar:


18/09 - Observer

Código - Aula

Painel Supermercado (Observer)

  • opcional: Forma de Notificação (Strategy)

Estação Climática

Blog/Portal de Notícias

Controle de Telas - Sistema Financeiro

Exemplo comentado - Mudança de Temperatura (Ar condicionado)

Encontro Síncrono - Observer - 03/11/21:

Padrão Observer:

Vídeos:

Leitura complementar - Observer:


11/09 - Strategy

Apresentação da disciplina

Revisão O.O

Os Padrões de Projeto são soluções já encontradas, experimentadas e testadas e que podem ser aplicadas a projetos sem ter que "reinventar a roda". Vários Padrões de Projeto foram catalogados e são um conjunto de melhores práticas que são seguidos e usados em projetos de software orientado a objetos.

Padrões de Projeto, basicamente, descrevem soluções para problemas recorrentes em sistemas de software orientado a objetos em desenvolvimento.

Além disso, os Padrões de Projeto também definem um vocabulário comum que facilitam o aprendizado e documentação de sistemas de software.

Os padrões de projeto são classificados como:

  • Criacional - define a criação de objetos;
  • Estrutural - define a composição de classes e objetos;
  • Comportamental - define a interação entre classes e objetos.

Introdução - Padrão de Projetos

Padrão Strategy:

Exemplos:

Vídeos:

Conteúdo Complementar: