Skip to content

Encapsulamento

Introdução

  • Encapsulamento = um dos pilares fundamentais da Programação Orientada a Objetos - POO
    • consiste em ocultar os detalhes internos de uma classe e restringir o acesso direto aos dados, permitindo que esses dados sejam acessados e modificados apenas através de métodos específicos
    • promove segurança, manutenibilidade e flexibilidade no código
  • objetivos
    • proteger os dados de acesso inadequado ou alterações indesejadas
    • controlar como os dados são acessados e modificados
    • facilitar a manutenção e a leitura do código
    • permitir alterações internas na classe sem impactar outras partes do código
  • benefícios
    • segurança = dados sensíveis são protegidos contra alterações não autorizadas
    • flexibilidade = implementação interna pode mudar sem afetar outras partes do código
    • facilidade de manutenção = permite isolar mudanças e reduzir impactos
    • reutilização de código = lógica de validação e controle pode ser centralizada nos métodos
  • funcionamento = para implementar o encapsulamento, é preciso usar modificadores de acesso em atributos e métodos
    • private = restringe o acesso ao membro apenas para a própria classe
      • para acessar ou modificar atributos private, geralmente são criados métodos acessores (getters) e modificadores (setters)
    • public = permite o acesso de qualquer classe ou parte do código
      • usado em métodos que precisam ser acessíveis externamente, como getters e setters
    • protected = permite o acesso dentro do mesmo pacote e em subclasses, mesmo que estejam em pacotes diferentes
      • útil para proteger dados, mas permitir que subclasses tenham acesso
  • os métodos acessores e modificadores - getters e setters - fornecem controle sobre como os dados são lidos e modificados
public class ContaBancaria {
    // Atributos privados (encapsulados)
    private String titular;
    private double saldo;

    // Construtor
    public ContaBancaria(String titular) {
        this.titular = titular;
        this.saldo = 0.0;
    }

    // Método público para acessar o saldo (getter)
    public double getSaldo() {
        return saldo;
    }

    // Método público para modificar o saldo (setter)
    public void depositar(double valor) {
        if (valor > 0) {
            saldo += valor;
        }
    }

    // Método público para saque (controla o acesso ao saldo)
    public boolean sacar(double valor) {
        if (valor > 0 && saldo >= valor) {
            saldo -= valor;
            return true;
        }
        return false;
    }

    // Método protegido (acessível por subclasses e no mesmo pacote)
    protected void mostrarDetalhes() {
        System.out.println("Titular: " + titular);
        System.out.println("Saldo: " + saldo);
    }
}

Exercícios

Questões

  1. Encapsulamento é uma prática de agrupar atributos e métodos relacionados dentro de uma classe.
  2. O uso do modificador de acesso private em atributos impede que eles sejam acessados diretamente fora da classe.
  3. O encapsulamento permite que os atributos de uma classe sejam acessados diretamente sem o uso de métodos intermediários.
  4. Métodos getter e setter são comumente usados para implementar o encapsulamento em uma classe.
  5. A principal vantagem do encapsulamento é garantir que os dados internos de um objeto sejam acessados e modificados apenas de maneira controlada.
  6. O modificador de acesso public permite que um atributo ou método seja acessado apenas dentro do mesmo pacote.
  7. Usar protected em um atributo permite que ele seja acessado por subclasses da mesma classe, mesmo que estejam em pacotes diferentes.
  8. Encapsulamento é uma prática que melhora a segurança e a manutenção do código, reduzindo a exposição desnecessária de dados.
  9. Se um atributo for declarado como public, ele ainda estará encapsulado e seguro, desde que se use métodos getter e setter para acessá-lo.
  10. O modificador de acesso private garante que um método não possa ser sobrescrito por subclasses.
  11. Encapsulamento permite alterar a implementação interna de uma classe sem afetar as classes que a utilizam.
  12. Em Java, um atributo private pode ser acessado diretamente por qualquer classe do mesmo pacote.
  13. O encapsulamento está relacionado à ideia de esconder a complexidade do código e expor apenas a interface pública necessária.
  14. É possível implementar encapsulamento em uma classe sem usar métodos getter e setter.
  15. A prática de encapsulamento é usada para evitar o acesso direto a atributos e garantir que a lógica de validação seja aplicada antes de modificar qualquer dado.

Gabarito

  1. Verdadeiro: encapsulamento envolve agrupar atributos e métodos que fazem sentido juntos dentro de uma classe.
  2. Verdadeiro: private impede o acesso direto de atributos fora da classe, forçando o uso de métodos para acessá-los.
  3. Falso: o encapsulamento visa impedir o acesso direto a atributos, promovendo o uso de métodos como getters e setters.
  4. Verdadeiro: getters e setters são a forma padrão de implementar o encapsulamento para controlar como os atributos são acessados e modificados.
  5. Verdadeiro: encapsulamento controla o acesso aos dados, evitando modificações inadequadas e preservando a integridade do objeto.
  6. Falso: public permite acesso global de qualquer parte do código, não apenas dentro do mesmo pacote.
  7. Verdadeiro: protected permite acesso dentro do mesmo pacote e também por subclasses, mesmo que estejam em pacotes diferentes.
  8. Verdadeiro: encapsulamento protege o código e facilita a manutenção, ocultando detalhes internos e fornecendo uma interface clara.
  9. Falso: se um atributo é public, ele não está encapsulado, pois pode ser acessado diretamente, o que vai contra a prática de encapsulamento.
  10. Falso: o modificador private apenas impede o acesso ao método fora da classe, mas não afeta a sobrescrita, que é controlada por final.
  11. Verdadeiro: com o encapsulamento, mudanças internas na classe não afetam outras partes do código que a utilizam, desde que a interface pública permaneça a mesma.
  12. Falso: um atributo private é acessível apenas dentro da própria classe, não por outras classes, mesmo que estejam no mesmo pacote.
  13. Verdadeiro: encapsulamento é sobre esconder detalhes complexos e fornecer apenas a interface pública necessária.
  14. Verdadeiro: encapsulamento pode ser implementado usando métodos mais complexos que controlam o acesso a dados, sem necessariamente usar getter e setter.
  15. Verdadeiro: encapsulamento ajuda a garantir que a lógica de validação seja aplicada antes que qualquer modificação de dados ocorra.