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).