36. O que podemos fazer para
melhorar nossa produtividade?
http://www.flickr.com/photos/michigancommunities/5169810229/
37. Coloque mais
pressão!
O que podemos fazer para
melhorar nossa produtividade?
http://www.flickr.com/photos/michigancommunities/5169810229/
38. Coloque mais
pressão!
O que podemos fazer para
melhorar nossa produtividade?
Vamos contratar
mais pessoas...
http://www.flickr.com/photos/michigancommunities/5169810229/
52. O que é código limpo?
Bjarne Stroustrup Grady Booch Michael Feathers Ward Cunningham
Inventor do C++ Autor de importantes livros sobre Escritor e agile coacher Criador da Wiki, co-criador da
OO e co-criador da UML eXtreme Programming, etc
http://www.computerhope.com/people/pictures/bjarne_stroustrup.jpg, http://www.scientificamerican.com/media/inline/97DDD0F5-
DA2F-0971-82C7990D6586E990_1.jpg, http://upload.wikimedia.org/wikipedia/commons/c/c0/Cunningham2.jpg
53. O que é código limpo?
Elegante e eficiente.
Código limpo faz
bem uma coisa.
Bjarne Stroustrup Grady Booch Michael Feathers Ward Cunningham
Inventor do C++ Autor de importantes livros sobre Escritor e agile coacher Criador da Wiki, co-criador da
OO e co-criador da UML eXtreme Programming, etc
http://www.computerhope.com/people/pictures/bjarne_stroustrup.jpg, http://www.scientificamerican.com/media/inline/97DDD0F5-
DA2F-0971-82C7990D6586E990_1.jpg, http://upload.wikimedia.org/wikipedia/commons/c/c0/Cunningham2.jpg
54. O que é código limpo?
Elegante e eficiente. Simples e direto.
Código limpo faz Pode ser lido como
bem uma coisa. uma conversa.
Bjarne Stroustrup Grady Booch Michael Feathers Ward Cunningham
Inventor do C++ Autor de importantes livros sobre Escritor e agile coacher Criador da Wiki, co-criador da
OO e co-criador da UML eXtreme Programming, etc
http://www.computerhope.com/people/pictures/bjarne_stroustrup.jpg, http://www.scientificamerican.com/media/inline/97DDD0F5-
DA2F-0971-82C7990D6586E990_1.jpg, http://upload.wikimedia.org/wikipedia/commons/c/c0/Cunningham2.jpg
55. O que é código limpo?
Elegante e eficiente. Simples e direto. Parece ter sido
Código limpo faz Pode ser lido como escrito por alguém
bem uma coisa. uma conversa. que se importa.
Bjarne Stroustrup Grady Booch Michael Feathers Ward Cunningham
Inventor do C++ Autor de importantes livros sobre Escritor e agile coacher Criador da Wiki, co-criador da
OO e co-criador da UML eXtreme Programming, etc
http://www.computerhope.com/people/pictures/bjarne_stroustrup.jpg, http://www.scientificamerican.com/media/inline/97DDD0F5-
DA2F-0971-82C7990D6586E990_1.jpg, http://upload.wikimedia.org/wikipedia/commons/c/c0/Cunningham2.jpg
56. O que é código limpo?
Elegante e eficiente. Simples e direto. Parece ter sido Cada rotina que
Código limpo faz Pode ser lido como escrito por alguém você lê faz o que
bem uma coisa. uma conversa. que se importa. você espera.
Bjarne Stroustrup Grady Booch Michael Feathers Ward Cunningham
Inventor do C++ Autor de importantes livros sobre Escritor e agile coacher Criador da Wiki, co-criador da
OO e co-criador da UML eXtreme Programming, etc
http://www.computerhope.com/people/pictures/bjarne_stroustrup.jpg, http://www.scientificamerican.com/media/inline/97DDD0F5-
DA2F-0971-82C7990D6586E990_1.jpg, http://upload.wikimedia.org/wikipedia/commons/c/c0/Cunningham2.jpg
57. A regra do escoteiro
“ Sempre deixe a área de acampamento mais
”
limpa que já estava.
— Robert Stephenson Smyth Baden-Powell
http://www.flickr.com/photos/zoovroo/2751792596/
58. A regra do escoteiro
“ Sempre deixe a área de acampamento mais
”
limpa que já estava.
— Robert Stephenson Smyth Baden-Powell
Sempre deixe um código mais limpo que já estava.
http://www.flickr.com/photos/zoovroo/2751792596/
72. Difícil de ler, entender e pronunciar
class PedComp {
private Date prvEnt;
}
73. Difícil de ler, entender e pronunciar
class PedComp {
private Date prvEnt;
}
class PedidoCompra {
private Date dataPrevisaoEntrega;
}
74. for (int i = 0; i < 10; i++) {
t[i] += p[i];
}
75. Confuso e difícil de pesquisar
for (int i = 0; i < 10; i++) {
t[i] += p[i];
}
76. Confuso e difícil de pesquisar
for (int i = 0; i < 10; i++) {
t[i] += p[i];
}
for (int i = 0; i < 10; i++) {
totais[i] += precos[i];
}
77. Funções
• Devem ser pequenas
• Menores do que você imaginou
• Devem fazer apenas uma coisa
• Nível de identação não deve ser maior que 2
• Sem parâmetros é melhor, 2 é bom, evite 3
• Don’t Repeat Yourself (DRY)
78. public boolean validarSenha(String nomeUsuario, String senha) {
...
if (usuario.getSenhaAtual().equals(senha) {
return true;
}
usuario.bloquear();
return false;
}
79. public boolean validarSenha(String nomeUsuario, String senha) {
...
if (usuario.getSenhaAtual().equals(senha) {
return true;
}
usuario.bloquear();
return false;
}
Métodos não devem ter efeitos
colaterais
83. Comentários
• São úteis se forem colocados nos lugares certos
• Comentários não são atualizados, e por isso mentem e
não são confiáveis
• Comentários não fazem código ruim ficar melhor
84. // verifica se conta está usando cheque especial
if (conta.tipo.equals(Tipo.CORRENTE) && conta.saldo < 0) {
85. // verifica se conta está usando cheque especial
if (conta.tipo.equals(Tipo.CORRENTE) && conta.saldo < 0) {
Explique-se com código
if (conta.estaUsandoChequeEspecial()) {
86. /**
* Construtor da classe.
*/
public Lancamento() {
}
87. Sério?
/**
* Construtor da classe.
*/
public Lancamento() {
}
88. Sério?
/**
* Construtor da classe.
*/
public Lancamento() {
}
Ahhh tá! Achei que era o
/**
* Dia do mês. dia do século...
*/
private int diaDoMes;
92. Use controle de versão
try {
while (...) {
// adicionado por João das Couves
System.out.println(...);
}
} catch (SQLException e) {
// Autora: Maria Abadia
e.printStackTrace();
} finally {
// Fechando a conexão (Sebastião)
conexao.close();
}
93. Formatação
• Classes menores são mais fáceis de entender
• Conceitos relacionados devem ficar próximos
• Sempre idente bem o código
• Limite o tamanho de uma linha (sugestão de 120
caracteres)
• Combine um estilo de formatação entre a equipe
94. class Produto {
private int codigo;
private Fornecedor fornecedor;
private String descricao;
private Date dataUltimaCompra;
}
95. class Produto {
private int codigo;
private Fornecedor fornecedor;
private String descricao;
private Date dataUltimaCompra;
}
96. class Produto {
private int codigo;
private Fornecedor fornecedor;
private String descricao;
private Date dataUltimaCompra;
}
class Produto {
private int codigo;
private Fornecedor fornecedor;
private String descricao;
private Date dataUltimaCompra;
}
98. Use espaços entre operadores,
parâmetros e vírgulas
public double calcular(int a,int b,int c){
double total=numero+(valor*outroValor);
99. Use espaços entre operadores,
parâmetros e vírgulas
public double calcular(int a,int b,int c){
double total=numero+(valor*outroValor);
public double calcular(int a, int b, int c) {
double total = numero + (valor * outroValor);
100. Exceções
• Lance exceções ao invés de retornar código de erro
• Crie exceções com informações sobre o erro
• Evite criar métodos que retornam null
• Não passe null como parâmetro
103. Parece bom...
Cliente cliente = repositorioClientes.buscarPorCodigo(10);
if (cliente != null) {
notificarPendencia(cliente.getEmail());
}
Mas pode ficar melhor, se o método lançar
exceção ao invés de retornar null
Cliente cliente = repositorioClientes.buscarPorCodigo(10);
notificarPendencia(cliente.getEmail());
A &#xFA;nica coisa boa de c&#xF3;digo ruim:\nC&#xF3;digo sujo rende boas piadas sobre quem fez enquanto ele existir ;)\n
\n
os culpados somos n&#xF3;s ser&#xE1; apresentado mais a frente\n
os culpados somos n&#xF3;s ser&#xE1; apresentado mais a frente\n
os culpados somos n&#xF3;s ser&#xE1; apresentado mais a frente\n
os culpados somos n&#xF3;s ser&#xE1; apresentado mais a frente\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
A equipe fez uma grande bagun&#xE7;a\nBaixa produtividade - coisas que demoravam minutos para fazer, agora demoram horas, dias ou s&#xE3;o imposs&#xED;veis de serem conclu&#xED;das\nGerentes percebem um gap, e precisam tomar uma decis&#xE3;o\n
A equipe fez uma grande bagun&#xE7;a\nBaixa produtividade - coisas que demoravam minutos para fazer, agora demoram horas, dias ou s&#xE3;o imposs&#xED;veis de serem conclu&#xED;das\nGerentes percebem um gap, e precisam tomar uma decis&#xE3;o\n
A equipe fez uma grande bagun&#xE7;a\nBaixa produtividade - coisas que demoravam minutos para fazer, agora demoram horas, dias ou s&#xE3;o imposs&#xED;veis de serem conclu&#xED;das\nGerentes percebem um gap, e precisam tomar uma decis&#xE3;o\n
A equipe fez uma grande bagun&#xE7;a\nBaixa produtividade - coisas que demoravam minutos para fazer, agora demoram horas, dias ou s&#xE3;o imposs&#xED;veis de serem conclu&#xED;das\nGerentes percebem um gap, e precisam tomar uma decis&#xE3;o\n
A equipe fez uma grande bagun&#xE7;a\nBaixa produtividade - coisas que demoravam minutos para fazer, agora demoram horas, dias ou s&#xE3;o imposs&#xED;veis de serem conclu&#xED;das\nGerentes percebem um gap, e precisam tomar uma decis&#xE3;o\n
Mais press&#xE3;o nos devs - s&#xF3; piora a situa&#xE7;&#xE3;o, faz ainda mais c&#xF3;digo sujo, mais remendos, aumenta mais o custo, aumenta lentid&#xE3;o\nContratar mais pessoas - PR&#xD3;XIMO SLIDE\n
Mais press&#xE3;o nos devs - s&#xF3; piora a situa&#xE7;&#xE3;o, faz ainda mais c&#xF3;digo sujo, mais remendos, aumenta mais o custo, aumenta lentid&#xE3;o\nContratar mais pessoas - PR&#xD3;XIMO SLIDE\n
Mais press&#xE3;o nos devs - s&#xF3; piora a situa&#xE7;&#xE3;o, faz ainda mais c&#xF3;digo sujo, mais remendos, aumenta mais o custo, aumenta lentid&#xE3;o\nContratar mais pessoas - PR&#xD3;XIMO SLIDE\n
Contrata mais pessoas - novas pessoas precisam das antigas para entender o c&#xF3;digo. Depois de um tempo come&#xE7;am a ficar mais r&#xE1;pidos para criar mais c&#xF3;digo sujo\n
\n
\n
\n
\n
Falamos que vamos melhorar depois, mas nunca fazemos, e sabemos que nunca faremos\n
Como voc&#xEA; sabe que um c&#xF3;digo est&#xE1; ruim?\n
- R&#xED;gido - para incluir ou modificar uma &#xFA;nica coisa, tem que alterar v&#xE1;rios m&#xF3;dulos, v&#xE1;rias classes...\nVoc&#xEA; nunca sabe quantos m&#xF3;dulos precisa alterar, entao &#xE9; dif&#xED;cil estimar o esfor&#xE7;o.\n
coisas param de funcionar quando voc&#xEA; inclui ou altera uma outra coisa\nsistemas ficam inconfi&#xE1;veis. todos percebem que o sistema nao &#xE9; bom\n
M&#xF3;dulos que nao podem ser separados para usar em outros lugares (reutiliza&#xE7;&#xE3;o)\nDif&#xED;cil estimar, porque nunca se sabe se ser&#xE1; poss&#xED;vel reutilizar\n
nao comunica a intencao do desenvolvedor\n dificil ler, entender e mudar\n
\n
aten&#xE7;&#xE3;o aos detalhes, cuidado, simples, direto, sem duplica&#xE7;&#xE3;o, f&#xE1;cil de leitura, eleg&#xE2;ncia.\nC&#xF3;digo com estas qualidades &#xE9; f&#xE1;cil de manter e nos d&#xE1; valor verdadeiro e duradouro.\n
aten&#xE7;&#xE3;o aos detalhes, cuidado, simples, direto, sem duplica&#xE7;&#xE3;o, f&#xE1;cil de leitura, eleg&#xE2;ncia.\nC&#xF3;digo com estas qualidades &#xE9; f&#xE1;cil de manter e nos d&#xE1; valor verdadeiro e duradouro.\n
aten&#xE7;&#xE3;o aos detalhes, cuidado, simples, direto, sem duplica&#xE7;&#xE3;o, f&#xE1;cil de leitura, eleg&#xE2;ncia.\nC&#xF3;digo com estas qualidades &#xE9; f&#xE1;cil de manter e nos d&#xE1; valor verdadeiro e duradouro.\n
aten&#xE7;&#xE3;o aos detalhes, cuidado, simples, direto, sem duplica&#xE7;&#xE3;o, f&#xE1;cil de leitura, eleg&#xE2;ncia.\nC&#xF3;digo com estas qualidades &#xE9; f&#xE1;cil de manter e nos d&#xE1; valor verdadeiro e duradouro.\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
&#xC9; uma mentira. Promete fazer uma coisa, e faz outra de forma oculta.\n
&#xC9; uma mentira. Promete fazer uma coisa, e faz outra de forma oculta.\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
Prefira lan&#xE7;ar exce&#xE7;&#xE3;o a retornar null.\n
\n
\n
\n
\n
\n
\n
\n
p&#xFA;blicas est&#xE1;ticas e constantes\nprivadas est&#xE1;ticas e vari&#xE1;veis\nprivadas inst&#xE2;ncias e vari&#xE1;veis\nfun&#xE7;&#xF5;es\nSRP - classes devem ter uma, apenas uma raz&#xE3;o para ser modificada\n