SlideShare uma empresa Scribd logo
1 de 14
Padrões de Refatoração Universidade Federal do Ceará - 2014.2 
Engenharia de Software - Projeto Detalhado de Software
“Uma alteração feita na estrutura interna do 
software para torná-lo mais fácil de ser 
entendido e menos custoso de ser modificado 
sem alterar seu comportamento observável” 
– Martin Fowler 
“Transformação que preserva comportamento” 
– Joshua Kerievsky
Por que devo refatorar? 
• Refatorar melhora o projeto de 
software 
• Refatorar torna o software mais 
fácil de entender 
• Refatorar ajuda a encontrar falhas 
• Refatorar ajuda a programar mais 
rapidamente
Quando devemos refatorar? 
• Quando for necessário acrescentar funções. 
• Quando for preciso consertar uma falha. 
• Enquanto revisamos o código.
Quando não devemos refatorar? 
• Quando o código não funciona. 
• Quando o código está muito confuso. 
• Quando estiver próximo do prazo final de entrega.
Problemas com a 
refatoração 
• Interfaces 
• Banco de Dados
Padrões de Refatoração
Extrair Método (Extract Method) 
void 
imprimirDivida(double 
quantia){ 
imprimirCabeçalho(); 
// 
imprime 
os 
detalhes 
System.out.println("nome:" 
+ 
_nome); 
System.out.println("quantia:" 
+ 
_quantia); 
} 
void 
imprimirDivida(double 
quantia){ 
imprimirCabeçalho(); 
imprimirDetalhes(quantia); 
} 
private 
void 
imprimirDetalhes(double 
quantia){ 
// 
imprime 
os 
detalhes 
System.out.println("nome:" 
+ 
_nome); 
System.out.println("quantia:" 
+ 
_quantia); 
}
Extrair Classe (Extract Class) 
Pessoa 
nome 
codigoAreaEscritorio 
numeroEscritorio 
lerNumeroTelefone() 
Pessoa 
nome 
lerNumeroTelefone() 
telefone 
do escritório 
Número do Telefone 
codigoArea 
numero 
lerNumeroTelefone()
Extrair Subclasse (Extract Subclass) 
Item Serviço 
lerPreçoTotal() 
lerPreçoUnitario() 
lerEmpregado() 
Item Serviço 
lerPreçoTotal() 
lerPreçoUnitario() 
Item MaoDeObra 
lerPreçoUnitario() 
lerEmpregado()
Renomear Método (Rename Method) 
public 
String 
lerNumeroDoTelefone(){ 
return 
("(" 
+ 
_codigoDeAreaDoEScritorio 
+") 
" 
+ 
_numeroDoEscritorio); 
} 
class 
Pessoa{ 
[...] 
public 
String 
lerNumeroDoTelefone(){ 
return 
lerNumeroDoTelefoneDoEscritorio(); 
} 
public 
String 
lerNumeroDoTelefoneDoEscritorio(){ 
return 
("(" 
+ 
_codigoDeAreaDoEscritorio 
+ 
")" 
+ 
_numeroDoEscritorio); 
} 
}
Lista de Refatorações 
• Acrescentar Parâmetro 
• Auto-Encapsular Campo 
• Condensar Hierarquia 
• Consolidar Expressão 
Condicional 
• Consolidar Fragmentos 
Condicionais Duplicados 
• Converter Projeto Procedural em 
Objetos 
• Criar um Método Padrão 
• Decompor Condicional 
• Descer Campo na Hierarquia 
• Descer Método na Hierarquia 
• Desembaraçar Herança 
• Dividir Variável Temporária 
• Duplicar Dados Observados 
• Encapsular Campo 
• Encapsular Coleção 
• Encapsular Downcast 
• Extrair Classe 
• Extrair Hierarquia 
• Extrair Interface 
• Extrair Método 
• Extrair Subclasse 
• Extrair Superclasse 
• Internalizar Classe 
• Internalizar Método 
• Internalizar Variável Temporária 
• Introduzir Asserção 
• Introduzir Extensão Local 
• Introduzir Método Externo 
• Introduzir Objeto Nulo 
• Introduzir Objeto Parâmetro 
• Introduzir Variável Explicativa 
• Mover Campo 
• Mover Método 
• Mudar de Referência para Valor 
• Mudar de Valor para Referência 
• Ocultar Delegação 
• Ocultar Método 
• Parametrizar Método 
• Preservar o Objeto Inteiro 
• Remover Atribuições a 
Parâmetros 
• […]
Lista de Refatorações 
• Remover Flag de Controle 
• Remover Intermediário 
• Remover Método de Gravação 
• Remover Parâmetro 
• Renomear Método 
• Separar a Consulta do 
Modificador 
• Separar o Domínio da 
Apresentação 
• Subir Campo na Hierarquia 
• Subir Método na Hierarquia 
• Subir o Corpo do Construtor na 
Hierarquia 
• Substituir Atributo por Objeto 
• Substituir Código de Erro por 
Exceção 
• Substituir Comando 
Condicional por Polimorfismo 
• Substituir Condição Aninhada 
por Cláusulas Guarda 
• Substituir Delegação por 
Herança 
• Substituir Enumeração pelo 
padrão State/Strategy 
• Substituir Enumeração por 
Classe 
• Substituir Enumeração por 
Subclasses 
• Substituir Exceção por Teste 
• Substituir Herança por 
Delegação 
• Substituir Método por Objeto 
Método 
• Substituir Numeros Mágicos por 
Constantes Simbólicas 
• Substituir o Algoritmo 
• Substituir o Construtor por um 
Método Fabrica 
• Substituir Parâmetro por Método 
• Substituir Parâmetro por Métodos 
Explícitos 
• Substituir Registro por Classe de 
Dados 
• Substituir Subclasse por Campos 
• Substituir Variável Temporária por 
Consulta 
• Substituir Vetor por Objeto 
• Transformar Associação 
Bidirecional em Unidirecional 
• Transformar Associação 
Unidirecional em Bidirecional
Referências bibliográficas 
Referências: 
• FOWLER, Martin. Refatoração: 
aperfeiçoando o projeto de código 
existente. 
Porto Alegre, RS: Bookman, 2008. xiv, 
365 p. ISBN 8536303956 (broch.). 
• KERIEVSKY, Joshua. Refatoração para 
padrões. 
Porto Alegre, RS: Bookman, 2008. xviii, 
400 p. ISBN 9788577802449 (broch.). 
• Resumo desta apresentação: 
https://docs.google.com/document/d/ 
1TKS_jr5sArNNy8mp2pxITDmdKcWdI 
ncC2x_yt8ElXLs/edit?usp=sharing 
Professor: 
• Camilo Camilo Almendra 
camilo@es.ufc.br 
Alunos: 
• Gabriel Oliveira Mendanha 
gabrielmendanha@hotmail.com 
• Thiago Pereira Rosa 
thiagor@engineer.com

Mais conteúdo relacionado

Mais procurados

Programação Orientada a objetos em Java
Programação Orientada a objetos em JavaProgramação Orientada a objetos em Java
Programação Orientada a objetos em JavaDenis L Presciliano
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean ArchitectureBadoo
 
Scaling up task processing with Celery
Scaling up task processing with CeleryScaling up task processing with Celery
Scaling up task processing with CeleryNicolas Grasset
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven DevelopmentElias Nogueira
 
Domain Driven Design (DDD)
Domain Driven Design (DDD)Domain Driven Design (DDD)
Domain Driven Design (DDD)Tom Kocjan
 
Applying Domain-Driven Design to craft Rich Domain Models
Applying Domain-Driven Design to craft Rich Domain ModelsApplying Domain-Driven Design to craft Rich Domain Models
Applying Domain-Driven Design to craft Rich Domain ModelsAlexander van Trijffel
 
Testcontainers - Geekout EE 2017 presentation
Testcontainers - Geekout EE 2017 presentationTestcontainers - Geekout EE 2017 presentation
Testcontainers - Geekout EE 2017 presentationRichard North
 
Unit Testing in Python
Unit Testing in PythonUnit Testing in Python
Unit Testing in PythonHaim Michael
 
лекції 7
лекції 7лекції 7
лекції 7cit-cit
 
Software Testing - Test Design Techniques
Software Testing - Test Design TechniquesSoftware Testing - Test Design Techniques
Software Testing - Test Design TechniquesRegina Vitalicio
 
Developing a test automation strategy by Brian Bayer
Developing a test automation strategy by Brian BayerDeveloping a test automation strategy by Brian Bayer
Developing a test automation strategy by Brian BayerQA or the Highway
 
Poo1 aula 1 - java - história e introdução
Poo1   aula 1 - java -  história e introduçãoPoo1   aula 1 - java -  história e introdução
Poo1 aula 1 - java - história e introduçãoDenis Sobrenome
 
Implementando Testes Unitários em Java - Manoel Pimentel
Implementando Testes Unitários em Java - Manoel PimentelImplementando Testes Unitários em Java - Manoel Pimentel
Implementando Testes Unitários em Java - Manoel PimentelManoel Pimentel Medeiros
 

Mais procurados (20)

Clean coding-practices
Clean coding-practicesClean coding-practices
Clean coding-practices
 
Programação Orientada a objetos em Java
Programação Orientada a objetos em JavaProgramação Orientada a objetos em Java
Programação Orientada a objetos em Java
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 
POO - 10 - Herança
POO - 10 - HerançaPOO - 10 - Herança
POO - 10 - Herança
 
Scaling up task processing with Celery
Scaling up task processing with CeleryScaling up task processing with Celery
Scaling up task processing with Celery
 
Arquitetura MVC
Arquitetura MVCArquitetura MVC
Arquitetura MVC
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 
Java 13 Excecoes
Java 13 ExcecoesJava 13 Excecoes
Java 13 Excecoes
 
Domain Driven Design (DDD)
Domain Driven Design (DDD)Domain Driven Design (DDD)
Domain Driven Design (DDD)
 
Applying Domain-Driven Design to craft Rich Domain Models
Applying Domain-Driven Design to craft Rich Domain ModelsApplying Domain-Driven Design to craft Rich Domain Models
Applying Domain-Driven Design to craft Rich Domain Models
 
Testcontainers - Geekout EE 2017 presentation
Testcontainers - Geekout EE 2017 presentationTestcontainers - Geekout EE 2017 presentation
Testcontainers - Geekout EE 2017 presentation
 
Unit Testing in Python
Unit Testing in PythonUnit Testing in Python
Unit Testing in Python
 
лекції 7
лекції 7лекції 7
лекції 7
 
Software Testing - Test Design Techniques
Software Testing - Test Design TechniquesSoftware Testing - Test Design Techniques
Software Testing - Test Design Techniques
 
Introduction to Robot Framework
Introduction to Robot FrameworkIntroduction to Robot Framework
Introduction to Robot Framework
 
API - Como fazer?
API - Como fazer?API - Como fazer?
API - Como fazer?
 
Developing a test automation strategy by Brian Bayer
Developing a test automation strategy by Brian BayerDeveloping a test automation strategy by Brian Bayer
Developing a test automation strategy by Brian Bayer
 
QSpiders - Selenium Webdriver
QSpiders - Selenium WebdriverQSpiders - Selenium Webdriver
QSpiders - Selenium Webdriver
 
Poo1 aula 1 - java - história e introdução
Poo1   aula 1 - java -  história e introduçãoPoo1   aula 1 - java -  história e introdução
Poo1 aula 1 - java - história e introdução
 
Implementando Testes Unitários em Java - Manoel Pimentel
Implementando Testes Unitários em Java - Manoel PimentelImplementando Testes Unitários em Java - Manoel Pimentel
Implementando Testes Unitários em Java - Manoel Pimentel
 

Semelhante a Padrões de refatoração

Refatoração - aquela caprichada no código
Refatoração - aquela caprichada no códigoRefatoração - aquela caprichada no código
Refatoração - aquela caprichada no códigoJuciellen Cabrera
 
Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOWesley Lemos
 
(A06) LabMM3 - JavaScript
(A06) LabMM3 - JavaScript(A06) LabMM3 - JavaScript
(A06) LabMM3 - JavaScriptCarlos Santos
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHGiovanni Bassi
 
qualidade de código: boas práticas, princípios e padrões
qualidade de código: boas práticas, princípios e padrõesqualidade de código: boas práticas, princípios e padrões
qualidade de código: boas práticas, princípios e padrõesedgarddavidson.com
 
Document store e Mongodb
Document store e MongodbDocument store e Mongodb
Document store e MongodbAline Ferreira
 
Framework Entities - Apresentação da Defesa da Dissertacao
Framework Entities - Apresentação da Defesa da DissertacaoFramework Entities - Apresentação da Defesa da Dissertacao
Framework Entities - Apresentação da Defesa da DissertacaoMarcius Brandão
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
 
Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1Saulo Arruda
 
BarCamp 2007 - CodeIgniter e OncologiaPediátrica.org
BarCamp 2007 - CodeIgniter e OncologiaPediátrica.orgBarCamp 2007 - CodeIgniter e OncologiaPediátrica.org
BarCamp 2007 - CodeIgniter e OncologiaPediátrica.orgjqrd
 
Arquitetando Soluções de Dados com PostgreSQL
Arquitetando Soluções de Dados com PostgreSQLArquitetando Soluções de Dados com PostgreSQL
Arquitetando Soluções de Dados com PostgreSQLRaul Oliveira
 
Preparando-se para a prova da Certificação Zend PHP 5.3
Preparando-se para a prova da Certificação Zend PHP 5.3Preparando-se para a prova da Certificação Zend PHP 5.3
Preparando-se para a prova da Certificação Zend PHP 5.3klaussilveira
 
Intro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverIntro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverEduardo Jorge
 

Semelhante a Padrões de refatoração (20)

Refatoração
RefatoraçãoRefatoração
Refatoração
 
Refatoração - aquela caprichada no código
Refatoração - aquela caprichada no códigoRefatoração - aquela caprichada no código
Refatoração - aquela caprichada no código
 
Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POO
 
5 bdoo+bdor
5 bdoo+bdor5 bdoo+bdor
5 bdoo+bdor
 
Refactoring - Design no Código
Refactoring - Design no CódigoRefactoring - Design no Código
Refactoring - Design no Código
 
Code Smells
Code SmellsCode Smells
Code Smells
 
(A06) LabMM3 - JavaScript
(A06) LabMM3 - JavaScript(A06) LabMM3 - JavaScript
(A06) LabMM3 - JavaScript
 
Refactoring
RefactoringRefactoring
Refactoring
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BH
 
11-codigo-limpo-parte-4.pdf
11-codigo-limpo-parte-4.pdf11-codigo-limpo-parte-4.pdf
11-codigo-limpo-parte-4.pdf
 
qualidade de código: boas práticas, princípios e padrões
qualidade de código: boas práticas, princípios e padrõesqualidade de código: boas práticas, princípios e padrões
qualidade de código: boas práticas, princípios e padrões
 
Document store e Mongodb
Document store e MongodbDocument store e Mongodb
Document store e Mongodb
 
Framework Entities - Apresentação da Defesa da Dissertacao
Framework Entities - Apresentação da Defesa da DissertacaoFramework Entities - Apresentação da Defesa da Dissertacao
Framework Entities - Apresentação da Defesa da Dissertacao
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1
 
BarCamp 2007 - CodeIgniter e OncologiaPediátrica.org
BarCamp 2007 - CodeIgniter e OncologiaPediátrica.orgBarCamp 2007 - CodeIgniter e OncologiaPediátrica.org
BarCamp 2007 - CodeIgniter e OncologiaPediátrica.org
 
Arquitetando Soluções de Dados com PostgreSQL
Arquitetando Soluções de Dados com PostgreSQLArquitetando Soluções de Dados com PostgreSQL
Arquitetando Soluções de Dados com PostgreSQL
 
Preparando-se para a prova da Certificação Zend PHP 5.3
Preparando-se para a prova da Certificação Zend PHP 5.3Preparando-se para a prova da Certificação Zend PHP 5.3
Preparando-se para a prova da Certificação Zend PHP 5.3
 
Solid
SolidSolid
Solid
 
Intro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverIntro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserver
 

Mais de Thiago Pereira

Um método para o desenvolvimento de software baseado em microsserviços
Um método para o desenvolvimento de software baseado em microsserviçosUm método para o desenvolvimento de software baseado em microsserviços
Um método para o desenvolvimento de software baseado em microsserviçosThiago Pereira
 
Workshop - Business Process Management
Workshop - Business Process ManagementWorkshop - Business Process Management
Workshop - Business Process ManagementThiago Pereira
 
TCC 1 - Um método para o desenvolvimento de software baseado em microserviços
TCC 1 - Um método para o desenvolvimento de software baseado em microserviçosTCC 1 - Um método para o desenvolvimento de software baseado em microserviços
TCC 1 - Um método para o desenvolvimento de software baseado em microserviçosThiago Pereira
 
Reuso de Software - Síntese do Modelo de Features
Reuso de Software - Síntese do Modelo de FeaturesReuso de Software - Síntese do Modelo de Features
Reuso de Software - Síntese do Modelo de FeaturesThiago Pereira
 
Windows Azure - Computação em Nuvem
Windows Azure - Computação em NuvemWindows Azure - Computação em Nuvem
Windows Azure - Computação em NuvemThiago Pereira
 
Redesign iTest Learning
Redesign iTest LearningRedesign iTest Learning
Redesign iTest LearningThiago Pereira
 
Rational Unified Process
Rational Unified ProcessRational Unified Process
Rational Unified ProcessThiago Pereira
 

Mais de Thiago Pereira (7)

Um método para o desenvolvimento de software baseado em microsserviços
Um método para o desenvolvimento de software baseado em microsserviçosUm método para o desenvolvimento de software baseado em microsserviços
Um método para o desenvolvimento de software baseado em microsserviços
 
Workshop - Business Process Management
Workshop - Business Process ManagementWorkshop - Business Process Management
Workshop - Business Process Management
 
TCC 1 - Um método para o desenvolvimento de software baseado em microserviços
TCC 1 - Um método para o desenvolvimento de software baseado em microserviçosTCC 1 - Um método para o desenvolvimento de software baseado em microserviços
TCC 1 - Um método para o desenvolvimento de software baseado em microserviços
 
Reuso de Software - Síntese do Modelo de Features
Reuso de Software - Síntese do Modelo de FeaturesReuso de Software - Síntese do Modelo de Features
Reuso de Software - Síntese do Modelo de Features
 
Windows Azure - Computação em Nuvem
Windows Azure - Computação em NuvemWindows Azure - Computação em Nuvem
Windows Azure - Computação em Nuvem
 
Redesign iTest Learning
Redesign iTest LearningRedesign iTest Learning
Redesign iTest Learning
 
Rational Unified Process
Rational Unified ProcessRational Unified Process
Rational Unified Process
 

Padrões de refatoração

  • 1. Padrões de Refatoração Universidade Federal do Ceará - 2014.2 Engenharia de Software - Projeto Detalhado de Software
  • 2. “Uma alteração feita na estrutura interna do software para torná-lo mais fácil de ser entendido e menos custoso de ser modificado sem alterar seu comportamento observável” – Martin Fowler “Transformação que preserva comportamento” – Joshua Kerievsky
  • 3. Por que devo refatorar? • Refatorar melhora o projeto de software • Refatorar torna o software mais fácil de entender • Refatorar ajuda a encontrar falhas • Refatorar ajuda a programar mais rapidamente
  • 4. Quando devemos refatorar? • Quando for necessário acrescentar funções. • Quando for preciso consertar uma falha. • Enquanto revisamos o código.
  • 5. Quando não devemos refatorar? • Quando o código não funciona. • Quando o código está muito confuso. • Quando estiver próximo do prazo final de entrega.
  • 6. Problemas com a refatoração • Interfaces • Banco de Dados
  • 8. Extrair Método (Extract Method) void imprimirDivida(double quantia){ imprimirCabeçalho(); // imprime os detalhes System.out.println("nome:" + _nome); System.out.println("quantia:" + _quantia); } void imprimirDivida(double quantia){ imprimirCabeçalho(); imprimirDetalhes(quantia); } private void imprimirDetalhes(double quantia){ // imprime os detalhes System.out.println("nome:" + _nome); System.out.println("quantia:" + _quantia); }
  • 9. Extrair Classe (Extract Class) Pessoa nome codigoAreaEscritorio numeroEscritorio lerNumeroTelefone() Pessoa nome lerNumeroTelefone() telefone do escritório Número do Telefone codigoArea numero lerNumeroTelefone()
  • 10. Extrair Subclasse (Extract Subclass) Item Serviço lerPreçoTotal() lerPreçoUnitario() lerEmpregado() Item Serviço lerPreçoTotal() lerPreçoUnitario() Item MaoDeObra lerPreçoUnitario() lerEmpregado()
  • 11. Renomear Método (Rename Method) public String lerNumeroDoTelefone(){ return ("(" + _codigoDeAreaDoEScritorio +") " + _numeroDoEscritorio); } class Pessoa{ [...] public String lerNumeroDoTelefone(){ return lerNumeroDoTelefoneDoEscritorio(); } public String lerNumeroDoTelefoneDoEscritorio(){ return ("(" + _codigoDeAreaDoEscritorio + ")" + _numeroDoEscritorio); } }
  • 12. Lista de Refatorações • Acrescentar Parâmetro • Auto-Encapsular Campo • Condensar Hierarquia • Consolidar Expressão Condicional • Consolidar Fragmentos Condicionais Duplicados • Converter Projeto Procedural em Objetos • Criar um Método Padrão • Decompor Condicional • Descer Campo na Hierarquia • Descer Método na Hierarquia • Desembaraçar Herança • Dividir Variável Temporária • Duplicar Dados Observados • Encapsular Campo • Encapsular Coleção • Encapsular Downcast • Extrair Classe • Extrair Hierarquia • Extrair Interface • Extrair Método • Extrair Subclasse • Extrair Superclasse • Internalizar Classe • Internalizar Método • Internalizar Variável Temporária • Introduzir Asserção • Introduzir Extensão Local • Introduzir Método Externo • Introduzir Objeto Nulo • Introduzir Objeto Parâmetro • Introduzir Variável Explicativa • Mover Campo • Mover Método • Mudar de Referência para Valor • Mudar de Valor para Referência • Ocultar Delegação • Ocultar Método • Parametrizar Método • Preservar o Objeto Inteiro • Remover Atribuições a Parâmetros • […]
  • 13. Lista de Refatorações • Remover Flag de Controle • Remover Intermediário • Remover Método de Gravação • Remover Parâmetro • Renomear Método • Separar a Consulta do Modificador • Separar o Domínio da Apresentação • Subir Campo na Hierarquia • Subir Método na Hierarquia • Subir o Corpo do Construtor na Hierarquia • Substituir Atributo por Objeto • Substituir Código de Erro por Exceção • Substituir Comando Condicional por Polimorfismo • Substituir Condição Aninhada por Cláusulas Guarda • Substituir Delegação por Herança • Substituir Enumeração pelo padrão State/Strategy • Substituir Enumeração por Classe • Substituir Enumeração por Subclasses • Substituir Exceção por Teste • Substituir Herança por Delegação • Substituir Método por Objeto Método • Substituir Numeros Mágicos por Constantes Simbólicas • Substituir o Algoritmo • Substituir o Construtor por um Método Fabrica • Substituir Parâmetro por Método • Substituir Parâmetro por Métodos Explícitos • Substituir Registro por Classe de Dados • Substituir Subclasse por Campos • Substituir Variável Temporária por Consulta • Substituir Vetor por Objeto • Transformar Associação Bidirecional em Unidirecional • Transformar Associação Unidirecional em Bidirecional
  • 14. Referências bibliográficas Referências: • FOWLER, Martin. Refatoração: aperfeiçoando o projeto de código existente. Porto Alegre, RS: Bookman, 2008. xiv, 365 p. ISBN 8536303956 (broch.). • KERIEVSKY, Joshua. Refatoração para padrões. Porto Alegre, RS: Bookman, 2008. xviii, 400 p. ISBN 9788577802449 (broch.). • Resumo desta apresentação: https://docs.google.com/document/d/ 1TKS_jr5sArNNy8mp2pxITDmdKcWdI ncC2x_yt8ElXLs/edit?usp=sharing Professor: • Camilo Camilo Almendra camilo@es.ufc.br Alunos: • Gabriel Oliveira Mendanha gabrielmendanha@hotmail.com • Thiago Pereira Rosa thiagor@engineer.com