Refatoração em direção à herança
Gabarito: letra A. A refatoração para herança, como a extração de superclasse ou subida de método, tem como principal benefício a redução da duplicação de código, reorganizando métodos comuns em superclasses e subclasses, mantendo o comportamento externo inalterado e facilitando a manutenção. Esse conceito está alinhado com a prática de refatoração descrita por Martin Fowler, que visa eliminar bad smells como código duplicado.
Alternativa A — ✅ Correta ⟵ GABARITO
A alternativa descreve exatamente a finalidade da refatoração em direção à herança quando há classes duplicadas: reduzir duplicação movendo a lógica comum para superclasses e subclasses, preservando a semântica original do código e tornando a manutenção mais simples e segura.
Alternativa B — ❌ Incorreta
Embora a substituição de condicionais complexos por polimorfismo seja uma refatoração válida, a alternativa erra ao afirmar que o resultado é um código "mais difícil de entender". A refatoração sempre visa melhorar a legibilidade e a estrutura; um código polimórfico bem aplicado é, em geral, mais claro e mais fácil de manter, não o contrário. Além disso, a questão trata especificamente de classes duplicadas, e não de condicionais.
Alternativa C — ❌ Incorreta
Refatoração não elimina a necessidade de refatorações futuras; é um processo contínuo de melhoria. Consolidar toda a lógica em um único ponto central viola os princípios de coesão e separação de responsabilidades, criando um god class — o oposto do que se busca com herança.
Alternativa D — ❌ Incorreta
Agrupar todas as funcionalidades em uma única classe principal é o oposto da refatoração para herança, que justamente distribui responsabilidades em uma hierarquia. Métodos abstratos são frequentemente utilizados para definir contratos em superclasses, e sua eliminação não é um benefício desejável — pelo contrário, eles promovem flexibilidade.
Alternativa E — ❌ Incorreta
Refatoração não "força" a implementação de um padrão de projeto desde o início; ela pode ser aplicada a qualquer momento para melhorar o código existente. Padrões de projeto podem surgir como resultado da refatoração, mas não são um requisito prévio.
Gabarito: letra A.