12.6 Encapsulamento e Métodos Acessores (Getters e Setters)

O encapsulamento é um dos quatro pilares fundamentais da programação orientada a objetos (POO), juntamente com a herança, a polimorfismo e a abstração. Encapsulamento é a prática de manter os campos (variáveis de instância) de uma classe privados e fornecer acesso a eles através de métodos públicos. Isso é feito para manter o controle sobre os valores que estão sendo definidos e obtidos, e para proteger a integridade dos dados mantidos pela classe.

Os métodos acessores, conhecidos como getters e setters, são a forma padrão de implementar encapsulamento em Java. Eles são métodos públicos que servem para obter (get) e definir (set) o valor de campos privados de uma classe.

Convenções de Nomenclatura para Getters e Setters

Em Java, há uma convenção de nomenclatura bem estabelecida para getters e setters que ajuda a manter o código legível, consistente e acessível para outras ferramentas e frameworks que dependem dessas convenções.

Para um campo chamado nome, por exemplo, o getter seria nomeado getNome() e o setter seria nomeado setNome(). Essa convenção se aplica a todos os campos, com algumas regras específicas para campos booleanos, onde o getter muitas vezes começa com is em vez de get, como isAtivo() para um campo chamado ativo.

Aqui estão as regras gerais para nomear getters e setters:

  • Getters: O método começa com a palavra get seguida pelo nome do campo com a primeira letra maiúscula. Se o campo for do tipo boolean, você também pode usar is em vez de get.
  • Setters: O método começa com a palavra set seguida pelo nome do campo com a primeira letra maiúscula.

Esses métodos devem ser marcados como públicos para que possam ser acessados de fora da classe. Além disso, o método setter geralmente retorna void e aceita um parâmetro do mesmo tipo do campo que está definindo, enquanto o getter retorna um valor do mesmo tipo do campo.

Exemplo de Implementação de Getters e Setters


public class Pessoa {
    private String nome;
    private int idade;
    private boolean ativo;
    
    // Getter para o campo nome
    public String getNome() {
        return nome;
    }
    
    // Setter para o campo nome
    public void setNome(String nome) {
        this.nome = nome;
    }
    
    // Getter para o campo idade
    public int getIdade() {
        return idade;
    }
    
    // Setter para o campo idade
    public void setIdade(int idade) {
        this.idade = idade;
    }
    
    // Getter para o campo ativo (note o uso de 'is' em vez de 'get')
    public boolean isAtivo() {
        return ativo;
    }
    
    // Setter para o campo ativo
    public void setAtivo(boolean ativo) {
        this.ativo = ativo;
    }
}

Por Que Usar Getters e Setters?

Embora possa parecer mais simples acessar os campos diretamente, existem várias vantagens em usar getters e setters:

  • Controle de Acesso: Você pode controlar se um campo é somente leitura ou somente gravação, ou se ele deve seguir certas regras de validação ao ser definido.
  • Ocultação de Implementação: A classe pode mudar a forma como os dados são armazenados internamente sem afetar as classes que a utilizam.
  • Flexibilidade: Você pode adicionar lógica adicional aos métodos acessores, como notificar outros objetos sobre mudanças no valor, realizar validações, ou até mesmo adiar o cálculo do valor até que ele seja realmente necessário (lazy loading).
  • Compatibilidade com Frameworks: Muitos frameworks Java, como Spring e Hibernate, dependem de getters e setters para funcionar corretamente.

É importante notar que, embora os getters e setters sejam uma prática comum, eles não são obrigatórios. Em alguns casos, onde a classe é muito simples e não requer controle adicional sobre seus campos, pode ser aceitável expor os campos diretamente. No entanto, isso deve ser feito com cautela e entendendo as consequências para a manutenção e flexibilidade do código.

Em resumo, getters e setters são uma parte crucial do encapsulamento em Java. Eles fornecem uma interface controlada para acessar e modificar os campos de uma classe, mantendo a integridade e a flexibilidade do código. Seguir as convenções de nomenclatura para esses métodos é essencial para manter a consistência e garantir a interação adequada com outras partes do ecossistema Java.

Agora responda o exercício sobre o conteúdo:

Qual das seguintes afirmações sobre encapsulamento e métodos acessores em Java está correta?

Você acertou! Parabéns, agora siga para a próxima página

Você errou! Tente novamente.

Imagem do artigo Encapsulamento e métodos acessores (getters e setters): Uso de getters e setters para controle de acesso

Próxima página do Ebook Gratuito:

81Encapsulamento e métodos acessores (getters e setters): Uso de getters e setters para controle de acesso

6 minutos

Ganhe seu Certificado deste Curso Gratuitamente! ao baixar o aplicativo Cursa e ler o ebook por lá. Disponível na Google Play ou App Store!

Disponível no Google Play Disponível no App Store

+ de 6,5 milhões
de alunos

Certificado Gratuito e
Válido em todo o Brasil

48 mil exercícios
gratuitos

4,8/5 classificação
nas lojas de apps

Cursos gratuitos em
vídeo, áudio e texto