Refatora - PowerPoint PPT Presentation

1 / 45
About This Presentation
Title:

Refatora

Description:

Title: IDE (Integrated Development Environment) Author: Jonas Knopman Last modified by: Jonas Knopman Created Date: 2/4/2003 12:09:38 PM Document presentation format – PowerPoint PPT presentation

Number of Views:93
Avg rating:3.0/5.0
Slides: 46
Provided by: Jonas167
Category:

less

Transcript and Presenter's Notes

Title: Refatora


1
Refatorações
  • Experiência é aquela coisa maravilhosa que
    permite que você reconheça um erro tão logo o
    cometa novamente
  • F.P. Jones

2
O que é Refatoração?
  • Refatoração é o processo de alteração de um
    sistema de software de modo que o comportamento
    externo do código não mude, mas que sua estrutura
    interna seja melhorada.
  • É uma maneira disciplinada de aperfeiçoar o
    código que minimiza a chance de introdução de
    falhas.
  • Em essência, quando você usa refatoração, você
    está melhorando o projeto do código após este ter
    sido escrito.

3
Um catálogo de Refatorações
  • Tratando Generalizações

4
Subir atributo na hierarquia
5
Subir atributo na hierarquia
  • Duas subclasses têm o mesmo atributo
  • Mova o atributo para a superclasse

6
Subir atributo na hierarquia
7
Subir método na hierarquia
8
Subir método na hierarquia
  • Você tem métodos nas subclasses que produzem
    resultados idênticos .
  • Mova-os para a superclasse.

Motivação Evitar a duplicação de código
9
Exemplo
O método createBill é idêntico para ambas as
classes
10
Exemplo
  • Não posso mover o método createBill na hierarquia
    porque o método chargeFor é diferente em cada
    subclasse
  • Solução declarar o método chargeFor como
    abstrato na superclasse

11
Subir código do construtor na hierarquia
12
Subir código do construtor na hierarquia
  • Você tem construtores nas subclasses com código
    quase idêntico.
  •  
  • Crie um construtor para a superclasse chame-o a
    partir de métodos das subclasses.

Motivação O código dos construtores é quase
idêntico, mas você não pode usar "subir método na
hierarquia" porque métodos construtores não podem
ser herdados
13
Descer Método na Hierarquia
14
Descer Método na Hierarquia
  • Algum comportamento na superclasse é relevante
    apenas para algumas de suas subclasses.
  • Mova-o para essas subclasses

Motivação Um código específico faz sentido
apenas em algumas das subclasses
15
Descer Método na Hierarquia
16
Extrair Subclasse
17
Extrair Subclasse
  • Uma classe tem características que são usadas
    apenas em algumas instâncias.
  • Crie uma subclasse para esse subconjunto de
    características.

Motivação O principal motivo para usar Extrair
Subclasse é a observação de que uma classe tem
comportamento usado por algumas das instâncias da
classe mas não por outras.
18
Extrair Subclasse
19
Extrair Subclasse
20
Extrair Superclasse
21
Extrair Superclasse
  • Você tem duas classes com características
    semelhantes.
  •  
  • Crie uma superclasse e mova as características em
    comum para ela.
  • Motivação Evitar a duplicação de código

22
Extrair Superclasse
23
Extrair Superclasse
24
Extrair Interface
25
Extrair Interface
  • Diversos clientes usam o mesmo subconjunto da
    interface de uma classe ou duas classes tem parte
    de suas interfaces em comum.
  •  
  • Extraia o subconjunto para uma interface.

26
Extrair Interface
  • Motivação
  • Somente parte da interface de uma classe faz
    sentido para um grupo de clientes
  • Uma classe tem de trabalhar com qualquer classe
    que trate um grupo de requisições
  • Interfaces são uma boa solução quando uma classe
    tem papéis distintos em diferentes situações.

27
Extrair Interface
28
Extrair Interface
29
Condensar Hierarquia
30
Condensar Hierarquia
  • Uma superclasse e uma subclasse não são muito
    diferentes.
  • Junte-as.

31
Criar Método Roteiro
32
Criar Método Roteiro
  • Você tem dois métodos em subclasses diferentes
    que executam passos semelhantes na mesma ordem,
    mas esses passos são diferentes.
  • Coloque os passos em métodos com a mesma
    assinatura, de modo que os métodos originais se
    tornem o mesmo. Você poderá então subi-los na
    hierarquia.

33
Criar Método Roteiro
  • Motivação 
  • Herança é uma ferramenta poderosa para eliminar
    comportamento duplicado. Sempre que vemos dois
    métodos semelhantes em uma subclasse, queremos
    juntá-los em uma superclasse. Mas e se eles não
    forem exatamente os mesmos?  
  • Um caso comum é o de dois métodos que parecem ter
    passos similares na mesma ordem, porém os passos
    não são os mesmos. Neste caso podemos mover a
    seqüência para a superclasse e permitir que o
    polimorfismo execute seu papel

34
Criar Método Roteiro
35
(No Transcript)
36
Substituir Herança por Delegação
37
Substituir Herança por Delegação
  • Uma subclasse usa apenas parte da interface de
    uma superclasse ou não quer herdar dados.
  • Crie um campo para a superclasse, ajuste métodos
    para delegarem para a superclasse e remova a
    herança.
  •  

38
Substituir Herança por Delegação
  • Motivação
  • A subclasse usa somente parte da interface da
    superclasse
  • Problema conceitual a subclasse não é uma
    superclasse
  • Necessidade de substituir a herança por outra
    "mais útil"

39
Substituir Herança por Delegação
40
Substituir Herança por Delegação
41
Substituir Delegação por Herança
42
Substituir Delegação por Herança
  • Você está usando delegação e está freqüentemente
    escrevendo muitas delegações simples para toda a
    interface.
  •  
  • Torne a classe que delega uma subclasse da classe
    delegada.

43
Motivação
  • Motivação
  •  
  • Este é o reverso de Substituir Herança por
    Delegação. Se você se encontrar usando todos os
    métodos da classe delegada e estiver farto de
    escrever todos esses métodos de delegação
    simples, pode voltar para a herança facilmente.

44
Substituir Delegação por Herança
45
Substituir Delegação por Herança
Write a Comment
User Comments (0)
About PowerShow.com