programação orientada a objetos - pós graduação - aula 8 - bad smells & design patterns

48
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 [email protected]

Upload: carlos-eduardo-dantas

Post on 21-Jul-2015

162 views

Category:

Technology


0 download

TRANSCRIPT

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

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 – [email protected]

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

Prof Carlos Eduardo Dantas – [email protected]

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.

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

Prof Carlos Eduardo Dantas – [email protected]

Refused Bequest

• Quando herdamos de uma classe, mas não queremos fazer uso de alguns métodos herdados.

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

Prof Carlos Eduardo Dantas – [email protected]

Feature Envy

• Quando um método está mais interessado em outro objeto do que no próprio objeto no qual ele está inserido.

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

Prof Carlos Eduardo Dantas – [email protected]

Intimidade Inapropriada

• Métodos que conhecem demais sobre a implementação de outra classe

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

Prof Carlos Eduardo Dantas – [email protected]

God Class ou Blob

• Classes que controlam muitos objetos do sistema. Tendem a crescer mais do que deveriam e “fazer tudo”

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

Prof Carlos Eduardo Dantas – [email protected]

Divergent Changes

• Classes não coesas, que sofrem constantes alterações devido a terem diversas responsabilidades

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

Prof Carlos Eduardo Dantas – [email protected]

Shotgun Surgery

• Classes que possuem métodos que, toda vez que alteram, disparam mudanças em diversos outros lugares do código

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

Prof Carlos Eduardo Dantas – [email protected]

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

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

Prof Carlos Eduardo Dantas – [email protected]

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..

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

Prof Carlos Eduardo Dantas – [email protected]

Design Patterns

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

Prof Carlos Eduardo Dantas – [email protected]

J2EE Patterns

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

Prof Carlos Eduardo Dantas – [email protected]

Primeiro Exemplo

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

Prof Carlos Eduardo Dantas – [email protected]

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;

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

Prof Carlos Eduardo Dantas – [email protected]

Strategy

Solução?

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

Prof Carlos Eduardo Dantas – [email protected]

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.

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

Prof Carlos Eduardo Dantas – [email protected]

Strategy

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

Prof Carlos Eduardo Dantas – [email protected]

Strategy

Resolve?

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

Prof Carlos Eduardo Dantas – [email protected]

Strategy

Resolve?

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

Prof Carlos Eduardo Dantas – [email protected]

Strategy

Strategy é um padrão que deve ser utilizado quando uma classe possuir diversos algoritmos que possam ser utilizados de forma intercambiável.

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

Prof Carlos Eduardo Dantas – [email protected]

Template Method

• Algoritmo Geral na superclasse (parte fixa);

• Passos distintos nas subclasses (parte variável), fornecendo implementação própria, completando lacunas.

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

Prof Carlos Eduardo Dantas – [email protected]

Template Method

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

Prof Carlos Eduardo Dantas – [email protected]

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.

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

Prof Carlos Eduardo Dantas – [email protected]

Template Method

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

Prof Carlos Eduardo Dantas – [email protected]

Template Method

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

Prof Carlos Eduardo Dantas – [email protected]

Refatorar para TemplateMethod

• Funcionalidades com similaridades nos algoritmos são implemetadas em diferentes classes, gerando duplicação de código.

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

Prof Carlos Eduardo Dantas – [email protected]

Refatorar para TemplateMethod

• Funcionalidades com similaridades nos algoritmos são implemetadas em diferentes classes, gerando duplicação de código.

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

Prof Carlos Eduardo Dantas – [email protected]

Factory Method

• Encapsular a criação de objetos através da herança

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

Prof Carlos Eduardo Dantas – [email protected]

Factory Method

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

Prof Carlos Eduardo Dantas – [email protected]

Factory Method

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

Prof Carlos Eduardo Dantas – [email protected]

Bridge

• Um dos problemas da Herança, é quando se precisa de uma implementação que combine o comportamento das subclasses

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

Prof Carlos Eduardo Dantas – [email protected]

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.

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

Prof Carlos Eduardo Dantas – [email protected]

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 methodse hook classes.

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

Prof Carlos Eduardo Dantas – [email protected]

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 methodse hook classes.

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

Prof Carlos Eduardo Dantas – [email protected]

Observer

• Utiliza composição com múltiplos objetos;

• Mudanças em objetos são notificadas para outros objetos interessados.

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

Prof Carlos Eduardo Dantas – [email protected]

Observer

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

Prof Carlos Eduardo Dantas – [email protected]

Observer

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

Prof Carlos Eduardo Dantas – [email protected]

State

• Utilizando composição, permite a variação de comportamento de acordo com o estado de uma entidade do sistema

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

Prof Carlos Eduardo Dantas – [email protected]

State

• Aplicação do algoritmo state para busca em profundidade dos grafos

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

Prof Carlos Eduardo Dantas – [email protected]

Refatorar substituindo condicionais por

polimorfismo

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

Prof Carlos Eduardo Dantas – [email protected]

Refatorar substituindo condicionais por

polimorfismo

• Antes e depois

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

Prof Carlos Eduardo Dantas – [email protected]

Refatorar substituindo condicionais por

polimorfismo

• Antes e depois

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

Prof Carlos Eduardo Dantas – [email protected]

Composição Recursiva

• Criação de uma estrutura mais robusta colocando instâncias da superclasse ou interface nas subclasses;

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

Prof Carlos Eduardo Dantas – [email protected]

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

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

Prof Carlos Eduardo Dantas – [email protected]

Composite

• Modelagem do Composite com trechos de vôo

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

Prof Carlos Eduardo Dantas – [email protected]

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.

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

Prof Carlos Eduardo Dantas – [email protected]

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

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

Prof Carlos Eduardo Dantas – [email protected]

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”.