Aula 7 — Programação Orientada a Objetos
2026-08-30
A pergunta da Aula 6: como Pagavel forma aceita ora Pix, ora Cartao?
A resposta: Polimorfismo — múltiplas formas atrás do mesmo contrato.
Roteiro: Late Binding → taxonomia → fim do “Mar de IFs” → Generics.
“Muitas formas”: a mesma chamada, comportamentos diferentes, dependendo do objeto real.
Compilador: checa que o método existe. JVM: decide qual implementação roda.
Inclusão: qualquer implementação de Pagavel serve — pilar da OO.
Paramétrico: List<T> funciona igual para qualquer tipo, sem herança.
“Polimorfismo aparente”: um tipo novo exige voltar e reescrever Notificador — viola OCP.
| Static Binding | Dynamic Binding | |
|---|---|---|
| Quando | Compilação | Execução |
| Quem decide | Compilador | JVM |
| Vantagem | Performance | Desacoplamento total |
Por que a sobrecarga de métodos é chamada de “polimorfismo aparente”, mesmo permitindo múltiplas versões do mesmo nome de método?
Escreva sua resposta e compare com um colega antes de avançar (2 min).
Por que a sobrecarga de métodos é chamada de “polimorfismo aparente” — Resposta
Voltando à pergunta: a sobrecarga escolhe a versão certa em tempo de compilação, olhando a assinatura — não o objeto real em runtime; por isso não é o polimorfismo que sustenta o desacoplamento da OO.
Meta-regra: precisar de if/switch/instanceof sobre tipo de negócio = sintoma de OCP violado.
Se amanhã surgir um novo meio de pagamento, o que exatamente muda no CheckoutController — e o que isso diz sobre o OCP?
Escreva sua resposta e compare com um colega antes de avançar (2 min).
Cripto implements Pagavel exige alterar o código do CheckoutController.instanceof para decidir o que fazer com um objeto de negócio é sinal de que o polimorfismo não foi bem aproveitado.CheckoutController tratar Pix, Boleto e Cripto de forma idêntica.Se amanhã surgir um novo meio de pagamento, o que muda no CheckoutController — Resposta
Cripto implements Pagavel exige alterar o código do CheckoutController — é exatamente o ponto: nenhuma linha do controlador muda.instanceof para decidir o que fazer com um objeto de negócio é sinal de que o polimorfismo não foi bem aproveitado — é a meta-regra prática desta aula.CheckoutController tratar Pix, Boleto e Cripto de forma idêntica — é a substitutibilidade via Pagavel.Voltando à pergunta: nada muda no CheckoutController — é exatamente isso que o OCP promete: extensão via novas classes, sem tocar no código que já funciona.
Erro de lógica na inserção → ClassCastException bem mais tarde, longe da causa.
4 vantagens: robustez, legibilidade, reutilização, performance (menos casts).
Generics é uma instância de qual tipo de polimorfismo na taxonomia de Cardelli-Wegner — e por que ele não exige que os tipos usados pertençam à mesma hierarquia de herança?
Escreva sua resposta e compare com um colega antes de avançar (2 min).
List<Pagavel> impede, em tempo de compilação, que um objeto incompatível seja adicionado à lista.if para verificar o tipo concreto de um objeto de negócio é um sintoma de violação do OCP.Generics na taxonomia de Cardelli-Wegner — Resposta
List<Pagavel> impede, em tempo de compilação, que um objeto incompatível seja adicionado à lista — é o ganho central de Generics.if para verificar o tipo concreto de um objeto de negócio é um sintoma de violação do OCP — é a meta-regra do bloco anterior.Voltando à pergunta: Generics é Polimorfismo Universal Paramétrico — o mesmo algoritmo de lista serve para qualquer tipo, sem exigir que os tipos compartilhem hierarquia de herança.
Próxima aula: Herança — o outro mecanismo de polimorfismo, e o Princípio da Substituição de Liskov.
UNICAMP — Instituto de Computação