Com esta apresentação buscamos introduzir soluções clássicas para problemas de projeto recorrentes, além de introduzir um processo efetivo para melhoria de código.
Nós introduziremos a teoria de refatorações, dirigidas para padrões que permitem aos projetistas mover projetos com segurança rumo a implementações.
Link para resumo da apresentação: https://docs.google.com/document/d/1TKS_jr5sArNNy8mp2pxITDmdKcWdIncC2x_yt8ElXLs/edit?usp=sharing
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.
9. Extrair Classe (Extract Class)
Pessoa
nome
codigoAreaEscritorio
numeroEscritorio
lerNumeroTelefone()
Pessoa
nome
lerNumeroTelefone()
telefone
do escritório
Número do Telefone
codigoArea
numero
lerNumeroTelefone()
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