Programação Orientada a Objetos
Bad Smells e Design
Patterns
Pós Graduação em Análise e Desenvolvimento de Sistemas
Aplica...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Bad Smells
• Conjunto de más práticas de design
• Popularizad...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Refused Bequest
• Quando herdamos de uma classe, mas não
quer...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Feature Envy
• Quando um método está mais interessado
em outr...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Intimidade Inapropriada
• Métodos que conhecem demais sobre a...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
God Class ou Blob
• Classes que controlam muitos objetos do
s...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Divergent Changes
• Classes não coesas, que sofrem constantes...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Shotgun Surgery
• Classes que possuem métodos que, toda
vez q...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Design Patterns
• São uma forma de se documentar uma
solução ...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Design Patterns
• Padrões = Aprender soluções sem precisar
pa...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Design Patterns
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
J2EE Patterns
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Primeiro Exemplo
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Strategy
• Código ruim + funcionando = mantém do
jeito que es...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Strategy
Solução?
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Strategy
Problemas:
1 – Explosão de subclasses;
2 – Não é pos...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Strategy
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Strategy
Resolve?
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Strategy
Resolve?
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Strategy
Strategy é um padrão que deve ser utilizado
quando u...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Template Method
• Algoritmo Geral na superclasse (parte
fixa)...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Template Method
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Template Method
• Hook Method = técnica para permitir a
exten...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Template Method
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Template Method
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Refatorar para Template
Method
• Funcionalidades com similari...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Refatorar para Template
Method
• Funcionalidades com similari...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Factory Method
• Encapsular a criação de objetos através da
h...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Factory Method
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Factory Method
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Bridge
• Um dos problemas da Herança, é quando se
precisa de ...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Bridge
• O padrão Bridge irá criar uma ponte entre as duas
hi...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Bridge
• Um ótimo efeito colateral nesse padrão é que
classes...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Bridge
• Um ótimo efeito colateral nesse padrão é que
classes...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Observer
• Utiliza composição com múltiplos objetos;
• Mudanç...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Observer
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Observer
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
State
• Utilizando composição, permite a variação de
comporta...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
State
• Aplicação do algoritmo state para busca em
profundida...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Refatorar substituindo
condicionais por
polimorfismo
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Refatorar substituindo
condicionais por
polimorfismo
• Antes ...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Refatorar substituindo
condicionais por
polimorfismo
• Antes ...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Composição Recursiva
• Criação de uma estrutura mais robusta
...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Composite
• Possui como objetivo prover uma solução para obje...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Composite
• Modelagem do Composite com trechos de
vôo
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Chains of Responsability
• Passos que precisam ser executados...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Chains of Responsability
• Arquivo com uma lista de certifica...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Referências
• GUERRA, Eduardo. Design Patterns com Java.
Casa...
Próximos SlideShares
Carregando em…5
×

Programação Orientada a Objetos - Pós Graduação - Aula 8 - Bad Smells & Design Patterns

539 visualizações

Publicada em

Slides da oitava e última aula de Programação Orientada a Objetos no curso de Pós Graduação em Análise e Desenvolvimento Aplicados à Gestão Empresarial

Publicada em: Tecnologia
0 comentários
2 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
539
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2
Ações
Compartilhamentos
0
Downloads
17
Comentários
0
Gostaram
2
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Programação Orientada a Objetos - Pós Graduação - Aula 8 - Bad Smells & Design Patterns

  1. 1. Programação Orientada a Objetos Bad Smells e Design Patterns Pós Graduação em Análise e Desenvolvimento de Sistemas Aplicados à Gestão Empresarial INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA TRIÂNGULO MINEIRO – Campus Uberlândia Centro Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
  2. 2. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Bad Smells • Conjunto de más práticas de design • Popularizadas no livro “Refactoring” do Martin Fowler; • Existem mais de 60 bad smells, mas por questão de escopo, serão citados apenas 6.
  3. 3. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Refused Bequest • Quando herdamos de uma classe, mas não queremos fazer uso de alguns métodos herdados.
  4. 4. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Feature Envy • Quando um método está mais interessado em outro objeto do que no próprio objeto no qual ele está inserido.
  5. 5. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Intimidade Inapropriada • Métodos que conhecem demais sobre a implementação de outra classe
  6. 6. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br God Class ou Blob • Classes que controlam muitos objetos do sistema. Tendem a crescer mais do que deveriam e “fazer tudo”
  7. 7. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Divergent Changes • Classes não coesas, que sofrem constantes alterações devido a terem diversas responsabilidades
  8. 8. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Shotgun Surgery • Classes que possuem métodos que, toda vez que alteram, disparam mudanças em diversos outros lugares do código
  9. 9. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Design Patterns • São uma forma de se documentar uma solução para um problema de modelagem; • Soluções que foram implementadas com sucesso de forma recorrente em diversos contextos; • Padrões de projetos ajudam a adquirir habilidade para modelar Software
  10. 10. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Design Patterns • Padrões = Aprender soluções sem precisar passar por vários anos alternando entre escolhas certas e erradas. • MVC é um padrão, mas arquitetural; • Cada tecnologia tem seus padrões, como padrões Java EE, padrões Android, etc..
  11. 11. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Design Patterns
  12. 12. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br J2EE Patterns
  13. 13. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Primeiro Exemplo
  14. 14. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Strategy • Código ruim + funcionando = mantém do jeito que está; • Problemas = precisar manter o código, por exemplo, novas regras de negócio; • A solução da forma que está não irá escalar para um número grande de regras; • O código pode crescer de forma descontrolada e se tornar não gerenciável; • Este código necessita de refactoring;
  15. 15. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Strategy Solução?
  16. 16. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Strategy Problemas: 1 – Explosão de subclasses; 2 – Não é possível alterar o comportamento uma vez que a classe foi instanciada. Soluções? 1 – Herança com granularidade diferente? Uma subclasse para cada tipo de veículo? Problemas? Muita duplicidade de código.
  17. 17. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Strategy
  18. 18. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Strategy Resolve?
  19. 19. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Strategy Resolve?
  20. 20. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Strategy Strategy é um padrão que deve ser utilizado quando uma classe possuir diversos algoritmos que possam ser utilizados de forma intercambiável.
  21. 21. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Template Method • Algoritmo Geral na superclasse (parte fixa); • Passos distintos nas subclasses (parte variável), fornecendo implementação própria, completando lacunas.
  22. 22. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Template Method
  23. 23. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Template Method • Hook Method = técnica para permitir a extensão do comportamento; • Template Method = padrão de projeto que soluciona o problema; • Na prática, o template Method utiliza Hook Method em sua solução; • O conceito de Hook Method é mais geral, também sendo utilizado por outros padrões.
  24. 24. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Template Method
  25. 25. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Template Method
  26. 26. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Refatorar para Template Method • Funcionalidades com similaridades nos algoritmos são implemetadas em diferentes classes, gerando duplicação de código.
  27. 27. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Refatorar para Template Method • Funcionalidades com similaridades nos algoritmos são implemetadas em diferentes classes, gerando duplicação de código.
  28. 28. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Factory Method • Encapsular a criação de objetos através da herança
  29. 29. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Factory Method
  30. 30. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Factory Method
  31. 31. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Bridge • Um dos problemas da Herança, é quando se precisa de uma implementação que combine o comportamento das subclasses
  32. 32. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Bridge • O padrão Bridge irá criar uma ponte entre as duas hierarquias ligadas por uma relação de composição; • No exemplo, a ponte é caracterizada pela relação de composição entre a classe GeradorArquivo e a interface PosProcessador.
  33. 33. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Bridge • Um ótimo efeito colateral nesse padrão é que classes que foram separadas podem ser utilizadas em outro contexto; • Bridge utiliza ao mesmo tempo herança e composição; • Bridge utiliza ao mesmo tempo hook methods e hook classes.
  34. 34. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Bridge • Um ótimo efeito colateral nesse padrão é que classes que foram separadas podem ser utilizadas em outro contexto; • Bridge utiliza ao mesmo tempo herança e composição; • Bridge utiliza ao mesmo tempo hook methods e hook classes.
  35. 35. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Observer • Utiliza composição com múltiplos objetos; • Mudanças em objetos são notificadas para outros objetos interessados.
  36. 36. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Observer
  37. 37. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Observer
  38. 38. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br State • Utilizando composição, permite a variação de comportamento de acordo com o estado de uma entidade do sistema
  39. 39. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br State • Aplicação do algoritmo state para busca em profundidade dos grafos
  40. 40. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Refatorar substituindo condicionais por polimorfismo
  41. 41. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Refatorar substituindo condicionais por polimorfismo • Antes e depois
  42. 42. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Refatorar substituindo condicionais por polimorfismo • Antes e depois
  43. 43. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Composição Recursiva • Criação de uma estrutura mais robusta colocando instâncias da superclasse ou interface nas subclasses;
  44. 44. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Composite • Possui como objetivo prover uma solução para objetos que representam um conjunto de objetos, mas que compartilham a mesma abstração deles; • O padrão segue uma estrutura de árvore
  45. 45. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Composite • Modelagem do Composite com trechos de vôo
  46. 46. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Chains of Responsability • Passos que precisam ser executados em sequência, contudo com flexibilidade na configuração destes; • Reutilização destes passos em outros procedimentos • Este padrão cria uma cadeia de execução na qual cada elemento processa as informações e em seguida delega a execução ao próximo em sequência.
  47. 47. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Chains of Responsability • Arquivo com uma lista de certificados digitais revogados, atualizando de forma periódica em um servidor remoto, contendo a data de validade; • Caches na memória e na base de dados
  48. 48. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Referências • GUERRA, Eduardo. Design Patterns com Java. Casa do Código, 2014; • ANICHE, Maurício. Orientação a objetos e SOLID para Ninjas. Casa do Código, 2015; • “LARMAN, Craig – Utilizando UML e Padrões 3ª Edição. Bookman, 2007”.

×