Ir para conteúdo
Entre para seguir isso  
Piikachu

Aprende-se a programar bem...

Recommended Posts

Piikachu    0
Piikachu

Aprende-se a programar bem sabendo o que não se deve fazer

 

 

1. Não comentar o código

 

Conclusão: será um código único, porque só você vai entender;

Solução: comente o essencial, explique para que serve cada método, as principais variáveis, explique um algoritmo, faça uma pequena descrição no início de cada classe.

 

 

2. Não usar nomes apropriados para variáveis, métodos e classes

 

Exemplo:

public class A extends B {  
   private int h;  
   public int go() {  
       return h;  
   }  
}  

 

Conclusão: você, ao ler este código, provavelmente não entendeu muita coisa. O que a classe A representa? E a B? E... ?

Solução: utilize nomes apropriados para variáveis, métodos e classes, utilize camelCase (a segunda palavra começa com letra maiúscula) e também o padrão JavaBeans para métodos set, get e is, como por exemplo: setPropriedade(), getNumero(), isPositivo();

 

Exemplo:

public class Calculadora {  
   private int numeroA;  
   private int numeroB;  

   public int add(int a, int  {  
       return a + b;  
   }  
   //sets e gets usando o padrão JavaBeans          
} 

 

 

3. Ser totalmente dependente de uma IDE (Integrated Development Environment - Ambiente de Desenvolvimento Integrado)

 

Conclusão: isso é um grave erro, pois você estará passando por cima de vários conceitos que estão nos códigos que uma IDE gera para você e estará deixando de aprender muitas coisas. Além disso, se você só souber usar a programação visual da IDE, ficará restrito, uma vez que existem muitas outras bibliotecas gráficas que poderiam ser mais adequadas ao seu projeto.

Solução: utilize uma IDE, mas saiba o que acontece no código gerado por ela.

 

 

4. try { ... } catch(Exception e) { }

 

Conclusão: se der um erro em uma aplicação imensa, o programador vai passar dias procurando-o.

Solução: pelo menos introduza um e.printStackTrace() na cláusula catch para exibir o rastreamento da pilha.

 

 

5. Deixar objetos voando no heap à toa

 

Exemplo:

Dog a = new Dog();  
Dog b = new Dog();  
b = a;  

 

Conclusão: temos dois objetos e somente um está sendo referenciado, ou seja, temos um objeto perdido no heap.

Solução:

 

Dog a = new Dog();  
Dog b = a;

 

 

6. Tudo é public

 

Exemplo:

class A {  
   public int x = 7; //deveria ser private  
}  
public class Teste {  
   public static void main(String[] args) {  
       A a = new A();  
       a.x = 5; //Nãoooooo  
   }  
}  

 

Conclusão: Isso é o que chamamos de alto acoplamento, ou seja, as classes conseguem modificar os atributos uma das outras diretamente.

Solução: coloque as variáveis como private e use métodos sets e gets para manipulação dos dados dessas variáveis.

 

 

7. Tentar programar no estilo procedural em uma linguagem Orientada a Objetos

 

Muito comum em quem está começando a entrar no mundo dos objetos. Dois exemplos já foram citados aqui: os itens 5 e 6.

Conclusão: se enquanto você estiver programando surgir dúvidas se está fazendo da maneira Orientada a Objetos, você tem grandes chances de estar tentando programar da maneira procedural. Mas, não encare isso como um erro grave, pois faz parte do processo de aprendizagem.

Solução: estudar mais os conceitos de programação Orientada a Objetos, como encapsulamento, herança, polimorfismo, etc. E, além disso, procure entender alguns projetos feitos por programadores mais experientes que você.

 

 

8. Tenho uma classe que faz tudo

 

- Nossa João, fiz uma classe que faz de tudo, adiciona dados no bancos PostgreSQL e MySQL separadamente, grava em arquivo e armazena os dados!!! - disse Mariazinha

- Ahhhhh meuuuuuu!!!!! - eu respondo

 

Conclusão: um lixo de classe, pois possui baixíssima coesão.

Solução: separe sua aplicação em classes bem definidas, visando a uma alta coesão, ou seja, cada classe dá suporte a um único e bem definido papel ou responsabilidade.

 

 

9. Uma beleza de busca

 

Outro dia, um colega me mostra esse código que ele havia feito:

public boolean busca(int[] a, int nProcurado) {  
   boolean achei = false;  
   for (int i = 0; i < a.size; i++) {  
       if (nProcurado == a[i]) {  
           achei = true;  
       }  
   }  
   return achei;  
}  

 

Conclusão: repare que se o dado procurado estiver no índice 0, o loop ainda vai continuar em execução até terminar de analisar o array! Imagine se este array tivesse cem mil posições. E, além disso, retorna um booleano. Ah legal, se retornar true, eu vou saber que o número está lá, mas não saberei a posição.

Solução:

 

public int busca(int[] a, int nProcurado) {  
   boolean achei = false;  
   int i = 0;  
   while (!achei && i < a.size) {  
       if (nProcurado == a[i]) {  
           achei = true;  
       }  
       else {  
           i++  
       }  
   }  
   if (!achei) {   
       i = -1;     
   }  
   return i;  
}  

 

É um código maior, mas muito mais eficiente.

 

 

10. Esquecer de utilizar o modificador syncronized em programas que usem Threads

 

Suponha um método de uma loja virtual:

 

public String comprarProduto(String nomeProduto) {  
   Conexao c = new Conexao(); //cria uma conexão com um banco de dados   
   int estoque = c.pegarEstoque(nomeProduto); //recebe o estoque do produto  
   if (estoque > 0) {  
       estoque--;  
       c.atualizaEstoque(nomeProduto, estoque); //atualiza no banco                  
       return "sucesso";  
   else {  
       return "semEstoque";  
   }  
} 

 

Cada cliente pode ser visto como uma thread que, em dado momento pode realizar uma compra. Se João e Mariazinha por infelicidade do destino compram o mesmo produto no mesmo momento, pode acontecer do estoque ficar negativo!!!

Conclusão: os métodos e/ou trechos não sincronizados podem ser acessados por vários threads ao mesmo tempo.

Solução: para sincronizar, basta marcar os métodos e/ou trechos problemáticos com o modificador syncronized.

 

É galera, os códigos de exemplo foram feitos em JAVA, mas esses conceitos podem ser aplicados em qualquer linguagem com suporte a POO. ;)

 

Artigo por: João Sávio C. Longo

Fonte: JavaFree.org

Compartilhar este post


Link para o post
Compartilhar em outros sites
Dark Skyllen    7
Dark Skyllen

Nossa, perfeito. Talves um dos melhores artigos aqui sobre POO, a área realmente necessitava de artigos como este.

 

Ótimo artigo Piikachu,

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites
the_labrax    0
the_labrax

Muito bom.

(só faltou um ponto e vírgula no código solução do 9, mas nao importa)

 

Falou

Compartilhar este post


Link para o post
Compartilhar em outros sites
Eu Sou O Cara    0
Eu Sou O Cara

ah, não acho que só se deva comentar o essencial

porque se você quer achar algo mais rápido, é mais fácil identificar

//funcao de soma

do que

int soma(int a, int B)

{

return a+b;

}

isso é um exemplo simples, imagina se é um código mais complementado

Compartilhar este post


Link para o post
Compartilhar em outros sites
Bogos    0
Bogos

Descordo de alguns itens citados. Podem entrar em contradição com os padrões utilizados pelo método de desenvolvimento utilizado, como por exemplo uma quantidade desnecessária de comentários que devem ser utilizados com cautela e também a questão de métodos publicos, protegidos e privados.

Varia-se de empresa para empresa, método para método e programador para programador.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Dark Skyllen    7
Dark Skyllen
Descordo de alguns itens citados. Podem entrar em contradição dos padrões utilizados pelo método de desenvolvimento utilizado, como por exemplo uma quantidade desnecessária de comentários que devem ser utilizados com cautela e também a questão de métodos publicos, protegidos e privados.

Varia-se de empresa para empresa, método para método e programador para programador.

 

Quanto à parte dos comentários, concordo com você. Mas referente à parte de métodos, existe um "padrão" para a declaração de tais métodos, mas é claro, nem todas as empresas, nem programadores seguem esse padrão.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Piikachu    0
Piikachu

Cara, quanto a parte dos comentários, não é específico pra todas as linguagens, até porque em JAVA, existe um outro "compilador" que gera a documentação do código, e com os comentários ele descreve cada método e cada parâmetro, etc... Aí depende de cada linguagem e como funciona a documentação...

 

Atenciosamente,

Piikachu.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Baxnie    8
Baxnie

Comentários são extremamente importantes. Já ocorreu de ficar 2 meses sem mexer em um código, quando voltei, não me lembrava mais direito como funcionava, alguns comentários teriam ajudado bastante.

 

public int busca(int[] a, int nProcurado) {  
   for(int i = 0; i < a.size; i++)
       if (nProcurado == a[i]) 
           return i;
   return -1;  
}

Compartilhar este post


Link para o post
Compartilhar em outros sites
Bogos    0
Bogos

Comentários não são víceras inúteis. São importantes, mas não se deve comentar cada loop, cada if, cada while dentro de um script. Pra isso existem documentações. Mas é aquela coisa como eu disse acima, varia-se de programador para programador. Eu como profissional que sou hoje utilizo comentários curtos e em momentos indispensáveis (scripts altamente complexos e grandes por ex.).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça login para comentar

Você vai ser capaz de deixar um comentário após fazer o login



Entrar Agora
Entre para seguir isso  

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×