Novamente o exemplo não consegue mostrar claramente qual é o problema com ele.
Qual é exatamente o problema de violar esse princípio? Só porque você teve que modificar a função calculateArea
? Por que é tão ruim assim modificar? Como adicionar mais um if iria quebrar alguma coisa?
Nos dois exemplos "ruins", não há os problema que a suposta solução resolve.
- Manutenibilidade
Substituir if/else
/switch
por polimorfismo é trocar seis por meia dúzia. E se o seu chefe vier e pedir pra adicionar uma função calculatePerimeter
? Você vai ter que mexer na interface e em TODAS as classes. Ou seja, não existe um melhor ou pior, vai depender do que você prefere.
- Testabilidade
Por que exatamente o código com if/else
/switch
ficaria mais difícil de testar? Não consigo ver como a versão "ruim" ficaria difícil testar.
- Reutilização
Por que exatamente o código com if/else
/switch
não conseguiria usar em outros lugares? Dá pra usar a função calculateArea
em qualquer lugar. Qual bagagem que levaria?
- Escalabilidade
Por que exatamente o código com if/else
/switch
não seria uma "operação segura" ?
No post inteiro só vejo afirmações fortes mas sem uma argumentação clara dos reais problemas.
Também vejo comparações:
"Seu método vai virar uma cadeia de if/elseif maior que a constituição brasileira!"
que não fazem nenhum sentido. Qual o problema de uma cadeia de ifs?
Conclusão
De novo, o código "problemático" na verdade não tem nenhum problema.
Assim como o primeiro post, esse foi uma tentativa de mostrar como o princípio é útil, no entanto não consegue fazer isso. Na minha visão parece apenas uma visão ideológica de princípios abstratos que não servem pra nada mas as pessoas insistem em a defender.