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!
- Crie o arquivo
batman.cppna pastasrc/:
#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
- Abra o terminal integrado.
- Compile:
g++ batman.cpp -o batman - 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)