Al leer varias preguntas de desbordamiento de pila y el código de otros, se cierra el consenso general de cómo diseñar las clases. Esto significa que, de forma predeterminada, en Java y C # todo es privado, los campos son finales, algunos métodos son finales y a veces las clases son incluso finales .
La idea detrás de esto es ocultar los detalles de la implementación, lo cual es una muy buena razón. Sin embargo, con la existencia de protected
en la mayoría de los lenguajes OOP y el polimorfismo, esto no funciona.
Cada vez que deseo agregar o cambiar la funcionalidad de una clase, generalmente me veo obstaculizado por la colocación privada y final en todas partes. Aquí los detalles de la implementación son importantes: usted toma la implementación y la extiende, sabiendo perfectamente cuáles son las consecuencias. Sin embargo, como no puedo acceder a los campos y métodos privados y finales, tengo tres opciones:
- No extienda la clase, solo solucione el problema que conduce a un código más complejo
- Copie y pegue toda la clase, eliminando la reutilización del código
- Ten en cuenta el proyecto
Esas no son buenas opciones. ¿Por qué no se usa protected
en proyectos escritos en lenguajes que lo admiten? ¿Por qué algunos proyectos prohíben explícitamente la herencia de sus clases?