Mi pregunta involucra específicamente Java, clases abstractas y el uso de datos protegidos. Me han dicho que todos los datos deben ser privados, y los getters/setters protegidos solo se usan.datos protegidos en la clase abstracta
Ahora, entiendo que queremos proteger los datos de la manipulación directa por usuarios ocasionales de la clase, y que los miembros de los datos públicos en general son una práctica cuestionable. He mirado en "campos de Java protegidas frente a captadores públicos" (Java protected fields vs public getters), pero todavía estoy dudoso que:
protected int i;
es peor en una clase abstracta que:
private int i;
protected int geti();
protected void seti(int j);
Simplemente no estoy viendo el lado negativo cuando la clase abstracta está allí precisamente para proporcionar instalaciones de padres/comunes a las clases de los niños, y el alcance protegido está destinado a proporcionar acceso a los niños, al tiempo que protege los datos de los usuarios ocasionales. En la pregunta anterior mencioné que la mayoría de las respuestas parecen abordar el tema de por qué los datos en general deberían ser privados en lugar de públicos. Estoy tratando de enfocar mi pregunta específicamente en los datos existentes en un padre abstracto destinado a ser utilizado por los niños. El único comentario razonable que he escuchado hasta la fecha es que el uso de los datos protegidos de los padres (por ejemplo, int i arriba) te deja con el código en la clase secundaria que hace referencia a una variable no declarada en la clase secundaria. Menos convincente es el argumento (vea Common protected data member in base class?) de que puede querer cambiar el acceso algún día, y ahora debe respetar su interfaz. Esta es una clase abstracta, y está destinada a extenderse el 100% del tiempo.
Gracias! Título/Página # específicas referencias a libros son mucho más útiles que las referencias a "..any texto básico de programación Java ..."
=================== ======================= 10-13-2010
Esto era tanto una pregunta sobre clases abstractas como sobre datos protegidos. Me parece decepcionante que el foco haya cambiado en las respuestas a si el ocultamiento de datos es algo bueno en OOP (respuesta: sí). Aquí hay mucha profundidad que involucra la naturaleza de la clase abstracta, y cómo difiere de una clase regular no final, y qué posibles ventajas podría haber para fijar los nombres y tipos de elementos de datos en el padre abstracto para su uso por las clases de niños. Creo que existe la posibilidad de que la innovación y el mayor control se extiendan desde el padre abstracto a las clases de niños implementadores. Me preocupa que los principios generales, como las ventajas de ocultar datos, puedan convertirse en dogmas e inhibir la innovación y el desarrollo de nuevos patrones e ideas.
Gracias a todos los que contribuyeron.
[Acabo de responder esto en otro lugar.] (Http://stackoverflow.com/questions/3525405/sometimes-i-dont-get-why-we-go-so-far-as-to-make-every- single-field-as-private-a/3525629 # 3525629) – cHao
En realidad, Sr. Hao, usted respondió una pregunta diferente. La discusión general de lo público y lo privado no es lo que se cuestiona aquí, a menos que usted postule que la herencia es un tipo de interfaz. – cvsdave