Aula 3 — Programação Orientada a Objetos
2026-08-26
Até aqui: anatomia de uma peça isolada (Aulas 1–2).
A partir de agora: como as peças se conectam — a Orientação a Objetos como design de comunicações.
Roteiro: colaboração → interface vs. implementação → Lei de Demeter → Plug-and-Play.
Produto, ItemCarrinho, CarrinhoCarrinho não sabe de preço nem imposto — só confia no contrato subtotal().
Dividir em especialistas evita Objetos Deus e permite testar cada peça isolada.
Trocar o gateway por REST ou gRPC: Compra nem percebe.
Mesma assinatura pública → zero impacto em quem chama calcularPrecoDeVenda().
Se Carrinho tivesse um getter para precoCusto e calculasse a margem por fora, o que exatamente quebraria quando a regra de margem mudasse?
Escreva sua resposta e compare com um colega antes de avançar (2 min).
Dica
Julgue V ou F — a questão só conta se acertar os 4 itens:
ItemCarrinho.subtotal() deveria ler diretamente o atributo precoBase de Produto para ser mais eficiente.calcularPrecoDeVenda() dentro de Produto centraliza a política de margem num único lugar do sistema.Dica
subtotal() deve perguntar via getPreco().Não é o número de pontos — é a fronteira invadida. Se Carteira mudar, Checkout quebra, mesmo sem relação direta com ela.
Checkout fica cego para a existência de uma Carteira. Trocar por ApplePay: zero impacto.
Por que “número de pontos na linha” é um jeito ruim de explicar a Lei de Demeter, e “fronteira invadida” é melhor?
Escreva sua resposta e compare com um colega antes de avançar (2 min).
Dica
Julgue V ou F — a questão só conta se acertar os 4 itens:
pedido.getCliente().getCarteira().getSaldo() é um exemplo saudável de reuso de getters.pedido.clientePodePagar().Dica
PagavelCheckout Aceita Qualquer PagavelAmanhã surge o Pix → só Pix implements Pagavel. Checkout não muda.
O erro revela que o sistema “sabe demais”: exige identidade específica, não capacidade funcional.
Se Checkout.finalizar recebesse CartaoDeCredito em vez de Pagavel, o que exatamente o erro de compilação de um novo Pix estaria diagnosticando sobre o design?
Escreva sua resposta e compare com um colega antes de avançar (2 min).
Dica
Julgue V ou F — a questão só conta se acertar os 4 itens:
Checkout.finalizar(Pagavel metodo) aceita qualquer classe futura que implemente Pagavel, sem recompilação.Boleto onde se espera CartaoDeCredito é sempre culpa do compilador, não do design.CartaoDeCredito) em vez da interface (Pagavel) aumenta o acoplamento do sistema.Dica
Próxima aula: decompor uma única classe que faz coisas demais — o Princípio da Responsabilidade Única.
UNICAMP — Instituto de Computação