Prova 1 · Fundamentos e Princípios
Partes I a IV: valores, paradigmas, SOLID, componentes
Objetivas
0/20 respondidas1.
Uma startup lança rápido, com código bagunçado. Após 3 anos, a equipe triplicou e cada feature leva o triplo do tempo. O diretor propõe reescrever do zero com a mesma equipe e os mesmos hábitos. Segundo Martin, qual o prognóstico mais provável?
2.
O gerente de produto exige uma feature urgente que exige acoplar regras de negócio à tela. O desenvolvedor sênior recusa e propõe um prazo um pouco maior. Segundo o cap. 2, essa atitude é:
3.
Relacione corretamente paradigma e disciplina imposta:
4.
Um sistema de pagamentos chama
GatewayCielo.cobrar() dentro do caso de uso FinalizarPedido. A empresa quer trocar para outro gateway. Qual refatoração aplica corretamente o poder central da OO descrito no cap. 5?5.
Um sistema de reservas sofre com overbooking por condição de corrida ao atualizar o contador de assentos. Qual abordagem do cap. 6 ataca a causa?
6.
A classe
Relatorio tem gerarPDF() (pedido pelo Financeiro) e gerarDashboard() (pedido pelo Marketing), ambas usando calcularTotais(). O Financeiro pede mudança nos totais e o dashboard passa a mostrar valores errados. Qual princípio e qual correção?7.
Uma loja precisa adicionar frete por drone. Hoje, cada nova modalidade exige editar o
CalculadoraFrete com mais um switch. Qual design satisfaz o OCP?8.
A interface
Armazenamento tem salvar() e ler(). A implementação ArmazenamentoSomenteLeitura lança exceção em salvar(). Clientes passam a checar o tipo antes de salvar. O que ocorreu?9.
Considerando o caso anterior, qual princípio sugere uma correção estrutural?
10.
Qual afirmação sobre o DIP é verdadeira?
11.
Um componente
Fiscal é usado por 10 sistemas e muda toda semana por causa de regras de UI misturadas nele. Cada mudança força 10 releases. Quais princípios de coesão estão em conflito?12.
Componente X: Fan-in = 1, Fan-out = 4, 10 classes, 0 abstratas. Componente Y: Fan-in = 8, Fan-out = 0, 10 classes, 9 abstratas. Qual análise está correta?
13.
O build de uma empresa falha porque o componente A depende de B, B de C e C de A. Ninguém consegue liberar versões independentes. Qual princípio foi violado e qual a correção?
14.
Segundo o SDP, um componente que contém regras voláteis de layout de relatórios deve:
15.
Sobre o esquema do banco de dados no gráfico A × I, o autor observa que:
16.
Qual a diferença entre a granularidade de reuso definida pelo REP e o agrupamento do CCP?
17.
Um time aplica programação estruturada e afirma: "Nossos 2.000 testes passaram, portanto o sistema está correto". Qual a crítica do cap. 4?
18.
Qual cenário descreve corretamente a relação entre fluxo de controle e dependência de código na OO?
19.
Em um projeto recém-iniciado, onde o arquiteto deve posicionar os componentes no triângulo de tensão?
20.
Qual alternativa NÃO é um sintoma de violação do SRP?
Dissertativas
autoavaliação · não entram na notaD1.
Explique por que o polimorfismo é considerado o maior poder da OO do ponto de vista arquitetural. Dê um exemplo com regras de negócio e banco de dados.
Ver resposta modelo
Polimorfismo seguro permite inverter dependências: o código de alto nível define interfaces e o de baixo nível as implementa. Assim, a dependência de código aponta contra o fluxo de controle.
Exemplo: o caso de uso define
RepositorioPedidos; a classe PedidosPostgres implementa. O caso de uso chama o repositório em execução, mas não conhece o Postgres. Resultado: banco vira plugin, implantação e desenvolvimento independentes, testes com dublês.D2.
Compare os princípios SDP e SAP e explique como, juntos, formam o equivalente do DIP para componentes.
Ver resposta modelo
SDP: dependências devem apontar no sentido da estabilidade (I menor). SAP: componentes estáveis devem ser abstratos, para que estabilidade não impeça extensão.
Juntos: dependa de componentes estáveis e abstratos. É o DIP aplicado a componentes: depender de abstrações. Métrica: sequência principal A + I = 1; distância D mede o desvio; zonas de dor (estável/concreto) e inutilidade (instável/abstrato) devem ser evitadas.
D3.
Descreva o triângulo de tensão da coesão de componentes e como a posição ideal muda ao longo da vida de um projeto.
Ver resposta modelo
Vértices: REP (agrupar para reuso/release), CCP (agrupar o que muda junto), CRP (separar para não forçar dependências inúteis). REP e CCP aumentam componentes; CRP diminui.
Ignorar CCP: mudanças espalhadas. Ignorar REP: reuso difícil. Ignorar CRP: releases desnecessários.
Início do projeto: priorizar CCP (desenvolvimento). Com maturidade e consumidores externos: deslocar para REP (reuso).