Aula 6 — Programação Orientada a Objetos
2026-08-30
A pergunta da Aula 5: como o compilador aceita Pagavel p = new Pix() e depois p = new Cartao()?
A resposta começa aqui: a Interface — o mecanismo de linguagem que torna a abstração Pagavel real.
Roteiro: contrato → interfaces modernas → tipos como comportamento → exceções como guardas.
PagavelDiz o quê, nunca como. Métodos são implicitamente public abstract.
PixEsquecer um método do contrato = erro de compilação, não bug em produção.
A tomada não sabe se é liquidificador ou TV — só exige o plugue certo. Um aparelho novo não exige refazer a fiação da casa.
Evolução sem ruptura: Pix.java nem precisa saber que processarComLog existe.
Interface = cérebro (regra); classe concreta = músculos (armazenamento). Mesma regra, zero duplicação.
Interfaces Modernas e o Mutador Cego — O método default aplicarJuros muda o saldo do objeto. Isso significa que a interface passou a ter estado próprio?
Escreva sua resposta e compare com um colega antes de avançar (2 min). Depois julgue os 4 itens de V/F abaixo — a questão só conta se acertar os 4:
default pode chamar outros métodos abstratos da mesma interface, confiando que a classe concreta os implementa.aplicarJuros armazena o novo saldo dentro da própria interface, num atributo privado.static de interface pode ser chamado sem nenhuma instância de uma classe concreta.Dica
default pode chamar outros métodos abstratos da mesma interface, confiando que a classe concreta os implementa — é assim que aplicarJuros chama getSaldo()/setSaldo().aplicarJuros armazena o novo saldo dentro da própria interface, num atributo privado — a interface continua sem nenhum atributo de instância; o estado mora na classe concreta.static de interface pode ser chamado sem nenhuma instância de uma classe concreta — métodos static pertencem ao tipo, não a uma instância.Voltando à pergunta: não. A interface continua sem nenhum atributo de instância — aplicarJuros só orquestra a mudança chamando getSaldo()/setSaldo(), que a classe concreta implementa. A interface é o “cérebro” da regra; o estado físico mora inteiramente nos “músculos” da classe concreta.
| Interface | Classe Abstrata | |
|---|---|---|
| Estado | Proibido | Permitido |
| Herança | Múltipla (implements) |
Única (extends) |
| Propósito | O que faz | O que é |
Pix e Cartao sem nada em comum em dados — mesmo tipo Pagavel, porque ambos “sabem pagar”.
Interfaces e o Contrato de Tipo — Uma interface pode ter métodos default com lógica de negócio real. Isso a transforma numa “classe disfarçada”?
O que exatamente impede isso? Escreva sua resposta e compare com um colega antes de avançar (2 min). Depois julgue os 4 itens de V/F abaixo — a questão só conta se acertar os 4:
default e static tornam a interface equivalente a uma classe comum, incluindo suporte a atributos de instância.Dica
default e static tornam a interface equivalente a uma classe comum, incluindo suporte a atributos de instância — mesmo com default/static, a interface continua proibida de ter atributos de instância.Pix e CartaoDeCredito.Voltando à pergunta: não. O que impede a interface de virar uma classe disfarçada é a proibição de atributos de instância — mesmo com default/static, ela nunca guarda estado próprio; métodos default só compartilham comportamento entre implementações que continuam livres para ter estruturas de dados completamente diferentes.
O compilador aceita qualquer double. A exceção protege o que o tipo não consegue expressar.
Retornar null/0/false só empurra o erro para uma linha distante — um NullPointerException sem relação óbvia com a causa real.
Baixo nível lança; alto nível decide como reagir.
Exceção = cláusula do contrato: “prometo tentar, mas posso falhar — e aviso formalmente”.
Exceções como Guardas de Contrato — Por que “lançar uma exceção” é descrito nesta aula como um ato de honestidade, e “tratá-la” como um ato de resiliência?
Escreva sua resposta e compare com um colega antes de avançar (2 min). Depois julgue os 4 itens de V/F abaixo — a questão só conta se acertar os 4:
double.null ou 0 para sinalizar um erro é uma prática que só adia a descoberta do problema real.throws NotificationException na assinatura de um método é uma forma de tornar explícita uma possível falha do contrato.Dica
double — falso: o compilador só garante o tipo sintático (double), não a validade semântica do valor.null ou 0 para sinalizar um erro é uma prática que só adia a descoberta do problema real — é o “erro de silenciar” descrito nesta aula.throws NotificationException na assinatura de um método é uma forma de tornar explícita uma possível falha do contrato — é exatamente a ideia de “exceção como cláusula do contrato”.Voltando à pergunta: lançar a exceção é honestidade porque o objeto de baixo nível admite, no momento exato da violação, que não pode cumprir o contrato — em vez de fingir sucesso com null/0/false. Tratá-la é resiliência porque o componente de alto nível decide como o sistema se recupera, contendo o dano sem deixá-lo se propagar para um NullPointerException distante e sem relação aparente com a causa.
default/static/private trazem comportamento sem quebrar retrocompatibilidadePróxima aula: Polimorfismo — como o compilador aceita múltiplas formas por trás do mesmo contrato.
UNICAMP — Instituto de Computação