Capítulo 13: Encapsulamento (Getters e Setters) 🦇🔒

Neste capítulo, vamos aprender a proteger os dados dos nossos objetos usando o Encapsulamento, com o tema Batman!


📖 O que é Encapsulamento?

É a prática de esconder os detalhes internos de um objeto e proteger seus dados de acessos diretos indevidos.

  • private: O que está aqui só pode ser acessado por funções de dentro da própria classe.
  • public: O que está aqui pode ser acessado por qualquer pessoa fora da classe.
  • Getters e Setters: São funções públicas usadas para ler (Get) e alterar (Set) os dados privados de forma segura!

📖 Exemplo Guiado: O Segredo do Batman

Vamos criar uma classe Batman onde a identidade secreta é privada e só pode ser acessada se a senha estiver correta!

  1. Crie o arquivo batman.cpp na pasta src/:
#include <iostream>
#include <string>
 
using namespace std;
 
class Batman {
private:
    string identidade_secreta;
 
public:
    // Construtor para definir a identidade inicial
    Batman() {
        identidade_secreta = "Bruce Wayne";
    }
 
    // Getter seguro
    string get_identidade(string senha) {
        if (senha == "batcaverna123") {
            return identidade_secreta;
        } else {
            return "Acesso Negado!";
        }
    }
};
 
int main() {
    Batman b;
 
    // Erro! Não podemos fazer isso porque é privado:
    // cout << b.identidade_secreta; 
 
    // Tentando acessar com senha errada
    cout << "Tentativa 1: " << b.get_identidade("coringa") << endl;
 
    // Tentando acessar com senha certa
    cout << "Tentativa 2: " << b.get_identidade("batcaverna123") << endl;
 
    return 0;
}

🕹️ Como Executar e Testar no VS Code

  1. Abra o terminal integrado.
  2. Compile: g++ batman.cpp -o batman
  3. Execute: ./batman

Resultado Esperado:

Tentativa 1: Acesso Negado!
Tentativa 2: Bruce Wayne

📊 Ilustração Visual: Cadeado do Encapsulamento

Veja como o acesso é bloqueado ou permitido:

graph TD
    A[Código Externo] -->|1. Tenta ler diretamente| B((🔒 Atributo Privado))
    A -->|2. Usa função pública Getter| C[🔓 Getter]
    C --> B

🛠️ Prática Obrigatória 1: Cofre do Tio Patinhas

Crie um programa chamado cofre.cpp com uma classe Cofre. Ela deve ter um atributo privado double dinheiro. Crie um método público void depositar(double valor) (que adiciona dinheiro) e um método double get_saldo() (que retorna o saldo). Não permita depósitos de valores negativos!


🔑 Gabarito de Código

Prática 1: cofre.cpp

#include <iostream>
 
using namespace std;
 
class Cofre {
private:
    double dinheiro;
 
public:
    Cofre() {
        dinheiro = 0;
    }
 
    void depositar(double valor) {
        if (valor > 0) {
            dinheiro += valor;
            cout << "Depositado: $" << valor << endl;
        } else {
            cout << "Valor invalido para deposito!" << endl;
        }
    }
 
    double get_saldo() {
        return dinheiro;
    }
};
 
int main() {
    Cofre meu_cofre;
    
    meu_cofre.depositar(100.50);
    meu_cofre.depositar(-50); // Deve dar erro
    
    cout << "Saldo atual: $" << meu_cofre.get_saldo() << endl;
 
    return 0;
}

📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)

(Siga o padrão estabelecido no Guia)


Capitulo Anterior | Proximo Capitulo