Ao ler várias perguntas do Stack Overflow e o código de outras pessoas, o consenso geral de como projetar classes é fechado. Isso significa que, por padrão em Java e C #, tudo é privado, os campos são finais, alguns métodos são finais e, às vezes, as classes são até finais .
A idéia por trás disso é ocultar os detalhes da implementação, o que é uma boa razão. No entanto, com a existência protected
na maioria das linguagens e polimorfismo OOP, isso não funciona.
Toda vez que desejo adicionar ou alterar a funcionalidade de uma classe, geralmente sou prejudicada por particulares e finais colocados em todos os lugares. Aqui os detalhes da implementação são importantes: você está pegando a extensão e estendendo-a, sabendo muito bem quais são as consequências. No entanto, como não consigo acessar campos e métodos particulares e finais, tenho três opções:
- Não estenda a classe, apenas contorne o problema que leva ao código mais complexo
- Copie e cole toda a classe, eliminando a reutilização do código
- Bifurcar o projeto
Essas não são boas opções. Por que não é protected
usado em projetos escritos em idiomas que o suportam? Por que alguns projetos proíbem explicitamente a herança de suas classes?