Gabarito disponível
public Dinheiro calcularPagamento(Empregado e) throws TipoEmpregadoInvalido {
switch (e.tipo) {
case COMISSIONADO:
return calcularPagamentoComissionado(e);
case HORA:
return calcularPagamentoEmHoras(e);
case SALARIO:
return calcularPagamentoSalario(e);
default:
throw new TipoEmpregadoInvalido(e.tipo);
}
}
Segundo Martin (2020), quais são os dois princípios SOLID desrespeitados pela função acima?
Resolução comentada
O switch por tipo viola o SRP e o OCP.
A função trata vários tipos de empregado em um só lugar, então tem mais de uma razão para mudar, o que viola o Princípio da Responsabilidade Única. Além disso, um novo tipo de empregado exige modificar a função, o que viola o Aberto-Fechado.
Análise das alternativas
B e E) Não há problema de Liskov, pois não há herança envolvida. C e D) Não há interface grande demais (ISP) nem dependência de abstrações invertida (DIP) em questão.
Referência: MARTIN, R. C. Arquitetura Limpa (2020); Código Limpo.
Resolução comentada do VaiConcursos.