Java: Identificadores e JavaBeans

Os temas abordados nesse post serão:
  1. Nomes válidos para identificadores (nomes de classes, métodos, variáveis, etc.) na linguagem Java (baseado na versão 1.6).
  2. Convenções de nomenclatura dos identificadores.
  3. Padrões JavaBeans.

1 - Nomes válidos para identificadores
  • Iniciam por letras, $(cifrão) ou _(underscore). Numca iniciam por números.
  • Após a primeira letra, qualque combinação alfanumérica e dos símbolos $ e _ é válido.
  • Não possuem limite de tamanho.
  • Não são permitidos a utilização de palavras chave da linguagem para identificadores (ver tabela 1 para ver todas as palavras reservadas Java).
  • Identificadores são case sensitive.
Nomes válidos para identificadores:
   int $abc | int abc | int _abc | int $ab2 | int $__$$__$$ | int $ | int _ | int _123
Nomes inválidos para identificadores:
   int 2abc | int do | int ab c | int :acdc

Tabela 1(Retirada da documentação da Oracle)
abstractcontinuefornewswitch
assert***defaultgoto*packagesynchronized
booleandoifprivatethis
breakdoubleimplementsprotectedthrow
byteelseimportpublicthrows
caseenum****instanceofreturntransient
catchextendsintshorttry
charfinalinterfacestaticvoid
classfinallylongstrictfp**volatile
const*floatnativesuperwhile

*não utilizado
**adicionado na versão 1.2
***adicionado na versão 1.4
****adicionado na versão 5.0


As palavras true, false e null podem parecer palavras chave, mas eles são realmente literais, que são as representações de dados dentro do código fonte.

2 - Convenções de nomenclatura dos identificadores.
2.1 - Classes e Interfaces
As classes e interfaces tem o seguinte padrão de nomenclatura:
  • A primeira letra deve ser maíscula. Se mais de uma palavra formam o nome, a primeira letra de cada palavra deve ser maíscula. Esse padrão de escrita é conhecimento como CamelCase.
  • Para classes, os nomes são tipicamente substantivos enquando para interfaces são adjetivos.
    Exemplos de nomes de classes:

     Carro
     AstonMartin
     Bicicleta

    Exemplos de nomes de interfaces
     Conversivel
     Motorizado
  • A classe ou interface deve ter o mesmo nome do arquivo fonte. Por exemplo, um arquivo fonte chamado Carro.java, deve conter a classe Carro.

2.2 - Métodos
Os métodos das classes e interfaces possuem o padrão abaixo:
  • A primeira letra deve ser minúscula, e as demais palavras que compõe o nome do método seguem o padrão camelCase. Além disso, os nomes normalmente devem ser pares de verbos e substantivos.
  • Exempos de nomes de métodos:
      getVelocidadeAtual
      trocarMarcha
      reduzirVelocidade
2.3 - Variáveis
O padrão de nomenclatura de váriaveis é:
  • Assim como nos métodos, a primeira letra é minúscula e segue o padrçao camelCase para as demais palavras que compõem o identificador.
  • A Oracle recomenda que esses nomes sejam curtos e significativos, e que soe bom para nós.
  • Alguns exemplos de nomes de variáveis:
      velocidadeAtual
     velocidadeMaxima
     capacidadeTanque
     qtdeGasolinaDisponivel
3 - Padrões sobre JavaBeans
A especificação JavaBeans se destina a ajudar os desenvolvedores a criar componentes Java que podem ser facilmente utilizados por outros desenvolvedores em uma ferramenta de desenvolvimento integrado (IDE's como o Eclipse ou NetBeans).
JavaBeans são classes Java que possuem atributos(variáveis) de escopo privado, e para  que possamos acessá-las através de outras classes eles devem ter métodos públicos que nos forneçam este acesso. Os métodos que retornam o valor desses atributos são chamados de métodos getters, e os métodos que nos permitem alterar o valor desses atributos são chamados de métodos setters.
As regras de nomenclatura são as seguintes:
  • Se a variável não é do tipo boolean, o método getter dela deve começar com o prefixo get, se for booleano deve começar com is. Esses métodos possuem valor de retorno e não recebem parâmetros, sendo o tipo de retorno igual ao da variável que se deseja obter o valor. Por exemplo, public double getVelocidadeMaxima() é um método getter válido para uma variável  double velocidadeMaxima, não sendo obrigatorio que você tenha uma variável velocidadeMaxima. Para uma variável do tipo booleano, um método getter válido seria isVeiculoEsportivo.
  • Os métodos setters são iguais para todos os tipos de variáveis. Iniciam sempre pelo prefixo set. Métodos setters não possuem valor de retorno e recebem por parâmetro uma variável do mesmo tipo do atributo existente na classe. Por exemplo, para a variável double velocidadeMaxima, um método setter válido seria public void setVelocidadeMaxima(double velocidadeMaxima).
  •  Esses métodos tem por modificar de acesso public.
  • A especificação JavaBeans traz suporte a eventos, o que permite que componentes informem uns aos outros quando alguma coisa ocorre através de listeners. Eventos são amplamente utilizados em aplicações Desktop, por exemplo para que componentes sejam informados quando um clique num botão da tela ou do mouse ocorre.
  • O padrão de nomenclatura de eventos é a seguinte. Para registrar os listeners, deve ser utilizado o prefixo add seguido do nome do listener. Por exemplo, um listener para saber quando o nível de óleo estiver baixo teria a seguinte assinatura public void addAvisoNivelDeOleoListener
  • O nome do listener sempre deve terminar por Listener. Exemplos: AvisoPortaAbertaListener, GasolinaNaReservaListener.
  • Para remover um listener, o padrão é usar o prefixo remove acompanhado do seu nome. Por exemplo, para remover o listener que avisa sobre o nível de óleo, a assinatura do método seria removeAvisoNivelDeOleoListener.
  • O tipo de listener a ser adicionado ou removido, é o tipo passado por parâmetro ao método.
Exemplo de uma classe de acordo com os padrões JavaBeans:
public class Veiculo {
   private Integer velocidade;
   private String nomeCarro;
   private List acessorios;
   private boolean conversivel;
   //Métodos getters
   public Integer getVelocidade(){
      return velocidade;
   }
   public String getNomeCarro(){
      return nomeCarro;
   }
   public List getAcessorios(){
      return acessorios;
   }
   public boolean isConversivel(){
      return conversivel;
   }
   //Métodos setters
   public void setVelocidade(Integer velocidade){
      this.velocidade = velocidade;
   }
   public void setNomeCarro(String nomeCarro){
      this.nomeCarro = nomeCarro;
   }
   public void setAcessorios(List acessorios){
     this.acessorios = acessorios;
   }
   public void setConversivel(boolean conversivel){
     this.conversivel = conversivel;
   }

   //Listeners
   public void addAvisoNivelDeOleoListener

   (AvidoNivelGasolinaListener listener){
      //...código a ser executado quando evento ocorrer
   }
   public void removeAvisoNivelDeOleoListener

   (AvidoNivelGasolinaListener listener){
      //...código a ser executado
   }
}


Material de referência:
Oracle Keywords
Especificação JavaBeans
Java Code Conventions
Guia de estudo para certificação OCJP

Instalação e Configuração SDK Android

Mobilidade! Uma palavra que vem ganhando cada vez mais notoriedade e importância no mundo, afinal todos tem um celular e cada dia mais pessoas também possuem um tablet. Então esse é um ótimo motivo para aprender programação para dispositivos móveis.
Então vamos aprender como desenvolver aplicativos com a SDK Android, que está se tornando o principal sistema operacional para dispositivos móveis. Motivo para essa popularidade são muitos, vamos a alguns deles:
  • Plataforma open source
  • A linguagem de programação é java
  • Sistema altamente personalizavel
  • O Android é mantido por um grupo de mais de 80 empresas de tecnologia, que formam a Open Handset Alliance, como Google, Motorola, Sony Ericson, Dell, Intel. A lista pode ser conferida aqui
  • Documentação ampla
  • O plugin Android Development Tools (ADT) para a IDE eclipse, desenvolvido pela própria equipe do Android.
Premissas básicas para iniciar o desenvolvimento: você sabe programação Java e tem um Java Development Kit (JDK) atualizada instalada na sua máquina, além de ter a IDE eclipse, que possue o plugin ADT para facilitar a vida do desenvolvedor.

Vamos ao que interessa, configurar o ambiente para inciar o desenvolvimento!
  1. O primeiro passo o download e a instalação da SDK. Baixe a SDK Android, de acordo com seu sistema operacional. Instale, preferencialmente, na pasta raiz (C:\Android\android-sdk, por exemplo). Antes de clicar em Finish, desmarque a opção Start SDK Manager.
  2.  O que foi instalado ainda não inclui a SDK propriamente dia, foi instalado o SDK Manager, por onde serão feitos os downloads de API's, imagens, etc. Mas esse download vamos fazer pelo eclipse. Portanto, abra o eclipse e faça o download do plugin ADT. Menu Help > Install New Software. Clique no botão Add..., coloque o nome que desejar para o repositório e adicione a seguinte URL: http://dl-ssl.google.com/android/eclipse/.Clique em OK.
  3. Marque a opção Android Development Tools (conforme figura abaixo), e clique em Next.
     
     
  4.  Os próximos passos, para finalizar a instalação do ADT, é aceitar os termos de licença e reiniciar o eclipse quando solicitado (ao final da instalação).
  5. Reiniciado o eclipse, você deve indicar a pasta de instalação da SDK, indo em Window > Preferences > Android, clicar no botão Browse..., e selecionar a pasta indicada na instalação do passo 1 (C:\Android\android-sdk, no nosso exemplo), para finalizar clique em OK.
  6. Metade do processo está feito, agora tem que ser feito o download das API's. Para isso, vá em Window > Android SDK and AVD Manager, clique em Available Packages e marque as opções que deseja fazer download. Como estamos começando com o desenvolvimento, vou instalar todas as packages disponíveis, pois elas podem ser removidas por esse mesmo gerenciador (na aba Installed packages). 
  7. Finalizado o download, o ambiente está pronto para desenvolvimento.
A partir dessa configuração é possível iniciar o desenvolvimento para Android. Um livro em português abordando todas essas questões é o Google Android - 2° edição, da editora Novatec e de autoria de Ricardo R. Lecheta. Apresentarei aqui, nos próximos posts, mais algumas dicas sobre desenvolvimento Android, como a configuração dos simuladores de dispositivos móveis Android, criação de um pequeno projeto, banco de dados do Android, utilização de serviços do Google (Google Maps, por exemplo).


Google App Engine + JSF 2 + PrimeFaces

Continuando a série GAE, o post agora é sobre inserir o PrimeFaces em um projeto no GAE.
Aos que chegaram agora, para saberem como chegar até aqui, é só ver os os outros posts do blog que abordam o tema. Lembrando que a IDE usada é o eclipse. Para ver os posts anteriores, pode clicar aqui.

O PrimeFaces é uma implementação do JSF que vem aumentando de popularidade, comparando-a com os concorrentes mais famosos (RicheFaces, IceFaces). Essa evolução pode ser notada nesse gráfico do Google Trends. O showcase é bastante completo, a documentação é abrangente, tem fórum ativo, possui uma implementação para dispositivos móveis baseado no framework jQuery Mobile, vários temas disponíveis para utilização. Também é possível ver o showcase do PrimeFaces no próprio GAE.

Vamos ao que interessa , como colocar no ar a aplicação com o Primefaces!
Primeiro, faça o download do jar e coloque ele na pasta lib do projeto(projeto/war/WEB-INF/lib). A versão utilizada no tutorial será versão 2.2.1. Para funcionar, o PrimeFaces só precisa que as libs JSF estejam  no projeto (jsf-api e jsf-impl), que já estão na pasta lib.

Feito isso, para testar o funcionamento do primefaces, altere o arquivo login.xhtml. Veja um exemplo de como fica o arquivo.


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.prime.com.tr/ui">
<h:head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 <title>JSF 2 + PrimeFaces</title>
</h:head>
<h:body>
<f:view contentType="text/html">
<h:form>
 <p:messages />
 <p:accordionPanel autoHeight="false">
  <p:tab title="Login no JSF">
   <h:panelGrid columns="2">
    <h:outputText value="E-mail:" />
    <h:inputText value="#{loginMB.mail}" required="true"
    requiredMessage="Preenchimento do e-mail obrigatório" />

    <h:outputText value="Senha:" />
    <h:inputSecret value="#{loginMB.senha}" required="true"
    requiredMessage="A senha não deve ser vazia" />
 
    <p:commandButton value="Ok - Primefaces"
    actionListener="#{loginMB.autenticar}" ajax="false" />
   </h:panelGrid>
  </p:tab>
 </p:accordionPanel>
</h:form>
</f:view>
</h:body>
</html>

Veja algumas telas do PrimeFaces funcionando.


O projeto de exemplo também pode ser visto rodando no GAE nesse link.

Por hoje é só, mas em breve mais algumas coisas sobre o PrimeFaces, JSF 2 e etc.

Google App Engine + JSF 2

Bom, eu ía escrever um post de como usar o JSF 2 com o GAE, mas encontrei um projeto pronto.

Já adiantando, configurar JSF no GAE é bem chato de ser feito, mas com esse projeto base é só fazer o download, importar para o eclipse e então fazer o desenvolvimento a partir dele.

O referido projeto encontra-se no site da YaW Tecnologia, e o download dele pode ser feito aqui.

Nos próximos posts, colocarei aqui informações sobre o Primefaces.

Fazendo deploy de uma aplicação no Google App Engine

No post anterior mostrei como criar uma primeira aplicação no Google App Engine (GAE). Agora vamos ver como é simples fazer o deploy da aplicação para a nuvem.

Existem duas formas de fazer o deploy de uma aplicação para o ambiente do GAE, uma delas é através do prompt de comandos e a outra é pelo plugin do eclipse.
Nesse link você tem a documentação do Google para essa tarefa, mas mesmo assim eu mostrarei aqui como fazer. Lembrando que a IDE usada é o eclipse 3.7 (Indigo), e a versão da SDK do Google é a 1.5.2.

Primeiro você deve configurar o arquivo appengine-web.xml, que está localizado em war/WEB-INF.
O arquivo xml deve estar da seguinte maneira:


<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<application>[id_aplicacao]</application>
<version>1</version>

<!-- Configure java.util.logging -->
<system-properties>
<property name="java.util.logging.config.file" value="WEB-

INF/logging.properties"/>
</system-properties>

</appengine-web-app>


No lugar de [id_aplicacao], deve ser colocado o nome da aplicação que você criou no GAE (vejo esse post para ver como criar uma aplicação).

Para fazer o deploy é preciso ter feito login na sua conta Google dentro do eclipse, para isso basta clicar no canto superior esquerdo do eclipse, sobre Sign in to Google.
 Ao clicar, vai abrir uma janela de autenticação do Google Accounts, basta fazer o login normalmente e conceder acesso ao ecplise aos produtos Google listados (geralmente Google Code e Google App Engine).

Após o login, na aba de Project Explorer, clique com o botão direito sobre a aplicação, em seguida em Google > Deploy to App Engine. Vai abrir uma janela onde deve ser selecionado o projeto que está na sua máquina e que será enviado ao GAE (ele já vem com o nome do projeto no qual você clicou com o botão direito). Agora é só clicar no botão deploy, esperar o andamento do deploy. Se algum erro acontecer irá aparecer uma janela no eclipse informando detalhes do erro, caso contrário, no console do eclipse, a última mensagem será Deployment completed successfully.

Para testar a aplicação, acesse https://[id_aplicacao].appspot.com/. A minha aplicação de teste é https://simpleapplicationjsf.appspot.com/.


Em breve mais um pouco sobre o GAE, e sobre integração entre Google App Engine e JSF 2 e Primefaces.

Criando uma aplicação do Google App Engine no Eclipse 3.7 (Indigo)

O Google App Engine, segunda a definição da própria empresa:
O Google App Engine oferece um conjunto completo de desenvolvimento que utiliza tecnologias familiares para criar e hospedar aplicativos da web. O uso inicial será sempre gratuito e se você precisar de mais recursos computacionais, eles estão disponíveis a preços de mercado.

O GAE (Google App Engine), em resumo, é uma plataforma de hospedagem gratuita usando toda a infra do Google. Tem uma série de vantagens, tais como facilidade no deploy da aplicação, a alta escalabilidade que se consegue, um painel de controle muito completo dos recursos utilizados.

Mais informações você pode pegar aqui: Google App Engine.

Para ter acesso ao GAE é preciso ter uma conta do Gmail e cadastrar-se aqui. Para finalizar o cadastro, será necessário informar um número de celular para o qual será enviado um código de ativação. É possível ativar uma conta por número.

Nesse artigo vamos utilizar a IDE eclipse versão 3.7 (Indigo), que possui plugin para a utilização do GAE. O plugin também está disponível para a versão 3.6 do eclipse (Helios). O download do eclipse pode ser feito aqui.


O Google Code tem um passo a passo de como instalar o plugin.
Os itens que devem ser instalados para a utilização do GAE são os que estão na imagem abaixo.


Após a instalação dos plugins do Google, você terá um ícone de um g azul, e por ali criará um novo projeto.

Nas configurações do novo projeto, você deve definir um nome, um pacote default para suas classes, escolher a versão da SDK do GAE que você usará (aqui usaremos a 1.5.2). Deve desmarcar a opção "Use Google Web ToolKit".
Ao clicar em Finish, será gerada a seguinte estrutura para o projeto

Ao criar o projeto, o plugin já cria automaticamente um servlet que imprime como saída no navegador o tradicional "Hello Word".
Para testar o funcionamento e a instalação, você pode rodar o sistema e acessar o endereço http://localhost:8888.
Para rodar a aplicação, na aba Project Explorer, clique com o botão direito sobre a pasta do projeto e em "Run as > Web Application". Após a inicialização do servidor de aplicação, acesse o link acima, se aparecer uma tela com as boas vindas ao GAE e a lista de servlets disponíveis na aplicação, está funcionando!