Boas práticas e refatoração: Longevidade para o seu códigoGustavo Pinto@gustavopintowww.gustavopinto.net
Antes de qualquer coisa..... não estou falando mal do seu código!
Agenda – Parte I Interfaces
Herança
StringsAgenda – Parte IInterfaces
Herança
StringsInterfaces?
Interfaces?
Interfaces
Interfaces
Interfacesimplements
InterfacesIndependência e desacoplamento da implementação
InterfacesIndependência e desacoplamento da implementaçãoCarro carro = new Gol();Carro carro = newBwm();Carro carro = new Fusca();
InterfacesIndependência e desacoplamento da implementaçãoCarro carro = new Gol();Carro carro = newBwm();Carro carro = new Fusca();
InterfacesIndependência e desacoplamento da implementaçãoCarro carro = CarroFactory.getCarro(Gol.class);
InterfacesIndependência e desacoplamento da implementaçãoCarro carro = CarroFactory.getCarro(Gol.class);
InterfacesIndependência e desacoplamento da implementaçãoCarro carro = CarroFactory.getCarro(Gol.class);Factorymethod
InterfacesIndependência e desacoplamento da implementaçãoFabricante fab = Fabricante.getInstance(Volkswagen.class );Carro carro = Fabricante.getCarro(Gol.class);
InterfacesIndependência e desacoplamento da implementaçãoFabricante fab = Fabricante.getInstance(Volkswagen.class );Carro carro = Fabricante.getCarro(Gol.class);
InterfacesIndependência e desacoplamento da implementaçãoFabricante fab = Fabricante.getInstance(Volkswagen.class );Carro carro = Fabricante.getCarro(Gol.class);AbstractFactorymethod
DicaLivro GoF
Agenda – Parte I Interfaces
Herança
StringsHerançater umvsser umGerenteFuncionário
Herançater umvsser umGerenteFuncionárioFábrica
HerançaHerança é uma técnica excelente, mas muitas vezes, não é exatamente o que você quer.
HerançaHerança é uma técnica excelente, mas muitas vezes, não é exatamente o que você quer. Descobrimos que precisamos de muito pouco da superclasse.
HerançaHeranç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çaTranstornos?
HerançaCuidado! Você ganha mais do que gostaria..
HerançaCuidado! Você ganha mais do que gostaria..Não use herança por: ‘reuso’ de código!
polimorfismo!HerançaCuidado! Você ganha mais do que gostaria..Não use herança por: ‘reuso’ de código!
polimorfismo!
preguiça!HerançaCuidado! Você ganha mais do que gostaria..Não use herança por: ‘reuso’ de código!
polimorfismo!
preguiça!Faça composição!
Agenda – Parte I Interfaces
Herança
StringsStringsO problema: Concatenação!
StringsO problema: Concatenação!String numeros = "";for (int i = 0; i<30000; i++) {        numeros = newStringBuilder()             .append(numeros).append(i).toString();}System.out.println(numeros.length());
StringsO problema: Concatenação!String numeros = "";for (int i = 0; i<30000; i++) {        numeros = newStringBuilder()             .append(numeros).append(i).toString();}System.out.println(numeros.length());
StringsO problema: Concatenação!StringBuilder?StringBuffer?String.concat?
StringsString 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 IIBadSmell?Agenda – Parte IIBadSmell?
Código DuplicadoAgenda – Parte IIBadSmell?
Código Duplicado
Classe GrandeAgenda – Parte IIBadSmell?
Código Duplicado
Classe Grande
Método LongoAgenda – Parte IIBadSmell?
Código Duplicado
Classe Grande
Método Longo
 Com n parâmetrosAgenda – Parte IIBadSmell?
Código Duplicado
Classe Grande
Método Longo
 Com n parâmetros
 ComentáriosAgenda – Parte IIBadSmell?
Código Duplicado
Classe Grande
Método Longo
 Com n parâmetros
 ComentáriosComentáriosComentários são, na melhor das hipóteses, um mal necessário.
ComentáriosComentá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áriosE ainda... Comentários mentem!ComentáriosE ainda... Comentários mentem!
Comentários nem sempre seguem o fluxo de mudanças no códigoComentáriosE ainda... Comentários mentem!
Comentários nem sempre seguem o fluxo de mudanças no código
 Requerem um esforço de manutençãoComentáriosE ainda... Comentários mentem!
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 codeDicaRobert C. Martin, CleanCode
Agenda – Parte III Nomes Significativos

Beljug2010