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

Post on 21-Jul-2015

162 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

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.

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.

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.

Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br

Intimidade Inapropriada

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

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”

Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br

Divergent Changes

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

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

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

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

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

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

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 uma classe possuir diversos algoritmos que possam ser utilizados de forma intercambiável.

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.

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

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 TemplateMethod

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

Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br

Refatorar para TemplateMethod

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

Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br

Factory Method

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

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 uma implementação que combine o comportamento das subclasses

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.

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

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

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.

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 comportamento de acordo com o estado de uma entidade do sistema

Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br

State

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

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 e depois

Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br

Refatorar substituindo condicionais por

polimorfismo

• Antes e depois

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;

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

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

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

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

top related