Convencoes

Java Beans

Umas das maiores dificuldades na programação é escrever algoritmos legíveis, a níveis que sejam compreendidos por todo seu time ou por você mesmo no futuro. Para isso, a linguagem Java sugere através de convenções, formas de escrita universal, para nossas classes, atributos, métodos e pacotes.

📌 Para fixar
Não é somente o que escreve, mas também como se escreve! Este conteúdo é um complemento das regras de sintaxe apresentadas anteriormente.

Java Beans

Classes

Uma classe em Java deve seguir o seguinte padrão:

  • O nome da classe pública deve igual ao nome do arquivo.java;
  • Toda classe deve começar com letra maiúscula e se for uma palavra composta, A letra inicial de cada palavra, deverá também ser maiúscula, exemplo: MinhaClasse;
  • Um arquivo.java poderá ter várias classes, mas somente a classe de mesmo nome, deverá ser public.Não recomendamos ter mais de uma classe em um arquivo.java.

Atributos

O nome de uma variável, se formado por uma única palavra, deve ser declarado inteiramente em minúsculo. No caso de palavras compostas, apenas a primeira letra de cada palavra, a partir da segunda palavra, deve estar em maiúsculo. Não é muito recomendado, mas se necessário, usar números ou caracteres especiais em uma variável você deve se estender a estas regras:

  • Uma variável não pode iniciar com número;
  • Uma variável só pode conter os caracteres: "_ "(underline) e "$" (cifrão);
  • Uma variável não ter o nome de uma palavra reservada;
  • Uma variável não pode conter espaços;
  • Uma variável que representa um conjunto de valores, como array ou coleção, deve estar no formato de plural;
  • Todavia, variáveis cujo nome tenha apenas um caractere, deve ser evitado, com exceção de variáveis temporárias, utilizadas em laços de repetição, onde geralmente usamos i, j ou k.

Variáveis válidas

int um = 1;
int numeroUm = 1;
int _numeroUm = 1;
int $um = 1;
int [] numeros = {1,2,3} // ver conceito de arrays

Variáveis inválidas

int 1 = 1;
int 1um = 1;
int %um = 1;
int numero um = 1;

Constantes

Nós já aprendemos que existem dois tipos de variáveis, as que podemos alterar o seu valor e as que seu valor não pode ser modificado que denominamos de constante.

Um exemplo comum, é determinar a média mínima de aprovação de alunos de uma escola, como valor 7. A nota dos alunos serão modificadas, mas o valor da média mínima não. Tornando esta variável final, nós conseguimos garantir que seu valor não será modificado, e para explicitar esta regra, nós utilizamos o padrão onde todo o nome da variável será composta por letra maiúscula.

public class NotaFinal {
    public static void main(String[] args) {
        int notaUm      = 8;
        int notaDois    = 7;
        int notaTres    = 6;
        int notaQuatro  = 9;
        
        int mediaFinal  = (notaUm + notaDois + notaTres + notaQuatro) / 4;
        
        final int NOTA_MINIMA = 7;
        
        if(mediaFinal >=NOTA_MINIMA)
            System.out.println("Aprovado");
        else
            System.out.println("Reprovado");
        
    }
}
🔔 Atenção
O que determina se uma variável não pode ser alterada é a palavra reservada final, o fato da variável ser totalmente maiúscula é uma adoção das boas práticas de escrita em Java.

Métodos

Os métodos, deverão ser nomeados com verbos, através de uma mistura de letras minúsculas e maiúsculas. Em princípio, todas as letras que compõem o nome devem ser mantidas em minúsculo, com exceção, a primeira letra, da segunda palavra composta.

Exemplos sugeridos para nomenclatura de métodos:

int somar(int n1, int n2){ return ... } // métodos podem retornar alguma valor

abrirConexao() throws Exception{} // este método diz que ao ser executado poderá propagar uma exceção

void concluirProcessamento() {} //nem sempre se alguma resposta, logo o retorno é void, vazio

findById(int id){} // não se assuste, você verá muito método em inglês em sua jornada

calcularImprimir(){} // há algo de errado neste método, ele deveria ter uma única finalidade

Getters e Setters

É comum nossos objetos terem atributos ou características que podem ser definidos ou obtidos os seus valores/estado através da instância de um objeto.

Vamos ver o código abaixo, da criação de um objeto Aluno, com nome e idade:

//arquivo Aluno.java
public class Aluno {
    String nome;
    int idade;
}

//arquivo Escola.java
public class Escola {
    public static void main(String[] args) {
        Aluno felipe = new Aluno();
        felipe.nome="Felipe";
        felipe.idade = 8;
        
        System.out.println("O aluno " + felipe.nome + " tem " + felipe.idade + " anos ");
        //RESULTADO NO CONSOLE
        //O aluno Felipe tem 8 anos         
    }
}

Seguindo a convenção Java Beans, uma classe que contém esta estrutura de estados, deverá seguir as regras abaixo:

  • Os atributos precisam ter o modificador de acesso private. Ex.: private String nome;
  • Como agora os atributos estarão somente a nível de classe, precisaremos dos métodos getX e setX, Ex.: getNome() e setNome(String novoNome);
  • O método get, é responsável por obter o valor atual do atributo, logo, ele precisa ser public e retornar um tipo correspondente ao valor, Ex.: public String getNome() {};
  • O método set, é responsável por definir ou modificar o valor de um atributo, em um objeto, logo, ele também precisa ser public, receber um parâmetro do mesmo tipo da variável, mas não retorna nenhum valor void. Ex.: public void setNome(String newNome);
//arquivo Aluno.java
public class Aluno {
    private String nome;
    private int idade;
    
    public String getNome() {
        return nome;
    }
    public void setNome(String newNome) {
        nome = newNome;
    }
    public int getIdade() {
        return idade;
    }
    public void setIdade(int newIdade) {
        this.idade = newIdade;
    }
}
//arquivo Escola.java
public class Escola {
    public static void main(String[] args) {
        Aluno felipe = new Aluno();
        felipe.setNome("Felipe");
        felipe.setIdade(8);
        
        System.out.println("O aluno " + felipe.getNome() + " tem " + felipe.getIdade() + " anos "); 
    }
}
🔔 Atenção
A proposta do código acima é a mesma que o código anterior, a diferença é que adotamos a convenção Java Beans, para definir e obter as características dos nossos objetos.

Uso do this no método set, é muito comum vermos nossos métodos de definição, ter a seguinte sintaxe:

//arquivo Aluno.java
private String nome;

public void setNome(String nome) {
    this.nome = nome;
}
🔔 Atenção
Observe que, a descrição do nosso atributo nome é igual a descrição do parâmetro, logo, utilizamos mais uma palavra reservada this para distinguir um do outro.

Projeto Lombok

O Lombok é uma biblioteca Java focada em produtividade e redução de código boilerplate que, por meio de anotações adicionadas ao nosso código, ensinamos o compilador (maven ou gradle) durante o processo de compilação a criar código Java.