Projeto 03: Encapsulamento, Herança e Polimorfismo em OO 🏛️
Escopo do Projeto
Objetivo: Construir um domínio de objetos expressivo aplicando os pilares fundamentais da Orientação a Objetos: abstração, encapsulamento rígido, herança e substituição polimórfica.
🎯 1. Contexto & Desafio Prático
Você foi encarregado de projetar o núcleo de um simulador bancário corporativo. O sistema deve manipular contas correntes, contas poupança e contas de investimento com regras tributárias distintas, consumidas por um orquestrador via contratos polimórficos.
📋 2. Requisitos Técnicos Obrigatórios
- R1 (Encapsulamento Rígido): Proteger atributos internos (saldo, titular, extrato) através de getters/setters ou properties validadas.
- R2 (Classe Abstrata Base): Definir
ContaBancariacom método abstratoaplicar_juros_mensais()e método concretotransferir(). - R3 (Herança e Especialização): Especializar em
ContaCorrente(com taxa de manutenção) eContaInvestimento(com rendimento atrelado a indexador). - R4 (Polimorfismo em Lote): Iterar sobre uma coleção mista de contas e executar as rotinas mensais tratando todas via interface comum.
📐 3. Diagrama Conceitual & Arquitetura
classDiagram
class ContaBancaria {
<<abstract>>
-saldo: float
-titular: str
+depositar(valor: float)
+sacar(valor: float)
+aplicar_juros()* void
}
class ContaCorrente {
-taxaManutencao: float
+aplicar_juros() void
}
class ContaInvestimento {
-aliquotaRendimento: float
+aplicar_juros() void
}
ContaBancaria <|-- ContaCorrente
ContaBancaria <|-- ContaInvestimento 💻 4. Especificação Técnica & Código de Referência
// sistema_bancario_poo.py
from abc import ABC, abstractmethod
class ContaBancaria(ABC):
def __init__(self, titular: str, saldo_inicial: float = 0.0):
self._titular = titular
self._saldo = saldo_inicial
@property
def saldo(self) -> float:
return self._saldo
@abstractmethod
def aplicar_fechamento_mensal(self) -> None:
pass
class ContaCorrente(ContaBancaria):
def aplicar_fechamento_mensal(self) -> None:
self._saldo -= 15.00 # Taxa de manutenção
class ContaInvestimento(ContaBancaria):
def aplicar_fechamento_mensal(self) -> None:
self._saldo += self._saldo * 0.012 # Rendimento 1.2%
📦 5. Critérios de Avaliação e Entrega
- Estrutura com classe abstrata (ABC) e métodos polimórficos.
- Encapsulamento com atributos privados protegidos contra mutação externa direta.
- Demonstração em código do fechamento mensal de uma carteira de contas.