SlideShare una empresa de Scribd logo
1 de 35
Refatoração
gerson.borges@prof.una.br
Versão 14.9.1
Refatoração
• Refatoração (do inglês Refactoring) é o
processo de modificar um sistema de
software para melhorar a estrutura interna do
código sem alterar seu comportamento
externo.
• O uso desta técnica evita a deterioração tão
comum durante o ciclo de vida de um código.
• Não se trata de otimização.
Objetivo
• Prevenir o envelhecimento do design e
garantir a flexibilidade adequada para permitir
a integração tranqüila de futuras
extensões/alterações [Mens e Tourwé, 2004]
– Em geral, uma refatoração é tão simples que
parece que não vai ajudar muito.
– Mas quando se juntam 50 refatorações, bem
escolhidas, em seqüência, o código melhora
radicalmente.
Origem
• Surgiu na comunidade de Smalltalk nos anos
80/90.
• Desenvolveu-se formalmente na Universidade
de Illinois em Urbana-Champaign.
• Grupo do Prof. Ralph Johnson.
– Tese de PhD de William Opdyke (1992).
– John Brant e Don Roberts:
• The Refactoring Browser Tool
• Kent Beck (XP) na indústria
Mau cheiro
• O termo mau cheiro (bad smell) refere-se às
estruturas no código que sugerem (às vezes
gritam pela) possibilidade de refatoração
[Fowler, 2000]
• A partir da identificação de um mau cheiro é
possível propor refatorações adequadas, que
podem reduzir ou mesmo eliminar o mau
cheiro
Mau cheiro
• Rigidez
– uma alteração em um ponto do código requer alterações em
cascata (dependências);
• Fragilidade
– A modificação de um ponto do código quebra outras
funcionalidades;
• Complexidade
– Arquitetura muito complexa pois foi preparada para manipular
qualquer tipo de possibilidade;
• Duplicação
– Código redundante, duplicado;
• Legibilidade
– Código difícil de compreender e entender
Código Duplicado
• Um dos problemas mais graves no código. Podem
ser duas expressões idênticas em dois métodos
na mesma classe, ou duas classes não associadas.
– Essa duplicação pode ser eliminada aplicando-se a
refatoração Extract Method. Nesse caso, o código é
implementado uma única vez e chamado no local de
origem onde estava o código duplicado.
– Se o código duplicado encontra-se em duas classes
distintas, pode-se aplicar a refatoração Extract Class.
Método Longo
• Consiste de um método com uma implementação
de lógica com várias, dezenas ou até centenas de
linhas de código.
– O ideal seria criar métodos com no máximo dez linhas
de código, podendo ser inclusive de uma a cinco.
– Vários problemas podem ser originados da
implementação de métodos longos.
• A solução é dividir o método longo em métodos
menores, usando-se a refatoração Extract
Method.
Classe larga
• Uma boa prática da programação orientada a
objetos sugere que uma classe deve ter uma
única responsabilidade (princípio da
responsabilidade única).
• Quando uma classe possui muitas instâncias no
código, isso sugere que ela está fazendo muito,
ou pelo menos realizando trabalho que deveria
ser feito por outras classes.
• Algumas refatorações podem ajudar a reduzir
classes longas, como por exemplo, Extrair Classe,
Extract Subclass, entre outras.
Lista de Parâmetros Longa
• Um método que recebe muitos parâmetros sugere que
classes possam estar compartilhando muita
informação.
• Se um método com uma longa lista de parâmetros está
sendo chamado em vários locais do código, uma
mudança em um deles pode desencadear uma cadeia
muito grande de alterações em vários locais do código.
• Algumas refatorações podem ajudar a resolver esse
problema, por exemplo “Replace Parameter with
Method” e “Introduce Parameter Object” onde uma
longa lista de parâmetros se resume a uma única
classe.
Campo temporário
• Muitas vezes um objeto tem sua variável de
instância configurada somente sobre certas
circunstâncias. Tal código é difícil de entender.
Um exemplo ocorre quando um algoritmo
depende de uma série de variáveis.
• A refatoração “Extract Class” pode minimizar
problemas associados á essas variáveis
“pobres”
Aspectos de qualidade
• Simplicidade
• Flexibilidade
• Clareza
• Desempenho
Código limpo
• Nomes significativos, que revelam sua intenção;
• Expressa o que faz, por que existe, como é usado;
• Nomes pronunciáveis;
• Notação húngara, tipo não precisa estar no
nome;
• Nomes de classes são substantivos;
• Nomes de métodos são verbos;
• Assessores devem ter “get” e “set”
Código limpo
• Métodos pequenos (5 ou 10 linhas);
• Linhas de até 100 caracteres;
• Métodos devem realizar uma única tarefa;
• Cuidar com lista longa de parâmetros;
• Classes pequenas (200 linhas);
• Seguir o princípio da responsabilidade única;
• Cuidar o acoplamento entre classes
(dependências);
• Refatore ao invés de comentar;
Extract Method (110)
• Resumo
– Você tem um fragmento de código que poderia
ser agrupado. Mude o fragmento para um novo
método e escolha um nome que explique o que
ele faz.
Extract Method (110)
• Motivação
– É uma das refatorações mais comuns. Se um
método é longo demais ou difícil de entender e
exige muitos comentários, extraia trechos do
método e crie novos métodos para eles. Isso vai
melhorar as chances de reutilização do código e
vai fazer com que os métodos que o chamam
fiquem mais fáceis de entender. O código fica
parecendo comentário.
Extract Method (110)
• Mecânica:
– Crie um novo método e escolha um nome que explicite a
sua intenção (o nome deve dizer o que ele faz, não como
ele faz).
– Copie o código do método original para o novo.
– Procure por variáveis locais e parâmetros utilizados pelo
código extraído.
• Se variáveis locais forem usadas apenas pelo código extraído,
passe-as para o novo método.
• Caso contrário, veja se o seu valor é apenas atualizado pelo
código. Neste caso substitua o código por uma atribuição.
• Se é tanto lido quando atualizado, passe-a como parâmetro.
– Compile e teste.
Inline Method (117)
• Resumo:
– A implementação de um método é tão clara
quanto o nome do método. Substitua a chamada
ao método pela sua implementação.
Inline Method (117)
• Motivação:
– Bom para eliminar indireção desnecessária. Se
você tem um grupo de métodos mal organizados,
aplique Inline Method em todos eles seguido de
uns bons Extract Methods
Inline Method (117)
• Mecânica:
– Verifique se o método não é polimórfico ou se as
suas subclasses o especializam.
– Ache todas as chamadas e substitua pela
implementação.
– Compile e teste.
– Remova a definição do método.
Replace Temp with Query (120)
• Resumo:
– Uma variável local está sendo usada para guardar
o resultado de uma expressão. Troque as
referências a esta expressão por um método.
Replace Temp with Query (120)
• Motivação:
– Variáveis temporárias encorajam métodos longos
(devido ao escopo). O código fica mais limpo e o
método pode ser usado em outros locais.
Replace Temp with Query (120)
• Mecânica:
– Encontre variáveis locais que são atribuídas uma
única vez
• Se temp é atribuída mais do que uma vez use Split
Temporary Variable (128)
– Declare temp como final
– Compile (para ter certeza)
– Extraia a expressão
• Método privado - efeitos colaterais
– Compile e teste
Replace Inheritance With
Delegation (352)
• Resumo:
– Quando uma subclasse só usa parte da
funcionalidade da superclasse ou não precisa
herdar dados: na subclasse, crie um campo para a
superclasse, ajuste os métodos apropriados para
delegar para a ex-superclasse e remova a herança.
Replace Inheritance With
Delegation (352)
• Motivação:
– Herança é uma técnica excelente, mas muitas
vezes, não é exatamente o que você quer. Às
vezes, nós começamos herdando de uma outra
classe mas daí descobrimos que precisamos
herdar muito pouco da superclasse. Descobrimos
que muitas das operações da superclasse não se
aplicam à subclasse. Neste caso, delegação é mais
apropriado.
Replace Inheritance With
Delegation (352)
• Mecânica:
– Crie um campo na subclasse que se refere a uma
instância da superclasse, inicialize-o com this
– Mude cada método na subclasse para que use o
campo delegado
– Compile e teste após mudar cada método
• Cuidado com as chamadas a super
– Remova a herança e crie um novo objeto da
superclasse
– Para cada método da superclasse utilizado, adicione
um método delegado
– Compile e teste
Collapse Hierarchy (344)
• Resumo:
– A superclasse e a subclasse não são muito
diferentes. Combine-as em apenas uma classe.
Collapse Hierarchy (344)
• Motivação:
– Depois de muito trabalhar com uma hierarquia de
classes, ela pode se tornar muito complexa.
Depois de refatorá-la movendo métodos e campos
para cima e para baixo, você pode descobrir que
uma subclasse não acrescenta nada ao seu
projeto. Remova-a.
Collapse Hierarchy (344)
• Mecânica:
– Escolha que classe será eliminada: a superclasse ou a
– subclasse
– Use Pull Up Field (320) and Pull Up Method (322) ou
Push Down Method (328) e Push Down Field (329)
para mover todo o comportamento e dados da classe
a ser eliminada
– Compile e teste a cada movimento
– Ajuste as referências à classe que será eliminada
• Isto afeta: declarações, tipos de parâmetros e construtores.
– Remova a classe vazia
– Compile e teste
Pull UP Field (320)
• Resumo:
– A superclasse e a subclasse têm os mesmos
atributos (field). Mova os atributos repetidos para
a superclasse.
Pull UP Field (320)
• Motivação:
– Subclasses desenvolvidas independentemente
umas das outras, ou após refatoração, podem ter
características (features) duplicadas. Atributos
podem ser duplicados. Estes não necessariamente
têm o mesmo nome em todas as subclasses. A
forma de determinar se tal acontece é verificar
como os atributos são usados por outros
métodos. Se eles são usados da mesma forma,
pode-se generalizá-los.
Pull UP Field (320)
• Mecânica:
– Inspecione todos os atributos candidatos para ver se
não são usados de forma similar.
– Se os atributos não têm o mesmo nome, dê-lhe o
nome que vai ser usado quando ele “subir” para a
superclasse.
– Compile e teste.
– Crie um novo atributo na superclasse.
• Se o atributo era privado nas subclasses, deve-se colocá-lo
como protegido na superclasse.
– Apague o atributo nas subclasses.
– Compile e teste.
Extract Interface
• Resumo:
– Vários clientes usam o mesmo subconjunto da
interface da classe, ou várias classes têm partes de
suas interfaces em comum.
Extract Interface
• Motivação:
– Classes usam umas às outras de várias formas. Pode-
se ter, por exemplo, um grupo de clientes usando um
subconjunto das responsabilidades da classe. E ainda,
uma classe pode colaborar com qualquer classe que
trate um certo grupo de requisições. Nestes casos, é
útil transformar esse subconjunto de
responsabilidades em algo com existência própria,
para ficar claro e explícito seu uso no sistema. Dessa
forma fica mais fácil de ver como as responsabilidades
se dividem. E também, ao se inserir novas classes que
implementem esse subconjunto, fica mais fácil de ver
o que se encaixa nesse subconjunto.
Extract Interface
• Mecânica:
– Crie uma interface vazia.
– Declare as operações comuns na interface.
– Declare as classes relevantes que devem
implementar a interface.
– Ajuste as declarações de tipos nos clientes para
usar a interface.
– Compile e teste.

Más contenido relacionado

La actualidad más candente

Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Natanael Fonseca
 
Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02Natanael Fonseca
 
Aula 02 Primeiro Cod Java
Aula 02   Primeiro Cod JavaAula 02   Primeiro Cod Java
Aula 02 Primeiro Cod JavaSergio Silva
 
Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Natanael Fonseca
 
Test-Driven Development - Introdução ao método de construção de software guia...
Test-Driven Development - Introdução ao método de construção de software guia...Test-Driven Development - Introdução ao método de construção de software guia...
Test-Driven Development - Introdução ao método de construção de software guia...Thiago Faria de Andrade
 
Curso Java Básico - Aula 04
Curso Java Básico - Aula 04Curso Java Básico - Aula 04
Curso Java Básico - Aula 04Natanael Fonseca
 
Aula 2 conversao de variaveis j option-pane
Aula 2   conversao de variaveis j option-paneAula 2   conversao de variaveis j option-pane
Aula 2 conversao de variaveis j option-paneRafael Pinheiro
 
Aula 3 introducao a orientação a objetos
Aula 3   introducao a orientação a objetosAula 3   introducao a orientação a objetos
Aula 3 introducao a orientação a objetosRafael Pinheiro
 
Desenvolvimento de Software
Desenvolvimento de SoftwareDesenvolvimento de Software
Desenvolvimento de SoftwareVagner Santana
 
Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Luis Ferreira
 
Curso de java - Antonio Alves - aula 04
Curso de java - Antonio Alves -  aula 04Curso de java - Antonio Alves -  aula 04
Curso de java - Antonio Alves - aula 04Antonio Alves
 
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVA
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVAProgramação Orientada a Objetos - Conceitos básicos da linguagem JAVA
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVACristiano Almeida
 
Apostila de Introdução a POO com C#
Apostila de Introdução a POO com C#Apostila de Introdução a POO com C#
Apostila de Introdução a POO com C#Andre Nascimento
 

La actualidad más candente (20)

Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03
 
Code Smells
Code SmellsCode Smells
Code Smells
 
Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02
 
Aula 02 Primeiro Cod Java
Aula 02   Primeiro Cod JavaAula 02   Primeiro Cod Java
Aula 02 Primeiro Cod Java
 
Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Curso Java Básico - Aula 01
Curso Java Básico - Aula 01
 
Test-Driven Development - Introdução ao método de construção de software guia...
Test-Driven Development - Introdução ao método de construção de software guia...Test-Driven Development - Introdução ao método de construção de software guia...
Test-Driven Development - Introdução ao método de construção de software guia...
 
Curso Java Básico - Aula 04
Curso Java Básico - Aula 04Curso Java Básico - Aula 04
Curso Java Básico - Aula 04
 
Aula 2 conversao de variaveis j option-pane
Aula 2   conversao de variaveis j option-paneAula 2   conversao de variaveis j option-pane
Aula 2 conversao de variaveis j option-pane
 
Aula 3 introducao a orientação a objetos
Aula 3   introducao a orientação a objetosAula 3   introducao a orientação a objetos
Aula 3 introducao a orientação a objetos
 
Desenvolvimento de Software
Desenvolvimento de SoftwareDesenvolvimento de Software
Desenvolvimento de Software
 
Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos
 
Java 01
Java 01Java 01
Java 01
 
Erros comuns em java
Erros comuns em javaErros comuns em java
Erros comuns em java
 
Curso de java - Antonio Alves - aula 04
Curso de java - Antonio Alves -  aula 04Curso de java - Antonio Alves -  aula 04
Curso de java - Antonio Alves - aula 04
 
Aula5
Aula5Aula5
Aula5
 
TDD com Python
TDD com PythonTDD com Python
TDD com Python
 
Revisão de C# 4.0
Revisão de C# 4.0Revisão de C# 4.0
Revisão de C# 4.0
 
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVA
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVAProgramação Orientada a Objetos - Conceitos básicos da linguagem JAVA
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVA
 
Apostila de Introdução a POO com C#
Apostila de Introdução a POO com C#Apostila de Introdução a POO com C#
Apostila de Introdução a POO com C#
 
Aula05
Aula05Aula05
Aula05
 

Similar a Refatoração

Similar a Refatoração (20)

Refatorações
RefatoraçõesRefatorações
Refatorações
 
Clean code em C#
Clean code em C#Clean code em C#
Clean code em C#
 
TDD na Prática
TDD na PráticaTDD na Prática
TDD na Prática
 
Refactory Worshop
Refactory WorshopRefactory Worshop
Refactory Worshop
 
Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In Tuba
 
TDC 2015 São Paulo - Clean Code para Testers
TDC 2015 São Paulo - Clean Code para TestersTDC 2015 São Paulo - Clean Code para Testers
TDC 2015 São Paulo - Clean Code para Testers
 
Programação C - Aula 1
Programação C - Aula 1Programação C - Aula 1
Programação C - Aula 1
 
Code Smells
Code SmellsCode Smells
Code Smells
 
TDD com Código Legado - "Atualizado"
TDD com Código Legado - "Atualizado"TDD com Código Legado - "Atualizado"
TDD com Código Legado - "Atualizado"
 
Padrões de Projeto
Padrões de ProjetoPadrões de Projeto
Padrões de Projeto
 
Clean code part 2
Clean code   part 2Clean code   part 2
Clean code part 2
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 
03 fundamentos java
03 fundamentos java03 fundamentos java
03 fundamentos java
 
Java aula 2
Java aula 2Java aula 2
Java aula 2
 
Encapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosEncapsulamento em Orientação a Objetos
Encapsulamento em Orientação a Objetos
 
Working with legacy code 3
Working with legacy code 3Working with legacy code 3
Working with legacy code 3
 
Codigo limpo
Codigo limpoCodigo limpo
Codigo limpo
 
Estudos Technocorp
Estudos TechnocorpEstudos Technocorp
Estudos Technocorp
 
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
 
Clean code
Clean codeClean code
Clean code
 

Último

HORA DO CONTO5_BECRE D. CARLOS I_2023_2024
HORA DO CONTO5_BECRE D. CARLOS I_2023_2024HORA DO CONTO5_BECRE D. CARLOS I_2023_2024
HORA DO CONTO5_BECRE D. CARLOS I_2023_2024Sandra Pratas
 
Modelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e TaniModelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e TaniCassio Meira Jr.
 
trabalho wanda rocha ditadura
trabalho wanda rocha ditaduratrabalho wanda rocha ditadura
trabalho wanda rocha ditaduraAdryan Luiz
 
Aula 13 8º Ano Cap.04 Revolução Francesa.pptx
Aula 13 8º Ano Cap.04 Revolução Francesa.pptxAula 13 8º Ano Cap.04 Revolução Francesa.pptx
Aula 13 8º Ano Cap.04 Revolução Francesa.pptxBiancaNogueira42
 
HORA DO CONTO3_BECRE D. CARLOS I_2023_2024
HORA DO CONTO3_BECRE D. CARLOS I_2023_2024HORA DO CONTO3_BECRE D. CARLOS I_2023_2024
HORA DO CONTO3_BECRE D. CARLOS I_2023_2024Sandra Pratas
 
A galinha ruiva sequencia didatica 3 ano
A  galinha ruiva sequencia didatica 3 anoA  galinha ruiva sequencia didatica 3 ano
A galinha ruiva sequencia didatica 3 anoandrealeitetorres
 
FCEE - Diretrizes - Autismo.pdf para imprimir
FCEE - Diretrizes - Autismo.pdf para imprimirFCEE - Diretrizes - Autismo.pdf para imprimir
FCEE - Diretrizes - Autismo.pdf para imprimirIedaGoethe
 
ALMANANHE DE BRINCADEIRAS - 500 atividades escolares
ALMANANHE DE BRINCADEIRAS - 500 atividades escolaresALMANANHE DE BRINCADEIRAS - 500 atividades escolares
ALMANANHE DE BRINCADEIRAS - 500 atividades escolaresLilianPiola
 
Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029Centro Jacques Delors
 
HORA DO CONTO4_BECRE D. CARLOS I_2023_2024
HORA DO CONTO4_BECRE D. CARLOS I_2023_2024HORA DO CONTO4_BECRE D. CARLOS I_2023_2024
HORA DO CONTO4_BECRE D. CARLOS I_2023_2024Sandra Pratas
 
Slide de exemplo sobre o Sítio do Pica Pau Amarelo.pptx
Slide de exemplo sobre o Sítio do Pica Pau Amarelo.pptxSlide de exemplo sobre o Sítio do Pica Pau Amarelo.pptx
Slide de exemplo sobre o Sítio do Pica Pau Amarelo.pptxconcelhovdragons
 
Educação São Paulo centro de mídias da SP
Educação São Paulo centro de mídias da SPEducação São Paulo centro de mídias da SP
Educação São Paulo centro de mídias da SPanandatss1
 
Slides Lição 4, CPAD, Como se Conduzir na Caminhada, 2Tr24.pptx
Slides Lição 4, CPAD, Como se Conduzir na Caminhada, 2Tr24.pptxSlides Lição 4, CPAD, Como se Conduzir na Caminhada, 2Tr24.pptx
Slides Lição 4, CPAD, Como se Conduzir na Caminhada, 2Tr24.pptxLuizHenriquedeAlmeid6
 
A Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesA Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesMary Alvarenga
 
geografia 7 ano - relevo, altitude, topos do mundo
geografia 7 ano - relevo, altitude, topos do mundogeografia 7 ano - relevo, altitude, topos do mundo
geografia 7 ano - relevo, altitude, topos do mundonialb
 
O Universo Cuckold - Compartilhando a Esposas Com Amigo.pdf
O Universo Cuckold - Compartilhando a Esposas Com Amigo.pdfO Universo Cuckold - Compartilhando a Esposas Com Amigo.pdf
O Universo Cuckold - Compartilhando a Esposas Com Amigo.pdfPastor Robson Colaço
 
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptxQUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptxIsabellaGomes58
 
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptxATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptxOsnilReis1
 
Cultura e Sociedade - Texto de Apoio.pdf
Cultura e Sociedade - Texto de Apoio.pdfCultura e Sociedade - Texto de Apoio.pdf
Cultura e Sociedade - Texto de Apoio.pdfaulasgege
 
PPT _ Módulo 3_Direito Comercial_2023_2024.pdf
PPT _ Módulo 3_Direito Comercial_2023_2024.pdfPPT _ Módulo 3_Direito Comercial_2023_2024.pdf
PPT _ Módulo 3_Direito Comercial_2023_2024.pdfAnaGonalves804156
 

Último (20)

HORA DO CONTO5_BECRE D. CARLOS I_2023_2024
HORA DO CONTO5_BECRE D. CARLOS I_2023_2024HORA DO CONTO5_BECRE D. CARLOS I_2023_2024
HORA DO CONTO5_BECRE D. CARLOS I_2023_2024
 
Modelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e TaniModelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e Tani
 
trabalho wanda rocha ditadura
trabalho wanda rocha ditaduratrabalho wanda rocha ditadura
trabalho wanda rocha ditadura
 
Aula 13 8º Ano Cap.04 Revolução Francesa.pptx
Aula 13 8º Ano Cap.04 Revolução Francesa.pptxAula 13 8º Ano Cap.04 Revolução Francesa.pptx
Aula 13 8º Ano Cap.04 Revolução Francesa.pptx
 
HORA DO CONTO3_BECRE D. CARLOS I_2023_2024
HORA DO CONTO3_BECRE D. CARLOS I_2023_2024HORA DO CONTO3_BECRE D. CARLOS I_2023_2024
HORA DO CONTO3_BECRE D. CARLOS I_2023_2024
 
A galinha ruiva sequencia didatica 3 ano
A  galinha ruiva sequencia didatica 3 anoA  galinha ruiva sequencia didatica 3 ano
A galinha ruiva sequencia didatica 3 ano
 
FCEE - Diretrizes - Autismo.pdf para imprimir
FCEE - Diretrizes - Autismo.pdf para imprimirFCEE - Diretrizes - Autismo.pdf para imprimir
FCEE - Diretrizes - Autismo.pdf para imprimir
 
ALMANANHE DE BRINCADEIRAS - 500 atividades escolares
ALMANANHE DE BRINCADEIRAS - 500 atividades escolaresALMANANHE DE BRINCADEIRAS - 500 atividades escolares
ALMANANHE DE BRINCADEIRAS - 500 atividades escolares
 
Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029
 
HORA DO CONTO4_BECRE D. CARLOS I_2023_2024
HORA DO CONTO4_BECRE D. CARLOS I_2023_2024HORA DO CONTO4_BECRE D. CARLOS I_2023_2024
HORA DO CONTO4_BECRE D. CARLOS I_2023_2024
 
Slide de exemplo sobre o Sítio do Pica Pau Amarelo.pptx
Slide de exemplo sobre o Sítio do Pica Pau Amarelo.pptxSlide de exemplo sobre o Sítio do Pica Pau Amarelo.pptx
Slide de exemplo sobre o Sítio do Pica Pau Amarelo.pptx
 
Educação São Paulo centro de mídias da SP
Educação São Paulo centro de mídias da SPEducação São Paulo centro de mídias da SP
Educação São Paulo centro de mídias da SP
 
Slides Lição 4, CPAD, Como se Conduzir na Caminhada, 2Tr24.pptx
Slides Lição 4, CPAD, Como se Conduzir na Caminhada, 2Tr24.pptxSlides Lição 4, CPAD, Como se Conduzir na Caminhada, 2Tr24.pptx
Slides Lição 4, CPAD, Como se Conduzir na Caminhada, 2Tr24.pptx
 
A Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesA Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das Mães
 
geografia 7 ano - relevo, altitude, topos do mundo
geografia 7 ano - relevo, altitude, topos do mundogeografia 7 ano - relevo, altitude, topos do mundo
geografia 7 ano - relevo, altitude, topos do mundo
 
O Universo Cuckold - Compartilhando a Esposas Com Amigo.pdf
O Universo Cuckold - Compartilhando a Esposas Com Amigo.pdfO Universo Cuckold - Compartilhando a Esposas Com Amigo.pdf
O Universo Cuckold - Compartilhando a Esposas Com Amigo.pdf
 
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptxQUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
 
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptxATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
 
Cultura e Sociedade - Texto de Apoio.pdf
Cultura e Sociedade - Texto de Apoio.pdfCultura e Sociedade - Texto de Apoio.pdf
Cultura e Sociedade - Texto de Apoio.pdf
 
PPT _ Módulo 3_Direito Comercial_2023_2024.pdf
PPT _ Módulo 3_Direito Comercial_2023_2024.pdfPPT _ Módulo 3_Direito Comercial_2023_2024.pdf
PPT _ Módulo 3_Direito Comercial_2023_2024.pdf
 

Refatoração

  • 2. Refatoração • Refatoração (do inglês Refactoring) é o processo de modificar um sistema de software para melhorar a estrutura interna do código sem alterar seu comportamento externo. • O uso desta técnica evita a deterioração tão comum durante o ciclo de vida de um código. • Não se trata de otimização.
  • 3. Objetivo • Prevenir o envelhecimento do design e garantir a flexibilidade adequada para permitir a integração tranqüila de futuras extensões/alterações [Mens e Tourwé, 2004] – Em geral, uma refatoração é tão simples que parece que não vai ajudar muito. – Mas quando se juntam 50 refatorações, bem escolhidas, em seqüência, o código melhora radicalmente.
  • 4. Origem • Surgiu na comunidade de Smalltalk nos anos 80/90. • Desenvolveu-se formalmente na Universidade de Illinois em Urbana-Champaign. • Grupo do Prof. Ralph Johnson. – Tese de PhD de William Opdyke (1992). – John Brant e Don Roberts: • The Refactoring Browser Tool • Kent Beck (XP) na indústria
  • 5. Mau cheiro • O termo mau cheiro (bad smell) refere-se às estruturas no código que sugerem (às vezes gritam pela) possibilidade de refatoração [Fowler, 2000] • A partir da identificação de um mau cheiro é possível propor refatorações adequadas, que podem reduzir ou mesmo eliminar o mau cheiro
  • 6. Mau cheiro • Rigidez – uma alteração em um ponto do código requer alterações em cascata (dependências); • Fragilidade – A modificação de um ponto do código quebra outras funcionalidades; • Complexidade – Arquitetura muito complexa pois foi preparada para manipular qualquer tipo de possibilidade; • Duplicação – Código redundante, duplicado; • Legibilidade – Código difícil de compreender e entender
  • 7. Código Duplicado • Um dos problemas mais graves no código. Podem ser duas expressões idênticas em dois métodos na mesma classe, ou duas classes não associadas. – Essa duplicação pode ser eliminada aplicando-se a refatoração Extract Method. Nesse caso, o código é implementado uma única vez e chamado no local de origem onde estava o código duplicado. – Se o código duplicado encontra-se em duas classes distintas, pode-se aplicar a refatoração Extract Class.
  • 8. Método Longo • Consiste de um método com uma implementação de lógica com várias, dezenas ou até centenas de linhas de código. – O ideal seria criar métodos com no máximo dez linhas de código, podendo ser inclusive de uma a cinco. – Vários problemas podem ser originados da implementação de métodos longos. • A solução é dividir o método longo em métodos menores, usando-se a refatoração Extract Method.
  • 9. Classe larga • Uma boa prática da programação orientada a objetos sugere que uma classe deve ter uma única responsabilidade (princípio da responsabilidade única). • Quando uma classe possui muitas instâncias no código, isso sugere que ela está fazendo muito, ou pelo menos realizando trabalho que deveria ser feito por outras classes. • Algumas refatorações podem ajudar a reduzir classes longas, como por exemplo, Extrair Classe, Extract Subclass, entre outras.
  • 10. Lista de Parâmetros Longa • Um método que recebe muitos parâmetros sugere que classes possam estar compartilhando muita informação. • Se um método com uma longa lista de parâmetros está sendo chamado em vários locais do código, uma mudança em um deles pode desencadear uma cadeia muito grande de alterações em vários locais do código. • Algumas refatorações podem ajudar a resolver esse problema, por exemplo “Replace Parameter with Method” e “Introduce Parameter Object” onde uma longa lista de parâmetros se resume a uma única classe.
  • 11. Campo temporário • Muitas vezes um objeto tem sua variável de instância configurada somente sobre certas circunstâncias. Tal código é difícil de entender. Um exemplo ocorre quando um algoritmo depende de uma série de variáveis. • A refatoração “Extract Class” pode minimizar problemas associados á essas variáveis “pobres”
  • 12. Aspectos de qualidade • Simplicidade • Flexibilidade • Clareza • Desempenho
  • 13. Código limpo • Nomes significativos, que revelam sua intenção; • Expressa o que faz, por que existe, como é usado; • Nomes pronunciáveis; • Notação húngara, tipo não precisa estar no nome; • Nomes de classes são substantivos; • Nomes de métodos são verbos; • Assessores devem ter “get” e “set”
  • 14. Código limpo • Métodos pequenos (5 ou 10 linhas); • Linhas de até 100 caracteres; • Métodos devem realizar uma única tarefa; • Cuidar com lista longa de parâmetros; • Classes pequenas (200 linhas); • Seguir o princípio da responsabilidade única; • Cuidar o acoplamento entre classes (dependências); • Refatore ao invés de comentar;
  • 15. Extract Method (110) • Resumo – Você tem um fragmento de código que poderia ser agrupado. Mude o fragmento para um novo método e escolha um nome que explique o que ele faz.
  • 16. Extract Method (110) • Motivação – É uma das refatorações mais comuns. Se um método é longo demais ou difícil de entender e exige muitos comentários, extraia trechos do método e crie novos métodos para eles. Isso vai melhorar as chances de reutilização do código e vai fazer com que os métodos que o chamam fiquem mais fáceis de entender. O código fica parecendo comentário.
  • 17. Extract Method (110) • Mecânica: – Crie um novo método e escolha um nome que explicite a sua intenção (o nome deve dizer o que ele faz, não como ele faz). – Copie o código do método original para o novo. – Procure por variáveis locais e parâmetros utilizados pelo código extraído. • Se variáveis locais forem usadas apenas pelo código extraído, passe-as para o novo método. • Caso contrário, veja se o seu valor é apenas atualizado pelo código. Neste caso substitua o código por uma atribuição. • Se é tanto lido quando atualizado, passe-a como parâmetro. – Compile e teste.
  • 18. Inline Method (117) • Resumo: – A implementação de um método é tão clara quanto o nome do método. Substitua a chamada ao método pela sua implementação.
  • 19. Inline Method (117) • Motivação: – Bom para eliminar indireção desnecessária. Se você tem um grupo de métodos mal organizados, aplique Inline Method em todos eles seguido de uns bons Extract Methods
  • 20. Inline Method (117) • Mecânica: – Verifique se o método não é polimórfico ou se as suas subclasses o especializam. – Ache todas as chamadas e substitua pela implementação. – Compile e teste. – Remova a definição do método.
  • 21. Replace Temp with Query (120) • Resumo: – Uma variável local está sendo usada para guardar o resultado de uma expressão. Troque as referências a esta expressão por um método.
  • 22. Replace Temp with Query (120) • Motivação: – Variáveis temporárias encorajam métodos longos (devido ao escopo). O código fica mais limpo e o método pode ser usado em outros locais.
  • 23. Replace Temp with Query (120) • Mecânica: – Encontre variáveis locais que são atribuídas uma única vez • Se temp é atribuída mais do que uma vez use Split Temporary Variable (128) – Declare temp como final – Compile (para ter certeza) – Extraia a expressão • Método privado - efeitos colaterais – Compile e teste
  • 24. Replace Inheritance With Delegation (352) • Resumo: – Quando uma subclasse só usa parte da funcionalidade da superclasse ou não precisa herdar dados: na subclasse, crie um campo para a superclasse, ajuste os métodos apropriados para delegar para a ex-superclasse e remova a herança.
  • 25. Replace Inheritance With Delegation (352) • Motivação: – Herança é uma técnica excelente, mas muitas vezes, não é exatamente o que você quer. Às vezes, nós começamos herdando de uma outra classe mas daí descobrimos que precisamos herdar muito pouco da superclasse. Descobrimos que muitas das operações da superclasse não se aplicam à subclasse. Neste caso, delegação é mais apropriado.
  • 26. Replace Inheritance With Delegation (352) • Mecânica: – Crie um campo na subclasse que se refere a uma instância da superclasse, inicialize-o com this – Mude cada método na subclasse para que use o campo delegado – Compile e teste após mudar cada método • Cuidado com as chamadas a super – Remova a herança e crie um novo objeto da superclasse – Para cada método da superclasse utilizado, adicione um método delegado – Compile e teste
  • 27. Collapse Hierarchy (344) • Resumo: – A superclasse e a subclasse não são muito diferentes. Combine-as em apenas uma classe.
  • 28. Collapse Hierarchy (344) • Motivação: – Depois de muito trabalhar com uma hierarquia de classes, ela pode se tornar muito complexa. Depois de refatorá-la movendo métodos e campos para cima e para baixo, você pode descobrir que uma subclasse não acrescenta nada ao seu projeto. Remova-a.
  • 29. Collapse Hierarchy (344) • Mecânica: – Escolha que classe será eliminada: a superclasse ou a – subclasse – Use Pull Up Field (320) and Pull Up Method (322) ou Push Down Method (328) e Push Down Field (329) para mover todo o comportamento e dados da classe a ser eliminada – Compile e teste a cada movimento – Ajuste as referências à classe que será eliminada • Isto afeta: declarações, tipos de parâmetros e construtores. – Remova a classe vazia – Compile e teste
  • 30. Pull UP Field (320) • Resumo: – A superclasse e a subclasse têm os mesmos atributos (field). Mova os atributos repetidos para a superclasse.
  • 31. Pull UP Field (320) • Motivação: – Subclasses desenvolvidas independentemente umas das outras, ou após refatoração, podem ter características (features) duplicadas. Atributos podem ser duplicados. Estes não necessariamente têm o mesmo nome em todas as subclasses. A forma de determinar se tal acontece é verificar como os atributos são usados por outros métodos. Se eles são usados da mesma forma, pode-se generalizá-los.
  • 32. Pull UP Field (320) • Mecânica: – Inspecione todos os atributos candidatos para ver se não são usados de forma similar. – Se os atributos não têm o mesmo nome, dê-lhe o nome que vai ser usado quando ele “subir” para a superclasse. – Compile e teste. – Crie um novo atributo na superclasse. • Se o atributo era privado nas subclasses, deve-se colocá-lo como protegido na superclasse. – Apague o atributo nas subclasses. – Compile e teste.
  • 33. Extract Interface • Resumo: – Vários clientes usam o mesmo subconjunto da interface da classe, ou várias classes têm partes de suas interfaces em comum.
  • 34. Extract Interface • Motivação: – Classes usam umas às outras de várias formas. Pode- se ter, por exemplo, um grupo de clientes usando um subconjunto das responsabilidades da classe. E ainda, uma classe pode colaborar com qualquer classe que trate um certo grupo de requisições. Nestes casos, é útil transformar esse subconjunto de responsabilidades em algo com existência própria, para ficar claro e explícito seu uso no sistema. Dessa forma fica mais fácil de ver como as responsabilidades se dividem. E também, ao se inserir novas classes que implementem esse subconjunto, fica mais fácil de ver o que se encaixa nesse subconjunto.
  • 35. Extract Interface • Mecânica: – Crie uma interface vazia. – Declare as operações comuns na interface. – Declare as classes relevantes que devem implementar a interface. – Ajuste as declarações de tipos nos clientes para usar a interface. – Compile e teste.