Arquivo

Archive for the ‘programação’ Category

Você é realmente um bom desenvolvedor Java?

Para ser um bom desenvolvedor Java é preciso, acima de tudo, ter experiência. Em geral, os anos de mercado levam a boas práticas que fazem com que o código seja mais limpo, fácil de dar manutenção e mais simples de entender. No entanto, nem sempre isso é verdade. Estou acostumado a ver código de pessoas com muito tempo de programação que não possui uma boa estruturação e com erros básicos como, por exemplo, a criação de classes com baixa coesão.

Nesse post mostro algumas técnicas que você deve aprender (e algumas falhas que precisa evitar) para que suas aplicações sigam bons princípios e aproveitem ao máximo os recursos nativos que o Java pode te oferecer (não abordo recursos de frameworks ou bibliotecas). Todas as dicas estão relacionados a aspectos técnicos da linguagem, portanto não me prendi a outros fatores, como uso de recursos de IDE’s ou metodologias de desenvolvimento. Vamos a elas:

  1. Strings

O erro mais comum cometido por programadores que estão começando é a criação desenfreada de Strings. Em Java o objeto String é imutável, o que significa que uma vez criado, não pode ser modificado. Portanto, não cometa erros como o de abaixo, em que vários objetos são criados para gerar uma grande String com letras de ‘a’ a ‘j’, consumindo recursos de memória que poderiam estar livres. Observação: a partir do Java 1.6, a concatenação de Strings passou a ser feita através de StringBuilder de forma automática pelo Java, porém um novo objeto StringBuilder é criado e o método append() é chamado a cada concatenação, levando também a um grande desperdício de memória. Assim, use sempre StringBuffer ou StringBuilder quando for efetuar concatenações de Strings.

String todasAsLetras = "a";

// a cada iteração, um novo objeto String é criado
for(char letraAtual='b'; letraAtual<='j'; letraAtual++) {
   todasAsLetras = todasAsLetras + "-" + letraAtual;
}

System.out.println(todasAsLetras); // imprime a-b-c-d-e-f-g-h-i-j

Solução: use a classe StringBuffer ou StringBuilder.

  1. Operadores

A utilização de operador ternário deixa seu código menor e mais legível. Exemplo:

Leia mais

Conversão de números entre bases (binário, decimal, octal, hexadecimal)

Há alguns dias recebi e-mail de uma pessoa com um pedido para ajudar na conversão de números entre bases utilizando Java. Claro que não poderia ser utilizada nenhuma classe já existente na JVM, pois a ideia era criar um código que efetuasse a transformação de forma manual. Assim, até como uma forma de exercício mental, elaborei as conversões abaixo.

Atenção: você encontrará alguns trechos de código repetido, mas isso acontece porque quis fazer com que cada método (com algumas exceções) pudesse ser executado de forma atômica.

Decimal

Decimal para Binário

/**
* Converte decimal para binário. A regra é ficar dividindo o valor por 2, pegar o resto de cada divisão e inserir o valor da direita para a esquerda na String de
* retorno. O algoritmo é executado até que o valor que foi sucessivamente dividido se torne 0. Obs.: assume que o valor passado é inteiro positivo.
* Exemplo: 13
* 13/2 = 6 -> resto 1 -> Resultado: 1
* 6/2 = 3  -> resto 0 -> Resultado: 01
* 3/2 = 1  -> resto 1 -> Resultado: 101
* 1/2 = 0  -> resto 1 -> Resultado: 1101
*
* Resultado: 1101
*
* @param valor número decimal a ser convertido
* @return String contendo o valor em binário
*/
public static String converteDecimalParaBinario(int valor) {
   int resto = -1;
   StringBuilder sb = new StringBuilder();

   if (valor == 0) {
      return "0";
   }

   // enquanto o resultado da divisão por 2 for maior que 0 adiciona o resto ao início da String de retorno
   while (valor > 0) {
      resto = valor % 2;
      valor = valor / 2;
      sb.insert(0, resto);
   }

   return sb.toString();
}

Leia mais

Bibliotecas de Interface Rica no JSF 2

Aprenda um pouco do que é RIA (Rich Internet Application) e veja um comparativo entre as três soluções de bibliotecas de interface rica para JSF: PrimeFaces, RichFaces e ICEfaces.

Essa palestra foi apresentada no CCT de maio do CEJUG e teve como base um artigo de minha autoria, intitulado Bibliotecas de Interface Rica no JSF 2, que saiu na edição 114 da Revista Java Magazine.

VRaptor 3: aprenda em 5 minutos

Visão Geral

Esses dias me aprofundei nos estudos de VRaptor. Realmente o framework tem muita coisa legal e para aqueles que são acostumados a trabalhar com bibliotecas component-based como eu (no caso, programo em JSF diariamente), torna-se um desafio empregar uma abordagem action-based tão simples como a versão 3 propõe.

O VRaptor tem a grande vantagem de encapsular as principais classes básicas de Servlets, como HttpServletRequest, HttpServletResponse e Session e através dele a lógica de negócio do sistema é tratada por Controllers que o desenvolvedor deve criar. Para entender como funciona esse mecanismo, a imagem abaixo mostra o fluxo da requisição do usuário.

Passos da Requisição no VRaptor

Passos da Requisição no VRaptor.

Adaptado de http://blog.caelum.com.br/entenda-os-mvcs-e-os-frameworks-action-e-component-based/

Podemor ver que a requisição passa pelo Front Controller do framework que a redireciona para o Controller (anotado com @Resource) criado pelo desenvolvedor.

Características

Convenção sobre Configuração / Controllers

O VRaptor foca em simplicidade, portanto o desenvolvedor deve se acostumar com uma característica chave da tecnologia: a convençao sobre configuração. Por esse motivo, muitas das decisões a respeito de alguns aspectos do sistema são retiradas das mãos dos programador, o que na verdade tem um preço, já que limita um pouco algumas práticas que se planeje fazer, porém tem a vantagem de facilitar a padronização do código e evita as costumeiras configurações em arquivos XML vistas em outros frameworks.

Leia mais

Richfaces 4 x Richfaces 3.3.x – mudanças e melhorias

Se você usava o RichFaces 3.3.X no Jsf 1, agora vai ter que adotar o RichFaces 4, que é a opção compatível com o JSF 2. A biblioteca de interface rica tem muitas novidades e muitos componentes mudaram a nomenclatura ou foram substituídos por outros. Vamos às atualizações:

Novidades

  • Um conjunto completo de componentes com processamento ajax dividido em duas bibliotecas:
    • a4j: controles do ajax;
    • rich: componentes com ajax internamente.
  • Validação client-side, trazendo para o browser a JSR 303 Bean Validation;
  • Componente com mecanismo de fila para sequenciar eventos client-side que atende os requisitos de performance das aplicações JEE;
  • Componente do tipo push agora inclui integração com Java Messaging Service (JMS) e vários mecanismos de transporte baseados no suporte do browser;

Mudanças
Leia mais

JSF 2 – visão geral e novidades do framework

A versão 2 do Java Server Faces é significativamente melhor do que a versão 1 em vários aspectos. Trazendo, sobretudo, conceitos que foram incluídos anteriormente no JBoss Seam, a nova especificação possui inúmeras vantagens que facilitam a vida do desenvolvedor.

Vamos a um levantamento delas:

Mudanças do Core do JSF

  • Anotações nas classes substituíram várias entradas no faces-config.xml. Exemplos:
    • Managed Bean: @ManagedBean. Exemplo:

    Leia mais

Corrigindo o problema de Ajax no IE9 com JSF e Richfaces 3

Assim que saiu o Internet Explorer 9 começamos a ter inúmeros problemas com o RichFaces 3, especialmente com as requisições em Ajax. O problema está no javascript de terceiros usado pelo componente de interfaces ricas. Algumas pessoas mencionaram ter conseguido corrigir e divulgaram o método, entretanto outras fizeram o mesmo procedimento e não deu certo (como eu).

Segundo os desenvolvedores do RichFaces, eles estão muito atarefados com a versão 4.0 da biblioteca. Há previsão de sair uma versão 3.3.4 com as correções, mas sem prazo divulgado.

Dessa forma, a única solução que encontrei foi adicionar um filtro no web.xml para forçar o IE9 a trabalhar como a versão 8. O procedimento é muito simples e leva poucos minutos. Vamos a ele:

Leia mais