🧩 Exercícios: POO em Python: Classes, Encapsulamento, Métodos e @property
Spec Sistemas Com Python • Trilha Progressiva em 4 Níveis
🧭 Navegação Pedagógica
-
📖 Teoria do Capítulo 💻 Exemplos 📊 Slides 🧠 Quiz
🎯 Nível 1: Fundamentos
Problema 05.1 — Classe com Encapsulamento de Atributos e Decorador @property
Contexto: Classe com Encapsulamento de Atributos e Decorador @property no contexto de POO em Python: Classes, Encapsulamento, Métodos e @property.
Requisitos de Execução:
- Criar classe
ContaBancariacom atributo privado_saldoe property com validação no setter.
Resultado Esperado
Encapsulamento defensivo aplicado com decorators @property e @saldo.setter.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_05_1_SeuNome - Envie na tarefa:
Atividade Cap 05 - POO em Python: Classes, Encapsulamento, Métodos e @property
🔑 Gabarito de Código & Solução Comentada
class ContaBancaria:
def __init__(self, titular: str, saldo_inicial: float = 0.0) -> None:
self.titular = titular
self._saldo = saldo_inicial
@property
def saldo(self) -> float:
return self._saldo
@saldo.setter
def saldo(self, valor: float) -> None:
if valor < 0:
raise ValueError("Saldo nao pode ser negativo.")
self._saldo = valor
c = ContaBancaria("Carlos", 100.0)
c.saldo += 50.0
print(f"Saldo de {c.titular}: R$ {c.saldo:.2f}")
🔍 Nível 2: Prática
Problema 05.2 — Métodos de Classe (@classmethod) e Métodos Estáticos (@staticmethod)
Contexto: Métodos de Classe (@classmethod) e Métodos Estáticos (@staticmethod) no contexto de POO em Python: Classes, Encapsulamento, Métodos e @property.
Requisitos de Execução:
- Criar factory method
Conta.de_string('Carlos;500.0')e método estático utilitário de validação de CPF.
Resultado Esperado
Métodos de classe e métodos utilitários invocados com elegância.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_05_2_SeuNome - Envie na tarefa:
Atividade Cap 05 - POO em Python: Classes, Encapsulamento, Métodos e @property
🔑 Gabarito de Código & Solução Comentada
class Usuario:
def __init__(self, nome: str, email: str) -> None:
self.nome = nome
self.email = email
@classmethod
def de_csv(cls, linha: str) -> "Usuario":
nome, email = linha.split(";")
return cls(nome.strip(), email.strip())
u = Usuario.de_csv("Carlos Silva;carlos@empresa.com")
print(f"Usuario criado: {u.nome} ({u.email})")
⚡ Nível 3: Integração
Problema 05.3 — Dunder Methods Essenciais (repr, str, eq, hash)
Contexto: Dunder Methods Essenciais (repr, str, eq, hash) no contexto de POO em Python: Classes, Encapsulamento, Métodos e @property.
Requisitos de Execução:
- Implementar representação para desenvolvedores e comparação de igualdade por valor.
Resultado Esperado
Objetos comparados por valor e formatados legivelmente no console.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_05_3_SeuNome - Envie na tarefa:
Atividade Cap 05 - POO em Python: Classes, Encapsulamento, Métodos e @property
🔑 Gabarito de Código & Solução Comentada
class Ponto2D:
def __init__(self, x: int, y: int) -> None:
self.x = x
self.y = y
def __repr__(self) -> str:
return f"Ponto2D(x={self.x}, y={self.y})"
def __eq__(self, outro: object) -> bool:
if not isinstance(outro, Ponto2D):
return False
return self.x == outro.x and self.y == outro.y
p1 = Ponto2D(10, 20)
p2 = Ponto2D(10, 20)
print(f"Representacao: {p1} | Iguais: {p1 == p2}")
🏆 Nível 4: Desafio Corporativo
Problema 05.4 — Otimização de Memória com slots
Contexto: Otimização de Memória com slots no contexto de POO em Python: Classes, Encapsulamento, Métodos e @property.
Requisitos de Execução:
- Declarar
__slots__ = ('x', 'y')eliminando o overhead do dicionário__dict__por instância.
Resultado Esperado
Milhões de instâncias alocadas com redução drástica de pegada de memória RAM.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_05_4_SeuNome - Envie na tarefa:
Atividade Cap 05 - POO em Python: Classes, Encapsulamento, Métodos e @property
🔑 Gabarito de Código & Solução Comentada
class RegistroOtimizado:
__slots__ = ("id", "valor")
def __init__(self, id: int, valor: float) -> None:
self.id = id
self.valor = valor
r = RegistroOtimizado(1, 99.9)
print(f"Registro com slots: #{r.id} -> R$ {r.valor}")
| ⬅️ Voltar ao Índice de Exercícios | 📚 Sumário de Tópicos |