Apply encapsulation principles to a class

Encapsulation é um dos princípios fundamentais da programação orientada a objetos (OOP) e envolve a proteção dos detalhes internos de uma classe, encapsulando-os e expondo apenas uma interface controlada para interação externa. Isso é alcançado através do uso de modificadores de acesso (private, public, protected, etc.) e métodos de acesso, como getters e setters. Aqui está um exemplo de como aplicar encapsulação a uma classe em Java:

public class Pessoa {
    // Atributos privados
    private String nome;
    private int idade;

    // Construtor
    public Pessoa(String nome, int idade) {
        this.nome = nome;
        this.idade = idade;
    }

    // Método getter para o atributo nome
    public String getNome() {
        return nome;
    }

    // Método setter para o atributo nome
    public void setNome(String nome) {
        // Validação pode ser adicionada aqui, se necessário
        this.nome = nome;
    }

    // Método getter para o atributo idade
    public int getIdade() {
        return idade;
    }

    // Método setter para o atributo idade
    public void setIdade(int idade) {
        // Validação pode ser adicionada aqui, se necessário
        this.idade = idade;
    }

    // Método público para exibir informações da pessoa
    public void exibirInformacoes() {
        System.out.println("Nome: " + nome + ", Idade: " + idade);
    }
}

Neste exemplo, a classe Pessoa encapsula os detalhes internos (nome e idade) usando os modificadores de acesso private. A interação externa com esses atributos é controlada através de métodos de acesso (getters e setters), permitindo que a classe defina e obtenha esses valores de forma segura. O uso de métodos setters também permite adicionar lógica de validação, se necessário.

Exemplo de uso:

public class ExemploEncapsulamento {
    public static void main(String[] args) {
        Pessoa pessoa = new Pessoa("Alice", 30);

        // Usando getters para obter valores
        System.out.println("Nome: " + pessoa.getNome());
        System.out.println("Idade: " + pessoa.getIdade());

        // Usando setters para modificar valores
        pessoa.setNome("Bob");
        pessoa.setIdade(25);

        // Exibindo informações após a modificação
        pessoa.exibirInformacoes();
    }
}

Este exemplo demonstra como a classe Pessoa encapsula seus atributos internos e fornece uma interface controlada para interação externa. O encapsulamento ajuda a manter a integridade dos dados e facilita a manutenção do código ao reduzir o acoplamento entre diferentes partes do programa.