Al leer varias preguntas de Stack Overflow y el código de otros, se cierra el consenso general de cómo diseñar 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 implementación, lo cual es una muy buena razón. Sin embargo, con la existencia de la protected
mayoría de los lenguajes OOP y el polimorfismo, esto no funciona.
Cada vez que deseo agregar o cambiar la funcionalidad a una clase, generalmente me veo obstaculizado por el privado y el final colocado en todas partes. Aquí los detalles de implementación son importantes: está tomando la implementación y extendiéndola, sabiendo perfectamente cuáles son las consecuencias. Sin embargo, debido a que no puedo acceder a métodos y campos privados y finales, tengo tres opciones:
- No amplíe la clase, solo evite el problema que conduce a un código que es más complejo
- Copie y pegue toda la clase, eliminando la reutilización del código
- Bifurca el proyecto
Esas no son buenas opciones. ¿Por qué no se protected
usa en proyectos escritos en idiomas que lo admiten? ¿Por qué algunos proyectos prohíben explícitamente heredar de sus clases?