SlideShare uma empresa Scribd logo
1 de 75
Boas práticas e refatoração: Longevidade para o seu código Gustavo Pinto @gustavopinto www.gustavopinto.net
Antes de qualquer coisa... .. não estou falando mal do seu código!
Agenda – Parte I ,[object Object]
Herança
Strings,[object Object]
Herança
Strings,[object Object]
Interfaces ?
Interfaces
Interfaces
Interfaces implements
Interfaces Independência e desacoplamento da implementação
Interfaces Independência e desacoplamento da implementação Carro carro = new Gol(); Carro carro = newBwm(); Carro carro = new Fusca();
Interfaces Independência e desacoplamento da implementação Carro carro = new Gol(); Carro carro = newBwm(); Carro carro = new Fusca();
Interfaces Independência e desacoplamento da implementação Carro carro = CarroFactory.getCarro(Gol.class);
Interfaces Independência e desacoplamento da implementação Carro carro = CarroFactory.getCarro(Gol.class);
Interfaces Independência e desacoplamento da implementação Carro carro = CarroFactory.getCarro(Gol.class); Factorymethod
Interfaces Independência e desacoplamento da implementação Fabricante fab = Fabricante.getInstance(Volkswagen.class ); Carro carro = Fabricante.getCarro(Gol.class);
Interfaces Independência e desacoplamento da implementação Fabricante fab = Fabricante.getInstance(Volkswagen.class ); Carro carro = Fabricante.getCarro(Gol.class);
Interfaces Independência e desacoplamento da implementação Fabricante fab = Fabricante.getInstance(Volkswagen.class ); Carro carro = Fabricante.getCarro(Gol.class); Abstract Factorymethod
Dica Livro GoF
Agenda – Parte I ,[object Object]
Herança
Strings,[object Object]
Herança ter umvsser um Gerente Funcionário Fábrica
Herança Herança é uma técnica excelente, mas muitas vezes, não é exatamente o que você quer.
Herança Herança é uma técnica excelente, mas muitas vezes, não é exatamente o que você quer.  Descobrimos que precisamos de muito pouco da superclasse.
Herança Herança é uma técnica excelente, mas muitas vezes, não é exatamente o que você quer.  Descobrimos que precisamos de muito pouco da superclasse.  Muitas das operações da superclasse não se aplicam à subclasse.
Herança
Herança Transtornos?
Herança Cuidado! Você ganha mais do que gostaria..
Herança Cuidado! Você ganha mais do que gostaria.. Não use herança por:  ,[object Object]
polimorfismo!,[object Object]
polimorfismo!
preguiça!,[object Object]
polimorfismo!
preguiça!Faça composição!
Agenda – Parte I ,[object Object]
Herança
Strings,[object Object]
Strings O problema: Concatenação! String numeros = ""; for (int i = 0; i<30000; i++) {         numeros = newStringBuilder()              .append(numeros).append(i).toString(); } System.out.println(numeros.length());
Strings O problema: Concatenação! String numeros = ""; for (int i = 0; i<30000; i++) {         numeros = newStringBuilder()              .append(numeros).append(i).toString(); } System.out.println(numeros.length());
Strings O problema: Concatenação! StringBuilder? StringBuffer? String.concat?
Strings String numeros = newStringBuilder(); for (int i = 0; i<30000; i++) {         numeros.append(numeros) 		  .append(i).toString(); } System.out.println(numeros.length());
Lembre-se "Premature optimization is the root of all evil (or at least most of it) in programming".
Agenda – Parte II ,[object Object],[object Object]
Código Duplicado,[object Object]
Código Duplicado
Classe Grande,[object Object]
Código Duplicado
Classe Grande
Método Longo,[object Object]
Código Duplicado
Classe Grande
Método Longo
 Com n parâmetros,[object Object]
Código Duplicado
Classe Grande
Método Longo
 Com n parâmetros
 Comentários,[object Object]
Código Duplicado
Classe Grande
Método Longo
 Com n parâmetros
 Comentários,[object Object]
Comentários Comentários são, na melhor das hipóteses, um mal necessário. Comentários servem para compensar nossa incapacidade de expressar a legibilidade de nosso código
Comentários E ainda... ,[object Object],[object Object]
Comentários nem sempre seguem o fluxo de mudanças no código,[object Object]
Comentários nem sempre seguem o fluxo de mudanças no código
 Requerem um esforço de manutenção,[object Object]
Comentários nem sempre seguem o fluxo de mudanças no código
Requerem um esforço de manutenção
truth can only be found in one place: the code,[object Object]
Agenda – Parte III ,[object Object]

Mais conteúdo relacionado

Mais procurados

Introdução Programação Em Maple
Introdução Programação Em MapleIntrodução Programação Em Maple
Introdução Programação Em Maplejeandson correa
 
Apresentando o EcmaScript 6
Apresentando o EcmaScript 6Apresentando o EcmaScript 6
Apresentando o EcmaScript 6Giovanni Bassi
 
Análise exploratória e modelação com R parte 1
Análise exploratória e modelação com R parte 1Análise exploratória e modelação com R parte 1
Análise exploratória e modelação com R parte 1Lucas Castro
 

Mais procurados (6)

Introdução Programação Em Maple
Introdução Programação Em MapleIntrodução Programação Em Maple
Introdução Programação Em Maple
 
Apresentando o EcmaScript 6
Apresentando o EcmaScript 6Apresentando o EcmaScript 6
Apresentando o EcmaScript 6
 
Análise exploratória e modelação com R parte 1
Análise exploratória e modelação com R parte 1Análise exploratória e modelação com R parte 1
Análise exploratória e modelação com R parte 1
 
Csharp.intro
Csharp.introCsharp.intro
Csharp.intro
 
Linguagem R
Linguagem RLinguagem R
Linguagem R
 
Introdução ao R
Introdução ao RIntrodução ao R
Introdução ao R
 

Semelhante a Beljug2010

[CLPE] Design patterns com c#
[CLPE] Design patterns com c#[CLPE] Design patterns com c#
[CLPE] Design patterns com c#Felipe Pimentel
 
POO-FundamentosPOO.pdf
POO-FundamentosPOO.pdfPOO-FundamentosPOO.pdf
POO-FundamentosPOO.pdfFausto Ayres
 
Linguagem C 01 Primeiros Passos
Linguagem C 01 Primeiros PassosLinguagem C 01 Primeiros Passos
Linguagem C 01 Primeiros PassosRegis Magalhães
 
Aula01
Aula01Aula01
Aula01vdlos
 
Matando o Java e Mostrando o Python
Matando o Java e Mostrando o PythonMatando o Java e Mostrando o Python
Matando o Java e Mostrando o PythonOsvaldo Santana Neto
 
As Novidades Do C# 4.0 - NetPonto
As Novidades Do C# 4.0 - NetPontoAs Novidades Do C# 4.0 - NetPonto
As Novidades Do C# 4.0 - NetPontoPaulo Morgado
 
Refatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaRefatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaEduardo Bregaida
 
Lista IV de Programação Orientada a Objetos
Lista IV de Programação Orientada a ObjetosLista IV de Programação Orientada a Objetos
Lista IV de Programação Orientada a Objetosunifesptk
 
Groovy para javeiros - Migração Painless
Groovy para javeiros - Migração PainlessGroovy para javeiros - Migração Painless
Groovy para javeiros - Migração PainlessRafael Farias Silva
 
Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1ariovaldodias
 
Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1ariovaldodias
 

Semelhante a Beljug2010 (20)

Java para iniciantes
Java para iniciantesJava para iniciantes
Java para iniciantes
 
Java4
Java4Java4
Java4
 
[CLPE] Design patterns com c#
[CLPE] Design patterns com c#[CLPE] Design patterns com c#
[CLPE] Design patterns com c#
 
Python Emsl2009
Python Emsl2009Python Emsl2009
Python Emsl2009
 
Java5
Java5Java5
Java5
 
Aula 1 | Introdução a C++
Aula 1 | Introdução a C++Aula 1 | Introdução a C++
Aula 1 | Introdução a C++
 
Series lab
Series labSeries lab
Series lab
 
POO-FundamentosPOO.pdf
POO-FundamentosPOO.pdfPOO-FundamentosPOO.pdf
POO-FundamentosPOO.pdf
 
Linguagem C 01 Primeiros Passos
Linguagem C 01 Primeiros PassosLinguagem C 01 Primeiros Passos
Linguagem C 01 Primeiros Passos
 
Aula01
Aula01Aula01
Aula01
 
Matando o Java e Mostrando o Python
Matando o Java e Mostrando o PythonMatando o Java e Mostrando o Python
Matando o Java e Mostrando o Python
 
As Novidades Do C# 4.0 - NetPonto
As Novidades Do C# 4.0 - NetPontoAs Novidades Do C# 4.0 - NetPonto
As Novidades Do C# 4.0 - NetPonto
 
Refatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaRefatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completa
 
Lista IV de Programação Orientada a Objetos
Lista IV de Programação Orientada a ObjetosLista IV de Programação Orientada a Objetos
Lista IV de Programação Orientada a Objetos
 
Programação Orientada por Objectos - Aula 2
Programação Orientada por Objectos - Aula 2Programação Orientada por Objectos - Aula 2
Programação Orientada por Objectos - Aula 2
 
Groovy para javeiros - Migração Painless
Groovy para javeiros - Migração PainlessGroovy para javeiros - Migração Painless
Groovy para javeiros - Migração Painless
 
Linguagem C 06 Funcoes
Linguagem C 06 FuncoesLinguagem C 06 Funcoes
Linguagem C 06 Funcoes
 
TDD
TDDTDD
TDD
 
Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1
 
Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1
 

Mais de UFPA

Evidence Briefings: Towards a Medium to Transfer Knowledge from Systematic Re...
Evidence Briefings: Towards a Medium to Transfer Knowledge from Systematic Re...Evidence Briefings: Towards a Medium to Transfer Knowledge from Systematic Re...
Evidence Briefings: Towards a Medium to Transfer Knowledge from Systematic Re...UFPA
 
More Common Than You Think: An In-Depth Study of Casual Contributors
More Common Than You Think: An In-Depth Study of Casual ContributorsMore Common Than You Think: An In-Depth Study of Casual Contributors
More Common Than You Think: An In-Depth Study of Casual ContributorsUFPA
 
What Programmers Say About Refactoring Tools? An Empirical Investigation of ...
What Programmers Say About Refactoring Tools? An Empirical Investigation of ...What Programmers Say About Refactoring Tools? An Empirical Investigation of ...
What Programmers Say About Refactoring Tools? An Empirical Investigation of ...UFPA
 
Possibilidades com python
Possibilidades com pythonPossibilidades com python
Possibilidades com pythonUFPA
 
Python simplecv
Python simplecvPython simplecv
Python simplecvUFPA
 
Porque aprender haskell me fez um programador python melhor?
Porque aprender haskell me fez um programador python melhor?Porque aprender haskell me fez um programador python melhor?
Porque aprender haskell me fez um programador python melhor?UFPA
 
Are Java Programmers Transitioning to Multicore?
Are Java Programmers Transitioning to Multicore? Are Java Programmers Transitioning to Multicore?
Are Java Programmers Transitioning to Multicore? UFPA
 
Grails from scratch
Grails from scratchGrails from scratch
Grails from scratchUFPA
 
A computacao e_voce_caminhos_para_seguir
A computacao e_voce_caminhos_para_seguirA computacao e_voce_caminhos_para_seguir
A computacao e_voce_caminhos_para_seguirUFPA
 

Mais de UFPA (9)

Evidence Briefings: Towards a Medium to Transfer Knowledge from Systematic Re...
Evidence Briefings: Towards a Medium to Transfer Knowledge from Systematic Re...Evidence Briefings: Towards a Medium to Transfer Knowledge from Systematic Re...
Evidence Briefings: Towards a Medium to Transfer Knowledge from Systematic Re...
 
More Common Than You Think: An In-Depth Study of Casual Contributors
More Common Than You Think: An In-Depth Study of Casual ContributorsMore Common Than You Think: An In-Depth Study of Casual Contributors
More Common Than You Think: An In-Depth Study of Casual Contributors
 
What Programmers Say About Refactoring Tools? An Empirical Investigation of ...
What Programmers Say About Refactoring Tools? An Empirical Investigation of ...What Programmers Say About Refactoring Tools? An Empirical Investigation of ...
What Programmers Say About Refactoring Tools? An Empirical Investigation of ...
 
Possibilidades com python
Possibilidades com pythonPossibilidades com python
Possibilidades com python
 
Python simplecv
Python simplecvPython simplecv
Python simplecv
 
Porque aprender haskell me fez um programador python melhor?
Porque aprender haskell me fez um programador python melhor?Porque aprender haskell me fez um programador python melhor?
Porque aprender haskell me fez um programador python melhor?
 
Are Java Programmers Transitioning to Multicore?
Are Java Programmers Transitioning to Multicore? Are Java Programmers Transitioning to Multicore?
Are Java Programmers Transitioning to Multicore?
 
Grails from scratch
Grails from scratchGrails from scratch
Grails from scratch
 
A computacao e_voce_caminhos_para_seguir
A computacao e_voce_caminhos_para_seguirA computacao e_voce_caminhos_para_seguir
A computacao e_voce_caminhos_para_seguir
 

Beljug2010