Aula 7: Getters e Setters

Controlando o acesso aos atributos do objeto.

O Que Você Vai Aprender

Nesta aula, você explorará os Getters e Setters, métodos essenciais para implementar o encapsulamento em Python. Você entenderá como esses métodos permitem um acesso controlado e seguro aos atributos de um objeto, possibilitando a inclusão de lógica de validação e garantindo a integridade dos dados.

↔️ Conceito de Getters e Setters

Compreender a função de métodos para obter e definir valores de atributos.

🛡️ Validação e Controle

Aprender a usar getters e setters para adicionar lógica de validação e proteger a integridade dos dados.

Conceito: Getters e Setters

Em Programação Orientada a Objetos, especialmente quando lidamos com atributos que não devem ser acessados ou modificados diretamente (como atributos protegidos ou "privados"), utilizamos os Getters e Setters.

Getters (Métodos de Acesso)

São métodos usados para obter (get) o valor de um atributo. Em Python, geralmente começam com `get_` ou são apenas o nome do atributo se forem simples.

class Pessoa:
    def __init__(self, nome, idade):
        self._nome = nome      # Atributo protegido
        self._idade = idade    # Atributo protegido

    def get_nome(self):
        return self._nome # Getter para 'nome'

    def get_idade(self):
        return self._idade # Getter para 'idade'

Setters (Métodos de Modificação)

São métodos usados para definir (set) ou modificar o valor de um atributo. Em Python, geralmente começam com `set_`.

A grande vantagem dos setters é que você pode incluir lógica de validação antes de permitir que o atributo seja modificado. Isso protege a integridade dos dados.

class Pessoa:
    # ... (init e getters)

    def set_idade(self, nova_idade):
        if nova_idade > 0: # Lógica de validação!
            self._idade = nova_idade
        else:
            print("Idade inválida! Deve ser um número positivo.")

Exemplo Prático: Classe `ContaBancaria`

Vamos aplicar os conceitos de getters e setters na classe `ContaBancaria`, controlando o acesso ao `_saldo` para garantir que as operações financeiras sejam válidas.

Implementação da `ContaBancaria` com Getter e Métodos de Operação

class ContaBancaria:
    def __init__(self, titular):
        self.titular = titular
        self._saldo = 0.0 # Atributo protegido (por convenção, não use __saldo aqui para o exemplo simplificado)
    
    def get_saldo(self): # Getter para obter o saldo
        return self._saldo

    def depositar(self, valor):
        if valor > 0:
            self._saldo += valor
            print(f"Depósito de R${valor:.2f} realizado. Novo saldo: R${self._saldo:.2f}")
        else:
            print("Valor de depósito inválido. O valor deve ser positivo.")

    def sacar(self, valor):
        if valor > 0 and valor <= self._saldo:
            self._saldo -= valor
            print(f"Saque de R${valor:.2f} realizado. Novo saldo: R${self._saldo:.2f}")
        elif valor <= 0:
            print("Valor de saque inválido. O valor deve ser positivo.")
        else:
            print(f"Saldo insuficiente. Saldo atual: R${self._saldo:.2f}, Tentativa de saque: R${valor:.2f}")

# Exemplo de uso:
# minha_conta = ContaBancaria("Carlos")
# minha_conta.depositar(150.00)
# print(f"Saldo atual: R${minha_conta.get_saldo():.2f}")
# minha_conta.sacar(50.00)
# minha_conta.sacar(200.00) # Saque insuficiente

Simulador: Teste suas Operações Bancárias

Interaja com uma conta bancária de exemplo para ver como os getters e métodos de operação controlam o saldo.

Conta Bancária de Exemplo (Titular: Simulado, Saldo Inicial: R$ 1000.00)

Esta conta simula a classe `ContaBancaria` em Python, permitindo que você deposite, saque e veja o saldo de forma controlada.

Realizar Operações

Saldo atual:

Desafios para Continuar

Aplique o que aprendeu sobre getters e setters para resolver estes desafios no seu ambiente de desenvolvimento Python.

  • 1. Classe `Temperatura` com Getter e Setter

    Crie uma classe `Temperatura` com um atributo `_celsius` (protegido). Adicione um método `get_celsius()` e um método `set_celsius(valor)`.

    No `set_celsius`, adicione uma validação: a temperatura em Celsius não pode ser inferior a -273.15 (zero absoluto). Se o valor for inválido, imprima uma mensagem de erro.

  • 2. Expandindo a `ContaBancaria` com um Setter para Titular

    À classe `ContaBancaria` (do exemplo desta aula ou da aula anterior), adicione um atributo `_titular` protegido.

    Crie um método `set_titular(novo_nome)` que atualize o nome do titular. Adicione validação para garantir que o `novo_nome` não esteja vazio e tenha pelo menos 3 caracteres. Imprima mensagens de sucesso ou erro.