SlideShare uma empresa Scribd logo
1 de 78
Clean Code Marcos Brizeno
Quem sou eu. @marcosbrizeno brizeno.wordpress.com
Motivação
Gambiarras
Sujeira?
Produtividade
Custo para mudar
Profissional?
O que é?
Legibilidade
Elegante
Eficiente
Qualidade de código
Qual Sua Reação?
Qual Sua Reação?
Falar é fácil!
Refatore!
Praticando
Nomes
Revele sua intenção
Revele sua intenção double  calcula( double  d1,  double  d2); int  main() { double  prProd = 17.99; double  desc = 0.2; double  valor = calcula(prProd, desc); cout << valor; return  0; } double  calcula( double  d1,  double  d2) { return  d1 - (d1 * d2); }
Revele sua intenção double  calcula( double  d1,  double  d2); int  main() { // preço do produto double  prProd = 17.99; // valor do desconto double  desc = 0.2; // valor do produto com desconto double  valor = calcula(prProd, desc); cout << valor; return  0; } // calcula o valor de um produto com desconto double  calcula( double  d1,  double  d2) { return  d1 - (d1 * d2); }
Mapa Mental double  calcula( double  d1,  double  d2); int  main() { // preço do produto double  prProd = 17.99; // valor do desconto double  desc = 0.2; // valor do produto com desconto double  valor = calcula(prProd, desc); cout << valor; return  0; } // calcula o valor de um produto com desconto double  calcula( double  d1,  double  d2) { return  d1 - (d1 * d2); }
Revele sua intenção int  main() { //  preço  do  produto double  precoDoProduto = 17.99; // valor do  desconto double  desconto = 0.2; // valor do  produto   com   desconto double  valorComDesconto =  calculaDesconto(precoDoProduto, desconto); cout << valor; return  0; } //  calculo  o valor  de   um   produto   com   desconto double  calculaDesconto( double  d1,  double  d2) { return  d1 - (d1 * d2); }
Revele sua intenção int  main() { double  precoDoProduto = 17.99; double  desconto = 0.2; double  valorComDesconto =  calculaDesconto(precoDoProduto, desconto); cout << valor; return  0; } double  calculaDesconto( double  d1,  double  d2) { return  d1 - (d1 * d2); }
Nomes Genéricos
Nomes Genéricos #Envia o boleto para ser descontado no banco def   processa (boletoBancario): #Calcula o imposto total de um funcionário def   calcula (funcionario): #Mostra o relatório de finanças def   mostrar (): #Executa consultas na fila de espera def   executar ():
Nomes Genéricos #Envia o boleto para ser descontado no banco def   descontarBoleto (boletoBancario): #Calcula o imposto total de um funcionário def   calcularImposto (funcionario): #Mostra o relatório de finanças def   mostrarRelatorio (): #Executa consultas na fila de espera def   executarConsultasEmEspera ():
Nomes Genéricos def   descontarBoleto (boletoBancario): def   calcularImposto (funcionario): def   mostrarRelatorio (): def   executarConsultasEmEspera ():
Diferencie diferenças
Diferencie diferenças private   double  calculaDesconto( double  d1,  double  d2); private  void copiar(String s1, String s2); private   boolean  maiorQue( int  n1,  int  n2);
Diferencie diferenças private   double  calculaDesconto( double  preco,  double  desconto); private   void  copiar(String fonte, String alvo); private   boolean  maiorQue( int  referência,  int  numero);
Dê nomes a tudo!
Dê nomes a tudo! class   Taxi  { protected : int   horaDaCorrida ; double   quilometros ; public : double  calcularValorCorrida() { if  ( horaDaCorrida  > 22 &&  horaDaCorrida  < 5) { return   quilometros  * 3.7; } return   quilometros  * 2.9; } };
Dê nomes a tudo! #define  PRECO_BANDEIRA_2 3.7 #define  PRECO_BANDEIRA_1 2.9 class   Taxi  { protected : int   horaDaCorrida ; double   quilometros ; public : double  calcularValorCorrida() { if  ( horaDaCorrida  > 22 &&  horaDaCorrida  < 5) { return   quilometros  * PRECO_BANDEIRA_2; } return   quilometros  * PRECO_BANDEIRA_1; } };
Dê nomes a tudo! // opening and closing a file #include   <iostream> #include   <fstream> using   namespace  std; int   main () { ofstream  outfile; outfile.open( &quot;.// tmp //test.txt&quot; ); // >> i/o operations here << outfile.close(); return  0; } // opening and closing a file #include   <iostream> #include   <fstream> using   namespace  std; #define  TMP_DIR  &quot;.// tmp //&quot; int   main () { ofstream  outfile; string  diretorio = TMP_DIR; diretorio.append( &quot;test.txt&quot; ); outfile.open(diretorio.c_str()); // >> i/o operations here << outfile.close(); return  0; }
Métodos/Funções
Única responsabilidade
Única responsabilidade public   void  venderProduto(Vendedor vendedor, Produto produto) { // Verifica se o produto tem desconto for  (Produto produtosComDesconto : ProdutosComDesconto) { if  (produtosComDesconto.getId() == produto.getId()) { // Calcula o valor com desconto double  valorFinal = produto.getPreco() -  produto.getPreco() *  VALOR_DESCONTO ; // Cria o boleto de pagamento Boleto boletoDePagamento =  new  Boleto(); boletoDePagamento.setNomeVendedor(vendedor.getNome()); boletoDePagamento.setValor(valorFinal); boletoDePagamento.imprimir(); } } // Se o produto não tiver desconto // Cria o boleto de pagamento Boleto boletoDePagamento =  new  Boleto(); boletoDePagamento.setNomeVendedor(vendedor.getNome()); boletoDePagamento.setValor(produto.getValor()); boletoDePagamento.imprimir(); }
Única responsabilidade public   void  venderProduto(Vendedor vendedor, Produto produto) { // Verifica se o produto tem desconto for  (Produto produtosComDesconto : ProdutosComDesconto) { if  (produtosComDesconto.getId() == produto.getId()) { // Calcula o valor com desconto double  valorFinal = produto.getPreco() -  produto.getPreco() *  VALOR_DESCONTO ; // Cria o boleto de pagamento criarBoletoDePagamento(vendedor.getNome(), valorFinal); } } // Se o produto não tiver desconto // Cria o boleto de pagamento criarBoletoDePagamento(vendedor.getNome(), produto.getPreco()); }
Única responsabilidade public   void  venderProduto(Vendedor vendedor, Produto produto) { // Verifica se o produto tem desconto if   (produtoTemDesconto(produto))   { // Calcula o valor com desconto double  valorFinal = produto.getPreco() -  produto.getPreco() *  VALOR_DESCONTO ; // Cria o boleto de pagamento criarBoletoDePagamento(vendedor.getNome(), valorFinal); } // Se o produto não tiver desconto // Cria o boleto de pagamento criarBoletoDePagamento(vendedor.getNome(), produto.getPreco()); }
Única responsabilidade public   void  venderProduto(Vendedor vendedor, Produto produto) { // Verifica se o produto tem desconto double  valorFinal = produto.getPreco(); if  (produtoTemDesconto(produto)) { // Calcula o valor com desconto // Cria o boleto de pagamento   valorFinal = calcularDesconto(produto.getPreco()); } // Se o produto não tiver desconto // Cria o boleto de pagamento criarBoletoDePagamento(vendedor.getNome(), valorFinal); }
Única responsabilidade public   void  venderProduto(Vendedor vendedor, Produto produto) { double  valorFinal = produto.getPreco(); if  (produtoTemDesconto(produto))    valorFinal = calcularDesconto(produto.getPreco()); } criarBoletoDePagamento(vendedor.getNome(), valorFinal); }
Agrupar funções
Agrupar funções  public   void  venderProduto( Vendedor vendedor, Produto produto) { double  valorFinal = produto.getPreco(); if  (produtoTemDesconto(produto)) {   valorFinal = calcularDesconto(produto.getPreco()); } criarBoletoDePagamento(vendedor.getNome(), valorFinal); } public   void  criarBoletoDePagamento(String nomeVendedor,  double  valorProduto); public   double  calcularDesconto( double  preco); public   boolean  produtoTemDesconto(Produto produto);
Estruturas de Decisão
Dê nomes a tudo! #define  PRECO_BANDEIRA_2 3.7 #define  PRECO_BANDEIRA_1 2.9 class   Taxi  { protected : int   horaDaCorrida ; double   quilometros ; public : double  calcularValorCorrida() { if  ( horaDaCorrida  > 22 &&  horaDaCorrida  < 5) { return   quilometros  * PRECO_BANDEIRA_2; } return   quilometros  * PRECO_BANDEIRA_1; } };
Estruturas de Decisão #define  PRECO_BANDEIRA_2 3.7 #define  PRECO_BANDEIRA_1 2.9 class   Taxi  { protected : int   horaDaCorrida ; double   quilometros ; private : bool  ehHorarioNormal() { return   horaDaCorrida  < 22 &&  horaDaCorrida  > 5; } public : double  calcularValorCorrida() { if  (!ehHorarioNormal()) { return   quilometros  * PRECO_BANDEIRA_2; } return   quilometros  * PRECO_BANDEIRA_1; } };
Evite Negações
Estruturas de Decisão #define  PRECO_BANDEIRA_2 3.7 #define  PRECO_BANDEIRA_1 2.9 class   Taxi  { protected : int   horaDaCorrida ; double   quilometros ; private : bool  ehHorarioNormal() { return   horaDaCorrida  < 22 &&  horaDaCorrida  > 5; } public : double  calcularValorCorrida() { if  (!ehHorarioNormal()) { return   quilometros  * PRECO_BANDEIRA_2; } return   quilometros  * PRECO_BANDEIRA_1; } };
Estruturas de Decisão #define  PRECO_BANDEIRA_2 3.7 #define  PRECO_BANDEIRA_1 2.9 class   Taxi  { protected : int   horaDaCorrida ; double   quilometros ; private : bool  ehHorarioNormal() { return   horaDaCorrida  < 22 &&  horaDaCorrida  > 5; } public : double  calcularValorCorrida() { if  (ehHorarioNormal()) { return   quilometros  * PRECO_BANDEIRA_1; } return   quilometros  * PRECO_BANDEIRA_2; } };
Retornar nulo
Retornar nulo public   double  dividir( int  dividendo,  int  divisor) { if  (divisor == 0) { return  -1; } return  dividendo / divisor; }
Retornar nulo public   double  dividir( int  dividendo,  int  divisor) { if  (divisor == 0) { return  -1; } return  dividendo / divisor; } public   double  dividir( int  dividendo,  int  divisor)  throws  Exception { if  (divisor == 0) { throw   new  Exception( &quot;Impossível dividir por zero&quot; ); } return  dividendo / divisor; }
Formatação
Formatação public  String getTabuleiro() { String string =  &quot;&quot; ; for  ( int  i = 0; i < getAltura(); i++) { for  ( int  j = 0; j < getLargura(); j++) { string +=  tabuleiroEscondido [i][j];} if  (i !=  tabuleiroEscondido . length  - 1) { string +=  &quot;&quot; ; } } return  string; }
Formatação public  String getTabuleiro() { String string =  &quot;&quot; ; for  ( int  i = 0; i < getAltura(); i++) { for  ( int  j = 0; j < getLargura(); j++) { string +=  tabuleiroEscondido [i][j]; } if  (i !=  tabuleiroEscondido . length  - 1) { string +=  &quot;&quot; ; } } return  string; }
Repetição
Repetição public   void  venderProduto(Vendedor vendedor, Produto produto) { // Verifica se o produto tem desconto for  (Produto produtosComDesconto : ProdutosComDesconto) { if  (produtosComDesconto.getId() == produto.getId()) { // Calcula o valor com desconto double  valorFinal = produto.getPreco() -  produto.getPreco() *  VALOR_DESCONTO ; // Cria o boleto de pagamento Boleto boletoDePagamento =  new  Boleto(); boletoDePagamento.setNomeVendedor(vendedor.getNome()); boletoDePagamento.setValor(valorFinal); boletoDePagamento.imprimir(); } } // Se o produto não tiver desconto // Cria o boleto de pagamento Boleto boletoDePagamento =  new  Boleto(); boletoDePagamento.setNomeVendedor(vendedor.getNome()); boletoDePagamento.setValor(produto.getValor()); boletoDePagamento.imprimir(); }
Repetição public   class  Imagem { public   void  moverImagem( int  x,  int  y){ this .imagem.getRetangulo().getPontoX().set(x); this .imagem.getRetangulo().getPontoY().set(y); } }
Repetição public   class  Imagem { public   void  moverImagem( int  x,  int  y){ this .imagem.getRetangulo().getPontoX().set(x); this .imagem.getRetangulo().getPontoY().set(y); } }
Repetição public   class  Imagem { public   void  moverImagem( int  x,  int  y){ this .imagem.getRetangulo().getPontoX().set(x); this .imagem.getRetangulo().getPontoY().set(y); } } public   class  Imagem { public   void  moverImagem( int  x,  int  y){ this .imagem.getRetangulo().mover(x, y); } }
Bad Smell
Bad Smell ,[object Object]
Métodos longos = muita responsabilidade!
Muitos argumentos são sintomas de muitas responsabilidades!
Argumento booleano grita que a função faz mais de uma coisa!
Sentiu vontade de comentar? Refatore e depois comente!
Se vai comentar, comenta DIREITO!
! Clean Code
! Clean Code ,[object Object]
Paradigma
Convenções de Código
! Clean Code ,[object Object]
Paradigma
Convenções de Código
TROLAGEM!
Sobre o livro Robert C. Martin

Mais conteúdo relacionado

Mais procurados

Cafe com Tom - ExtJS 4
Cafe com Tom - ExtJS 4Cafe com Tom - ExtJS 4
Cafe com Tom - ExtJS 4Loiane Groner
 
Paradigmas de Linguagens de Programacao - Aula #3
Paradigmas de Linguagens de Programacao - Aula #3Paradigmas de Linguagens de Programacao - Aula #3
Paradigmas de Linguagens de Programacao - Aula #3Ismar Silveira
 
2 funcoes e estrutura de blocos
2   funcoes e estrutura de blocos2   funcoes e estrutura de blocos
2 funcoes e estrutura de blocosRicardo Bolanho
 
Aprendendo objective c - parte 1
Aprendendo objective c - parte 1Aprendendo objective c - parte 1
Aprendendo objective c - parte 1Alamo Saravali
 
(Portuguese) Java EE Poliglota
(Portuguese) Java EE Poliglota(Portuguese) Java EE Poliglota
(Portuguese) Java EE PoliglotaPhil Calçado
 
Combatendo code smells em aplicações Java
Combatendo code smells em aplicações JavaCombatendo code smells em aplicações Java
Combatendo code smells em aplicações JavaEmmanuel Neri
 
PHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object CalisthenicsPHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object CalisthenicsGuilherme Blanco
 
Passagem de Objetos entre Java e Oracle
Passagem de Objetos entre Java e OraclePassagem de Objetos entre Java e Oracle
Passagem de Objetos entre Java e OracleAndré Reis
 
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
 
Object Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simplesObject Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simplesOtávio Calaça Xavier
 
Programação Estruturada 2 - Aula 03 - Código Fonte
Programação Estruturada 2 - Aula 03 - Código FonteProgramação Estruturada 2 - Aula 03 - Código Fonte
Programação Estruturada 2 - Aula 03 - Código Fontethomasdacosta
 
Introdução à análise orientada a objetos parte 2
Introdução à análise orientada a objetos parte 2Introdução à análise orientada a objetos parte 2
Introdução à análise orientada a objetos parte 2irenescotolo
 
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...Ricardo Valeriano
 
Clean Code Matters - JavaScript
Clean Code Matters - JavaScriptClean Code Matters - JavaScript
Clean Code Matters - JavaScriptKewerson Hugo
 
113856859 exercicios-vetor-e-matriz
113856859 exercicios-vetor-e-matriz113856859 exercicios-vetor-e-matriz
113856859 exercicios-vetor-e-matrizDaniel Natividade
 
Semana 10: Encapsulação, cópia de instâncias, igualdade de instâncias
Semana 10: Encapsulação, cópia de instâncias, igualdade de instânciasSemana 10: Encapsulação, cópia de instâncias, igualdade de instâncias
Semana 10: Encapsulação, cópia de instâncias, igualdade de instânciasManuel Menezes de Sequeira
 

Mais procurados (20)

Cafe com Tom - ExtJS 4
Cafe com Tom - ExtJS 4Cafe com Tom - ExtJS 4
Cafe com Tom - ExtJS 4
 
Paradigmas de Linguagens de Programacao - Aula #3
Paradigmas de Linguagens de Programacao - Aula #3Paradigmas de Linguagens de Programacao - Aula #3
Paradigmas de Linguagens de Programacao - Aula #3
 
2 funcoes e estrutura de blocos
2   funcoes e estrutura de blocos2   funcoes e estrutura de blocos
2 funcoes e estrutura de blocos
 
Aprendendo objective c - parte 1
Aprendendo objective c - parte 1Aprendendo objective c - parte 1
Aprendendo objective c - parte 1
 
(Portuguese) Java EE Poliglota
(Portuguese) Java EE Poliglota(Portuguese) Java EE Poliglota
(Portuguese) Java EE Poliglota
 
Combatendo code smells em aplicações Java
Combatendo code smells em aplicações JavaCombatendo code smells em aplicações Java
Combatendo code smells em aplicações Java
 
PHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object CalisthenicsPHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object Calisthenics
 
Passagem de Objetos entre Java e Oracle
Passagem de Objetos entre Java e OraclePassagem de Objetos entre Java e Oracle
Passagem de Objetos entre Java e Oracle
 
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
 
Javascript avançado
Javascript avançadoJavascript avançado
Javascript avançado
 
Object Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simplesObject Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simples
 
Programação Estruturada 2 - Aula 03 - Código Fonte
Programação Estruturada 2 - Aula 03 - Código FonteProgramação Estruturada 2 - Aula 03 - Código Fonte
Programação Estruturada 2 - Aula 03 - Código Fonte
 
Introdução à análise orientada a objetos parte 2
Introdução à análise orientada a objetos parte 2Introdução à análise orientada a objetos parte 2
Introdução à análise orientada a objetos parte 2
 
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
 
Clean Code Matters - JavaScript
Clean Code Matters - JavaScriptClean Code Matters - JavaScript
Clean Code Matters - JavaScript
 
Refactoring
RefactoringRefactoring
Refactoring
 
113856859 exercicios-vetor-e-matriz
113856859 exercicios-vetor-e-matriz113856859 exercicios-vetor-e-matriz
113856859 exercicios-vetor-e-matriz
 
Semana 10: Encapsulação, cópia de instâncias, igualdade de instâncias
Semana 10: Encapsulação, cópia de instâncias, igualdade de instânciasSemana 10: Encapsulação, cópia de instâncias, igualdade de instâncias
Semana 10: Encapsulação, cópia de instâncias, igualdade de instâncias
 
Introdução à Linguagem Ruby
Introdução à Linguagem RubyIntrodução à Linguagem Ruby
Introdução à Linguagem Ruby
 
Java script aula 08 - formulários
Java script   aula 08 - formuláriosJava script   aula 08 - formulários
Java script aula 08 - formulários
 

Semelhante a Clean Code: Princípios de desenvolvimento ágil e boas práticas de programação

Programação Estruturada 2 - Aula 02
Programação Estruturada 2 - Aula 02Programação Estruturada 2 - Aula 02
Programação Estruturada 2 - Aula 02thomasdacosta
 
Design Patterns na Programação de Jogo
Design Patterns na Programação de JogoDesign Patterns na Programação de Jogo
Design Patterns na Programação de JogoBruno Cicanci
 
Qualidade de Software: Escrevendo Código Limpo
Qualidade de Software: Escrevendo Código LimpoQualidade de Software: Escrevendo Código Limpo
Qualidade de Software: Escrevendo Código LimpoLidiane Taquehara
 
Android DevConference - SOLID no Android
Android DevConference - SOLID no AndroidAndroid DevConference - SOLID no Android
Android DevConference - SOLID no AndroidiMasters
 
Palestra Novidades da linguagem C# 6
Palestra Novidades da linguagem C# 6Palestra Novidades da linguagem C# 6
Palestra Novidades da linguagem C# 6Renato Haddad
 
Programando Melhor - Flisol
Programando Melhor - FlisolProgramando Melhor - Flisol
Programando Melhor - FlisolLeonn Leite
 
Reduzindo o boilerplate code com Lombok
Reduzindo o boilerplate code com LombokReduzindo o boilerplate code com Lombok
Reduzindo o boilerplate code com LombokWellington Pinheiro
 
Exercícios da Aula de LAB 01
Exercícios da Aula de LAB 01Exercícios da Aula de LAB 01
Exercícios da Aula de LAB 01thomasdacosta
 
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...Manuel Menezes de Sequeira
 
Como conectar programas em linguagem java a bases de dados
Como conectar programas em linguagem java  a bases de dadosComo conectar programas em linguagem java  a bases de dados
Como conectar programas em linguagem java a bases de dadosHenrique Fernandes
 
Spock Framework 2
Spock Framework 2Spock Framework 2
Spock Framework 2Ismael
 
Técnicas de Refactoring
Técnicas de RefactoringTécnicas de Refactoring
Técnicas de RefactoringRodrigo Branas
 
Portfólio ADS- sem 4 - atividade em grupo
Portfólio ADS- sem 4 - atividade em grupoPortfólio ADS- sem 4 - atividade em grupo
Portfólio ADS- sem 4 - atividade em grupoAdilson Nascimento
 
Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Luis Gustavo Almeida
 
[CLPE] Design patterns com c#
[CLPE] Design patterns com c#[CLPE] Design patterns com c#
[CLPE] Design patterns com c#Felipe Pimentel
 
TDC2016 Boas Práticas SQL em Banco Relacional para Desenvolvedores
TDC2016 Boas Práticas SQL em Banco Relacional para DesenvolvedoresTDC2016 Boas Práticas SQL em Banco Relacional para Desenvolvedores
TDC2016 Boas Práticas SQL em Banco Relacional para DesenvolvedoresFernando Franquini
 

Semelhante a Clean Code: Princípios de desenvolvimento ágil e boas práticas de programação (20)

Programação Estruturada 2 - Aula 02
Programação Estruturada 2 - Aula 02Programação Estruturada 2 - Aula 02
Programação Estruturada 2 - Aula 02
 
Design Patterns na Programação de Jogo
Design Patterns na Programação de JogoDesign Patterns na Programação de Jogo
Design Patterns na Programação de Jogo
 
Qualidade de Software: Escrevendo Código Limpo
Qualidade de Software: Escrevendo Código LimpoQualidade de Software: Escrevendo Código Limpo
Qualidade de Software: Escrevendo Código Limpo
 
Android DevConference - SOLID no Android
Android DevConference - SOLID no AndroidAndroid DevConference - SOLID no Android
Android DevConference - SOLID no Android
 
TDD e Clean Code
TDD e Clean CodeTDD e Clean Code
TDD e Clean Code
 
Palestra Novidades da linguagem C# 6
Palestra Novidades da linguagem C# 6Palestra Novidades da linguagem C# 6
Palestra Novidades da linguagem C# 6
 
Sobrecarga operadores
Sobrecarga operadoresSobrecarga operadores
Sobrecarga operadores
 
Programando Melhor - Flisol
Programando Melhor - FlisolProgramando Melhor - Flisol
Programando Melhor - Flisol
 
Reduzindo o boilerplate code com Lombok
Reduzindo o boilerplate code com LombokReduzindo o boilerplate code com Lombok
Reduzindo o boilerplate code com Lombok
 
Exercícios da Aula de LAB 01
Exercícios da Aula de LAB 01Exercícios da Aula de LAB 01
Exercícios da Aula de LAB 01
 
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
 
Como conectar programas em linguagem java a bases de dados
Como conectar programas em linguagem java  a bases de dadosComo conectar programas em linguagem java  a bases de dados
Como conectar programas em linguagem java a bases de dados
 
Spock Framework 2
Spock Framework 2Spock Framework 2
Spock Framework 2
 
Técnicas de Refactoring
Técnicas de RefactoringTécnicas de Refactoring
Técnicas de Refactoring
 
Portfólio ADS- sem 4 - atividade em grupo
Portfólio ADS- sem 4 - atividade em grupoPortfólio ADS- sem 4 - atividade em grupo
Portfólio ADS- sem 4 - atividade em grupo
 
Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017
 
[CLPE] Design patterns com c#
[CLPE] Design patterns com c#[CLPE] Design patterns com c#
[CLPE] Design patterns com c#
 
Design OO
Design OODesign OO
Design OO
 
Vraptor
VraptorVraptor
Vraptor
 
TDC2016 Boas Práticas SQL em Banco Relacional para Desenvolvedores
TDC2016 Boas Práticas SQL em Banco Relacional para DesenvolvedoresTDC2016 Boas Práticas SQL em Banco Relacional para Desenvolvedores
TDC2016 Boas Práticas SQL em Banco Relacional para Desenvolvedores
 

Mais de Marcos Brizeno

Refatorando tudo! [Agile brazil 2017]
Refatorando tudo! [Agile brazil 2017] Refatorando tudo! [Agile brazil 2017]
Refatorando tudo! [Agile brazil 2017] Marcos Brizeno
 
GraphQL ou APIs RESTful - DevDay 2017
GraphQL ou APIs RESTful - DevDay 2017GraphQL ou APIs RESTful - DevDay 2017
GraphQL ou APIs RESTful - DevDay 2017Marcos Brizeno
 
Developer Experience como diferencial na Transformação Digital
Developer Experience como diferencial na Transformação DigitalDeveloper Experience como diferencial na Transformação Digital
Developer Experience como diferencial na Transformação DigitalMarcos Brizeno
 
Desventuras em série adotando microserviços
Desventuras em série adotando microserviçosDesventuras em série adotando microserviços
Desventuras em série adotando microserviçosMarcos Brizeno
 
Aprenda Elixir em um final de semana
Aprenda Elixir em um final de semanaAprenda Elixir em um final de semana
Aprenda Elixir em um final de semanaMarcos Brizeno
 
5 mitos sobre código bom
5 mitos sobre código bom5 mitos sobre código bom
5 mitos sobre código bomMarcos Brizeno
 
Padrões de projeto superestimados
Padrões de projeto superestimadosPadrões de projeto superestimados
Padrões de projeto superestimadosMarcos Brizeno
 
Abraçando a mudança com Código
Abraçando a mudança com CódigoAbraçando a mudança com Código
Abraçando a mudança com CódigoMarcos Brizeno
 
Práticas Ágeis Distribuidas
Práticas Ágeis DistribuidasPráticas Ágeis Distribuidas
Práticas Ágeis DistribuidasMarcos Brizeno
 
The fine art of slacking
The fine art of slackingThe fine art of slacking
The fine art of slackingMarcos Brizeno
 
Aplicando padrões de projeto em Ruby
Aplicando padrões de projeto em RubyAplicando padrões de projeto em Ruby
Aplicando padrões de projeto em RubyMarcos Brizeno
 
Comunidade e Carreira: Você Ganha Todos Ganham
Comunidade e Carreira: Você Ganha Todos GanhamComunidade e Carreira: Você Ganha Todos Ganham
Comunidade e Carreira: Você Ganha Todos GanhamMarcos Brizeno
 
Entrega Contínua - E Eu Com Isso?
Entrega Contínua - E Eu Com Isso?Entrega Contínua - E Eu Com Isso?
Entrega Contínua - E Eu Com Isso?Marcos Brizeno
 
The fine art of slacking
The fine art of slackingThe fine art of slacking
The fine art of slackingMarcos Brizeno
 
Programar #COMOFAS ? - Rails Girls Fortaleza
Programar #COMOFAS ? - Rails Girls FortalezaProgramar #COMOFAS ? - Rails Girls Fortaleza
Programar #COMOFAS ? - Rails Girls FortalezaMarcos Brizeno
 
Metaprogramação Ruby
Metaprogramação RubyMetaprogramação Ruby
Metaprogramação RubyMarcos Brizeno
 

Mais de Marcos Brizeno (18)

Refatorando tudo! [Agile brazil 2017]
Refatorando tudo! [Agile brazil 2017] Refatorando tudo! [Agile brazil 2017]
Refatorando tudo! [Agile brazil 2017]
 
GraphQL ou APIs RESTful - DevDay 2017
GraphQL ou APIs RESTful - DevDay 2017GraphQL ou APIs RESTful - DevDay 2017
GraphQL ou APIs RESTful - DevDay 2017
 
Developer Experience como diferencial na Transformação Digital
Developer Experience como diferencial na Transformação DigitalDeveloper Experience como diferencial na Transformação Digital
Developer Experience como diferencial na Transformação Digital
 
Desventuras em série adotando microserviços
Desventuras em série adotando microserviçosDesventuras em série adotando microserviços
Desventuras em série adotando microserviços
 
Aprenda Elixir em um final de semana
Aprenda Elixir em um final de semanaAprenda Elixir em um final de semana
Aprenda Elixir em um final de semana
 
5 mitos sobre código bom
5 mitos sobre código bom5 mitos sobre código bom
5 mitos sobre código bom
 
Padrões de projeto superestimados
Padrões de projeto superestimadosPadrões de projeto superestimados
Padrões de projeto superestimados
 
Abraçando a mudança com Código
Abraçando a mudança com CódigoAbraçando a mudança com Código
Abraçando a mudança com Código
 
Práticas Ágeis Distribuidas
Práticas Ágeis DistribuidasPráticas Ágeis Distribuidas
Práticas Ágeis Distribuidas
 
The fine art of slacking
The fine art of slackingThe fine art of slacking
The fine art of slacking
 
Aplicando padrões de projeto em Ruby
Aplicando padrões de projeto em RubyAplicando padrões de projeto em Ruby
Aplicando padrões de projeto em Ruby
 
Comunidade e Carreira: Você Ganha Todos Ganham
Comunidade e Carreira: Você Ganha Todos GanhamComunidade e Carreira: Você Ganha Todos Ganham
Comunidade e Carreira: Você Ganha Todos Ganham
 
Dubles de teste
Dubles de testeDubles de teste
Dubles de teste
 
Entrega Contínua - E Eu Com Isso?
Entrega Contínua - E Eu Com Isso?Entrega Contínua - E Eu Com Isso?
Entrega Contínua - E Eu Com Isso?
 
The fine art of slacking
The fine art of slackingThe fine art of slacking
The fine art of slacking
 
Programar #COMOFAS ? - Rails Girls Fortaleza
Programar #COMOFAS ? - Rails Girls FortalezaProgramar #COMOFAS ? - Rails Girls Fortaleza
Programar #COMOFAS ? - Rails Girls Fortaleza
 
Metaprogramação Ruby
Metaprogramação RubyMetaprogramação Ruby
Metaprogramação Ruby
 
Arquitetura Ágil
Arquitetura ÁgilArquitetura Ágil
Arquitetura Ágil
 

Último

CRUZADINHA - Leitura e escrita dos números
CRUZADINHA   -   Leitura e escrita dos números CRUZADINHA   -   Leitura e escrita dos números
CRUZADINHA - Leitura e escrita dos números Mary Alvarenga
 
apostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médioapostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médiorosenilrucks
 
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfPROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfHELENO FAVACHO
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...azulassessoria9
 
Slides sobre as Funções da Linguagem.pptx
Slides sobre as Funções da Linguagem.pptxSlides sobre as Funções da Linguagem.pptx
Slides sobre as Funções da Linguagem.pptxMauricioOliveira258223
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMHELENO FAVACHO
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...azulassessoria9
 
ATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇ
ATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇ
ATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇJaineCarolaineLima
 
Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)ElliotFerreira
 
o ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfo ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfCamillaBrito19
 
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...azulassessoria9
 
Construção (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãConstrução (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãIlda Bicacro
 
Atividade - Letra da música Esperando na Janela.
Atividade -  Letra da música Esperando na Janela.Atividade -  Letra da música Esperando na Janela.
Atividade - Letra da música Esperando na Janela.Mary Alvarenga
 
Historia da Arte europeia e não só. .pdf
Historia da Arte europeia e não só. .pdfHistoria da Arte europeia e não só. .pdf
Historia da Arte europeia e não só. .pdfEmanuel Pio
 
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdfLeloIurk1
 
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdfPROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdfMarianaMoraesMathias
 
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcanteCOMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcanteVanessaCavalcante37
 
planejamento_estrategico_-_gestao_2021-2024_16015654.pdf
planejamento_estrategico_-_gestao_2021-2024_16015654.pdfplanejamento_estrategico_-_gestao_2021-2024_16015654.pdf
planejamento_estrategico_-_gestao_2021-2024_16015654.pdfmaurocesarpaesalmeid
 
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfLeloIurk1
 
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdfReta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdfWagnerCamposCEA
 

Último (20)

CRUZADINHA - Leitura e escrita dos números
CRUZADINHA   -   Leitura e escrita dos números CRUZADINHA   -   Leitura e escrita dos números
CRUZADINHA - Leitura e escrita dos números
 
apostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médioapostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médio
 
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfPROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
 
Slides sobre as Funções da Linguagem.pptx
Slides sobre as Funções da Linguagem.pptxSlides sobre as Funções da Linguagem.pptx
Slides sobre as Funções da Linguagem.pptx
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
 
ATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇ
ATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇ
ATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇ
 
Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)
 
o ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfo ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdf
 
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
 
Construção (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãConstrução (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! Sertã
 
Atividade - Letra da música Esperando na Janela.
Atividade -  Letra da música Esperando na Janela.Atividade -  Letra da música Esperando na Janela.
Atividade - Letra da música Esperando na Janela.
 
Historia da Arte europeia e não só. .pdf
Historia da Arte europeia e não só. .pdfHistoria da Arte europeia e não só. .pdf
Historia da Arte europeia e não só. .pdf
 
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
 
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdfPROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
 
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcanteCOMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
 
planejamento_estrategico_-_gestao_2021-2024_16015654.pdf
planejamento_estrategico_-_gestao_2021-2024_16015654.pdfplanejamento_estrategico_-_gestao_2021-2024_16015654.pdf
planejamento_estrategico_-_gestao_2021-2024_16015654.pdf
 
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
 
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdfReta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
 

Clean Code: Princípios de desenvolvimento ágil e boas práticas de programação

  • 2. Quem sou eu. @marcosbrizeno brizeno.wordpress.com
  • 19. Nomes
  • 21. Revele sua intenção double calcula( double d1, double d2); int main() { double prProd = 17.99; double desc = 0.2; double valor = calcula(prProd, desc); cout << valor; return 0; } double calcula( double d1, double d2) { return d1 - (d1 * d2); }
  • 22. Revele sua intenção double calcula( double d1, double d2); int main() { // preço do produto double prProd = 17.99; // valor do desconto double desc = 0.2; // valor do produto com desconto double valor = calcula(prProd, desc); cout << valor; return 0; } // calcula o valor de um produto com desconto double calcula( double d1, double d2) { return d1 - (d1 * d2); }
  • 23. Mapa Mental double calcula( double d1, double d2); int main() { // preço do produto double prProd = 17.99; // valor do desconto double desc = 0.2; // valor do produto com desconto double valor = calcula(prProd, desc); cout << valor; return 0; } // calcula o valor de um produto com desconto double calcula( double d1, double d2) { return d1 - (d1 * d2); }
  • 24. Revele sua intenção int main() { // preço do produto double precoDoProduto = 17.99; // valor do desconto double desconto = 0.2; // valor do produto com desconto double valorComDesconto = calculaDesconto(precoDoProduto, desconto); cout << valor; return 0; } // calculo o valor de um produto com desconto double calculaDesconto( double d1, double d2) { return d1 - (d1 * d2); }
  • 25. Revele sua intenção int main() { double precoDoProduto = 17.99; double desconto = 0.2; double valorComDesconto = calculaDesconto(precoDoProduto, desconto); cout << valor; return 0; } double calculaDesconto( double d1, double d2) { return d1 - (d1 * d2); }
  • 27. Nomes Genéricos #Envia o boleto para ser descontado no banco def processa (boletoBancario): #Calcula o imposto total de um funcionário def calcula (funcionario): #Mostra o relatório de finanças def mostrar (): #Executa consultas na fila de espera def executar ():
  • 28. Nomes Genéricos #Envia o boleto para ser descontado no banco def descontarBoleto (boletoBancario): #Calcula o imposto total de um funcionário def calcularImposto (funcionario): #Mostra o relatório de finanças def mostrarRelatorio (): #Executa consultas na fila de espera def executarConsultasEmEspera ():
  • 29. Nomes Genéricos def descontarBoleto (boletoBancario): def calcularImposto (funcionario): def mostrarRelatorio (): def executarConsultasEmEspera ():
  • 31. Diferencie diferenças private double calculaDesconto( double d1, double d2); private void copiar(String s1, String s2); private boolean maiorQue( int n1, int n2);
  • 32. Diferencie diferenças private double calculaDesconto( double preco, double desconto); private void copiar(String fonte, String alvo); private boolean maiorQue( int referência, int numero);
  • 33. Dê nomes a tudo!
  • 34. Dê nomes a tudo! class Taxi { protected : int horaDaCorrida ; double quilometros ; public : double calcularValorCorrida() { if ( horaDaCorrida > 22 && horaDaCorrida < 5) { return quilometros * 3.7; } return quilometros * 2.9; } };
  • 35. Dê nomes a tudo! #define PRECO_BANDEIRA_2 3.7 #define PRECO_BANDEIRA_1 2.9 class Taxi { protected : int horaDaCorrida ; double quilometros ; public : double calcularValorCorrida() { if ( horaDaCorrida > 22 && horaDaCorrida < 5) { return quilometros * PRECO_BANDEIRA_2; } return quilometros * PRECO_BANDEIRA_1; } };
  • 36. Dê nomes a tudo! // opening and closing a file #include <iostream> #include <fstream> using namespace std; int main () { ofstream outfile; outfile.open( &quot;.// tmp //test.txt&quot; ); // >> i/o operations here << outfile.close(); return 0; } // opening and closing a file #include <iostream> #include <fstream> using namespace std; #define TMP_DIR &quot;.// tmp //&quot; int main () { ofstream outfile; string diretorio = TMP_DIR; diretorio.append( &quot;test.txt&quot; ); outfile.open(diretorio.c_str()); // >> i/o operations here << outfile.close(); return 0; }
  • 39. Única responsabilidade public void venderProduto(Vendedor vendedor, Produto produto) { // Verifica se o produto tem desconto for (Produto produtosComDesconto : ProdutosComDesconto) { if (produtosComDesconto.getId() == produto.getId()) { // Calcula o valor com desconto double valorFinal = produto.getPreco() - produto.getPreco() * VALOR_DESCONTO ; // Cria o boleto de pagamento Boleto boletoDePagamento = new Boleto(); boletoDePagamento.setNomeVendedor(vendedor.getNome()); boletoDePagamento.setValor(valorFinal); boletoDePagamento.imprimir(); } } // Se o produto não tiver desconto // Cria o boleto de pagamento Boleto boletoDePagamento = new Boleto(); boletoDePagamento.setNomeVendedor(vendedor.getNome()); boletoDePagamento.setValor(produto.getValor()); boletoDePagamento.imprimir(); }
  • 40. Única responsabilidade public void venderProduto(Vendedor vendedor, Produto produto) { // Verifica se o produto tem desconto for (Produto produtosComDesconto : ProdutosComDesconto) { if (produtosComDesconto.getId() == produto.getId()) { // Calcula o valor com desconto double valorFinal = produto.getPreco() - produto.getPreco() * VALOR_DESCONTO ; // Cria o boleto de pagamento criarBoletoDePagamento(vendedor.getNome(), valorFinal); } } // Se o produto não tiver desconto // Cria o boleto de pagamento criarBoletoDePagamento(vendedor.getNome(), produto.getPreco()); }
  • 41. Única responsabilidade public void venderProduto(Vendedor vendedor, Produto produto) { // Verifica se o produto tem desconto if (produtoTemDesconto(produto)) { // Calcula o valor com desconto double valorFinal = produto.getPreco() - produto.getPreco() * VALOR_DESCONTO ; // Cria o boleto de pagamento criarBoletoDePagamento(vendedor.getNome(), valorFinal); } // Se o produto não tiver desconto // Cria o boleto de pagamento criarBoletoDePagamento(vendedor.getNome(), produto.getPreco()); }
  • 42. Única responsabilidade public void venderProduto(Vendedor vendedor, Produto produto) { // Verifica se o produto tem desconto double valorFinal = produto.getPreco(); if (produtoTemDesconto(produto)) { // Calcula o valor com desconto // Cria o boleto de pagamento valorFinal = calcularDesconto(produto.getPreco()); } // Se o produto não tiver desconto // Cria o boleto de pagamento criarBoletoDePagamento(vendedor.getNome(), valorFinal); }
  • 43. Única responsabilidade public void venderProduto(Vendedor vendedor, Produto produto) { double valorFinal = produto.getPreco(); if (produtoTemDesconto(produto)) valorFinal = calcularDesconto(produto.getPreco()); } criarBoletoDePagamento(vendedor.getNome(), valorFinal); }
  • 45. Agrupar funções public void venderProduto( Vendedor vendedor, Produto produto) { double valorFinal = produto.getPreco(); if (produtoTemDesconto(produto)) { valorFinal = calcularDesconto(produto.getPreco()); } criarBoletoDePagamento(vendedor.getNome(), valorFinal); } public void criarBoletoDePagamento(String nomeVendedor, double valorProduto); public double calcularDesconto( double preco); public boolean produtoTemDesconto(Produto produto);
  • 47. Dê nomes a tudo! #define PRECO_BANDEIRA_2 3.7 #define PRECO_BANDEIRA_1 2.9 class Taxi { protected : int horaDaCorrida ; double quilometros ; public : double calcularValorCorrida() { if ( horaDaCorrida > 22 && horaDaCorrida < 5) { return quilometros * PRECO_BANDEIRA_2; } return quilometros * PRECO_BANDEIRA_1; } };
  • 48. Estruturas de Decisão #define PRECO_BANDEIRA_2 3.7 #define PRECO_BANDEIRA_1 2.9 class Taxi { protected : int horaDaCorrida ; double quilometros ; private : bool ehHorarioNormal() { return horaDaCorrida < 22 && horaDaCorrida > 5; } public : double calcularValorCorrida() { if (!ehHorarioNormal()) { return quilometros * PRECO_BANDEIRA_2; } return quilometros * PRECO_BANDEIRA_1; } };
  • 50. Estruturas de Decisão #define PRECO_BANDEIRA_2 3.7 #define PRECO_BANDEIRA_1 2.9 class Taxi { protected : int horaDaCorrida ; double quilometros ; private : bool ehHorarioNormal() { return horaDaCorrida < 22 && horaDaCorrida > 5; } public : double calcularValorCorrida() { if (!ehHorarioNormal()) { return quilometros * PRECO_BANDEIRA_2; } return quilometros * PRECO_BANDEIRA_1; } };
  • 51. Estruturas de Decisão #define PRECO_BANDEIRA_2 3.7 #define PRECO_BANDEIRA_1 2.9 class Taxi { protected : int horaDaCorrida ; double quilometros ; private : bool ehHorarioNormal() { return horaDaCorrida < 22 && horaDaCorrida > 5; } public : double calcularValorCorrida() { if (ehHorarioNormal()) { return quilometros * PRECO_BANDEIRA_1; } return quilometros * PRECO_BANDEIRA_2; } };
  • 53. Retornar nulo public double dividir( int dividendo, int divisor) { if (divisor == 0) { return -1; } return dividendo / divisor; }
  • 54. Retornar nulo public double dividir( int dividendo, int divisor) { if (divisor == 0) { return -1; } return dividendo / divisor; } public double dividir( int dividendo, int divisor) throws Exception { if (divisor == 0) { throw new Exception( &quot;Impossível dividir por zero&quot; ); } return dividendo / divisor; }
  • 56. Formatação public String getTabuleiro() { String string = &quot;&quot; ; for ( int i = 0; i < getAltura(); i++) { for ( int j = 0; j < getLargura(); j++) { string += tabuleiroEscondido [i][j];} if (i != tabuleiroEscondido . length - 1) { string += &quot;&quot; ; } } return string; }
  • 57. Formatação public String getTabuleiro() { String string = &quot;&quot; ; for ( int i = 0; i < getAltura(); i++) { for ( int j = 0; j < getLargura(); j++) { string += tabuleiroEscondido [i][j]; } if (i != tabuleiroEscondido . length - 1) { string += &quot;&quot; ; } } return string; }
  • 59. Repetição public void venderProduto(Vendedor vendedor, Produto produto) { // Verifica se o produto tem desconto for (Produto produtosComDesconto : ProdutosComDesconto) { if (produtosComDesconto.getId() == produto.getId()) { // Calcula o valor com desconto double valorFinal = produto.getPreco() - produto.getPreco() * VALOR_DESCONTO ; // Cria o boleto de pagamento Boleto boletoDePagamento = new Boleto(); boletoDePagamento.setNomeVendedor(vendedor.getNome()); boletoDePagamento.setValor(valorFinal); boletoDePagamento.imprimir(); } } // Se o produto não tiver desconto // Cria o boleto de pagamento Boleto boletoDePagamento = new Boleto(); boletoDePagamento.setNomeVendedor(vendedor.getNome()); boletoDePagamento.setValor(produto.getValor()); boletoDePagamento.imprimir(); }
  • 60. Repetição public class Imagem { public void moverImagem( int x, int y){ this .imagem.getRetangulo().getPontoX().set(x); this .imagem.getRetangulo().getPontoY().set(y); } }
  • 61. Repetição public class Imagem { public void moverImagem( int x, int y){ this .imagem.getRetangulo().getPontoX().set(x); this .imagem.getRetangulo().getPontoY().set(y); } }
  • 62. Repetição public class Imagem { public void moverImagem( int x, int y){ this .imagem.getRetangulo().getPontoX().set(x); this .imagem.getRetangulo().getPontoY().set(y); } } public class Imagem { public void moverImagem( int x, int y){ this .imagem.getRetangulo().mover(x, y); } }
  • 64.
  • 65. Métodos longos = muita responsabilidade!
  • 66. Muitos argumentos são sintomas de muitas responsabilidades!
  • 67. Argumento booleano grita que a função faz mais de uma coisa!
  • 68. Sentiu vontade de comentar? Refatore e depois comente!
  • 69. Se vai comentar, comenta DIREITO!
  • 71.
  • 74.
  • 78. Sobre o livro Robert C. Martin
  • 79. Bons programadores “ Você está lendo este livro por dois motivos. Primeiro, você é um programador. Segundo, você quer ser um programador melhor. Bom. Precisamos de melhores programadores.”
  • 83. Praticar é preciso “ Aprender a escrever um código limpo é uma tarefa difícil. Requer mais que conhecimento sobre princípios e padrões. Você precisa suar. Você precisa praticar e ver suas falhas.“
  • 85.
  • 87. Estudar sobre Padrões de Projeto!
  • 89. Estudar sobre Princípios de Design OO!
  • 93. Melhorar cada vez mais e mais
  • 94. Melhorar cada vez mais e mais