Aula 4 — Programação Orientada a Objetos
2026-08-26
Até aqui: o objeto protegido (encapsulamento) e bem-comportado (Demeter).
O problema que sobra: um objeto pode ser tudo isso e ainda fazer coisas demais.
Roteiro: Classe Deus → SRP → o lado sombrio do SRP → tipos de associação → delegação.
Pedido: Cinco Responsabilidades, Uma ClasseMudar imposto, banco ou layout do recibo — em todos os casos, mexe-se em Pedido.
4 problemas: fragilidade, acoplamento com infraestrutura, difícil reuso, carga cognitiva alta.
Caixa só com chaves de fenda = alta coesão. Caixa com sanduíche + sapato + controle remoto = baixa coesão.
Ligar a TV exigindo abrir a geladeira primeiro = alto acoplamento — dois sistemas amarrados sem necessidade.
O santo graal: alta coesão + baixo acoplamento.
“A classe Pedido calcula o total E processa o pagamento E notifica o cliente.” → responsabilidades demais.
Ganhos: testabilidade (mocks), reuso, manutenibilidade.
Por que testar Pedido.finalizar() sem Injeção de Dependência exigiria cobrar um cartão de crédito de verdade?
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 exigiria disparar um e-mail real ou cobrar um cartão de verdade.Pagavel real é uma violação do princípio de Injeção de Dependência.Dica
Dois atores, uma classe → mudança de layout do RH força re-testar a folha de pagamento.
Interseção de uso vazia = duas classes disfarçadas de uma (RepositorioUsuario + AuditoriaAcesso).
Fragmentação excessiva: uma regra de negócio exige tocar em 15 classes minúsculas.
Correto: Conta gerencia o próprio saldo (debitar()/creditar()) — SRP não é fragmentar tudo.
Vínculo mais fraco — como usar a caneta do balcão e devolver.
Domínio decide: dados de cartão devem sumir com a conta → Composição, não Agregação.
Por que a escolha entre Agregação e Composição para Cliente/Cartao depende de uma decisão de negócio, e não só de como o código é escrito?
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:
Dica
Cliente mostra exatamente isso.joao.pagar(500.0); — o chamador nem sabe que Cartao existe.
Associação (ter) + Delegação (usar) = a composição fica tão poderosa quanto a herança, mais flexível.
joao.pagar(500.0) esconde a existência de Cartao de quem chama. Isso é o mesmo mecanismo da Lei de Demeter (Aula 3) ou algo diferente?
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:
joao.getCartao().processar(500.0) respeita a Lei de Demeter, pois Cartao é um atributo de Cliente.joao.pagar(500.0) é um exemplo de “Tell”: o chamador diz o que quer, sem saber como é feito.pagar() desconhece completamente a existência de Cartao.Cartao sem afetar quem chama pagar().Dica
Cartao ser atributo de Cliente não autoriza um objeto externo a navegar até ele; isso é o “naufrágio de código”.Próxima aula: interfaces como contrato formal, e testes automatizados com JUnit.
UNICAMP — Instituto de Computação