00244 995 186 336

Angola - Luanda / Morro Bento

Mose Place A Escolha Para O Sucesso

30/10/2016

Os 10 mandamentos do bom programador Java


Escrever bom código é o primeiro passo para ser bom programador. Existem algumas boas práticas relativas a como o código deve ser organizado, mas existem alguns princípios básicos que qualquer programador – por mais inexperiente que seja – deve saber e seguir.
1. Conheça e use as bibliotecas padrão
Existe um imenso ganho em conhecer a API padrão. Sobretudo os pacotes java.util java.util.concurrent ejava.io. A API de coleções é extremamente importante.
Conhecer a API padrão não só lhe dará um conhecimento profundo da linguagem e da plataforma mas também o poupará de implementar algoritmos complexos. Use os que a API oferece porque eles foram criados por engenheiros experientes e testados por milhares de pessoas em todo o mundo.
2. Minimize a acessibilidade dos membros das suas classes
Isto é simples. Declare todos os atributos de estado como private , mesmo quando você decidir que subclasses devem acesso a eles, nunca os declare protected. Declare métodos protected em vez. Declare os construtores privados e forneça métodos estáticos para construir o objeto (métodos-fábrica). Não coloque métodos modificadores (set) a não ser que precise deles. Coloque apenas os acessores (get). Para inicializar o objeto passe os atributos no construtor ou no método estático de fábrica.
As vantagens são inúmeras porque você estará aumentado a possibilidade de encapsular comportamento ao mesmo tempo que diminui a superfície exposta da sua classe.
3.Prefira composição em vez de herança
Se o seu objeto parece ser uma lista, não o faça estender List, em vez faça-o ter um List como atributo interno.  Se o seu objeto parece ser um usuário, talvez seja melhor que ele tenha um atributo usuário internamente.
Herança é um recurso poderoso, mas escaço. Uma vez que tenha usado o seu recurso de herança não mais o poderá alterar. Nunca. Portanto, adie o uso de herança o máximo possível.
4. Implemente criteriosamente o método equals para os seus objetos. Implemente também hashCodeetoString
Implementar equals é um pouco mais complexo do que parece. Sempre que equals for sobrescrito você precisa também sobrescrever hashCode já que dois estão relacionados. toString é bom implementar porque é muito util para debug e conversões do objeto para String.
5. Use Enum em vez de int
Utilize Enum em vez de constantes definidas com int.
O tipo Enum foi criado exatamente para isso, então use-o em seu beneficio.
Enum tem ainda a curiosa propriedade de poder servir para criar um verdadeiro Singleton em Java, contudo, evite singletons e prefira o uso do padrão Registry.
6. Prefira Interfaces para definir tipos, e apenas para isso.
Ao programar sempre defina as suas variáveis, retorno de métodos e parâmetros de métodos com interfaces. Ao definir hierarquias sempre comece por definir uma interface. Prefira a interface à classe abstrata. Utilize a classe abstrata como uma implementação padrão/ utilitária da interface, mas não para definir o tipo do objeto.
Nunca utilize interfaces para definir constantes. Isso é uma prática obsoleta. Prefira
Enum para esse tipo de funcionalidade.
7. Lide com exceções da forma certa
Não semeie codigo try-catch pelo seu sistema à toa. Faça-o apenas na fronteira da camada e use-o da forma certa. Não logue todas as exceções que se lembrar em todos os cantos do código. Deixe o try-catch no fronteira da camada tratar disso.
Use exceções não-verificadas a menos que esteja desenhando uma API ou camada que será usada por outros em muitos projetos. Use exceções verificadas sempre que a API estiver utilizando recursos de hardware, do sistema operacional ou outros que consumam recursos e/ou sejam lentos de inicializar ( por exemplo, threads e conexões de rede)
Nunca, nunca, ignore exceções. Nunca faça isso. Nunca.
Sempre documente as exceções que os seus métodos lançam. Que sejam de validação de parâmetros, quer sejam relativas à lógica interna do método.
8. Sempre verifique a validade dos parâmetros que recebe
Ao definir um método, defina que valores são válidos e quais não são válidos para cada parâmetro. Sempre que encontrar algum parâmetro inválido interrompa o funcionamento do método lançando uma exceção.
Faça a verificação no inicio do método para evitar alocar recursos que não serão usado e para evitar verificações repetidas no meio do código.
Mesmo quando os parâmetros veem de outros pontos do seu sistema, sempre faça a verificação. Encare isso como uma medida de segurança e não como um estorvo. Por exemplo, em um sistema web, mesmo que um codigo javascript tenha validado os campos do cadastro, faça uma nova verificação do lado do servidor.
9. Use o tipo certo para o trabalho
Não use double ou float a menos que saiba o que está fazendo.Sobretudo nunca use estes tipos para conter dados que representem valores monetários. Como 0.1 e 0.01 não são representáveis desta forma, mas são muito comuns em quantidades financeiras o seu sistema está votado a criar erros de arredondamento, que podem significar perder dinheiro real. Não faça isso.
Se quer fazer contas com valores exatos utilize BigDecimal. Para trabalhar com dinheiro use o padrão Money.
Não utilize Calendar para representar ponto no tempo, use Date ou long. Use Calendar apenas para fazer cálculos ou conhecer informações especificas da data, como por exemplo qual foi o dia da semana.
Principalmente nunca use String quando outro tipo é mais apropriado. Se esse tipo não existe, crie-o. Dê uma olhada no padrão Tiny Type para o ajudar.
10. Saiba implementar Comparable e Cloneable
Comparable indica que o objeto representa algo que pode ser ordenável, tal como datas, textos e números podem. É útil sobretudo quando você sente a necessidade de ter ou apresentar os objetos dessa classe em ordem. Contudo só pode ser usado se o objeto apenas suporta uma única forma de ordenação. Por exemplo, datas só podem ser ordenados por ordem cronológica, mas clientes podem ser ordenados por nome, data de nascimento, numero de comprar, valor das compras , etc.. Implemente Comparableapenas nas classes que só suportam um tipo de ordenação. Para os outros objetos ( como cliente) pode criar classes à parte para cada tipo de comparação, que implementem Comparator.
Cloneable indica que o objeto pode ser copiado. É preciso ter cuidado ao implementar Cloneable. Você só deve implementar Cloneable quando tiver a certeza que isso não terá efeitos secundários. Por exemplo, se a sua classe não é final e implementar Cloneable as classes filhas terão que sobrescrever esse método. O problema é que elas podem se esquecer de fazer isso, e você terá o problema de ao clonar um objecto da classe filha obter um objeto da classe pai. Em vez de Cloneable considere implementar um construtor de cópia. Um construtor de cópia é um construtor que recebe um objeto da mesma classe e copia o estado desse objeto. Aqui também é preciso ter muito cuidado para não fazer os dois objetos partilhares o mesmo estado. Em caso de dúvida não implemente Cloneable.

Nenhum comentário:
Write comentários

'; (function() { var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true; dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js'; (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq); })();
'; (function() { var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true; dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js'; (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq); })();
Oferecemos soluções para o seu negócio ganhar visibilidade e crescer. Siga-nos no twitter Clicando Aqui
Receba Aulas,livros, novidades e todas actualizações recentes