Hola
Tengo una duda relacionada a si existen condiciones suficientes para la creación de una clase hija en el siguiente caso:
Hay una clase padre A y las clases hijas B y C. La clase A posee n métodos y un solo método abstracto que es initialize, las clases B y C solo sobrescriben el método initialize (Es decir, se comportan exactamente como A excepto que B y C tienen valores de atributos diferentes).
Es suficiente esto para justificar la existencia de estas clases hijas?
Nota: los atributos de B y C son objetos de clases diferentes (lo garantiza el initialize de las clases B y C)
Gracias
Hola Jesús:
No es simple responder si es suficiente para un ejemplo tan aislado dado que dependerá mucho del contexto. En términos genéricos como lo planteás, la respuesta es sí, siempre y cuando se cumpla la regla de "es un" (es decir, que puedas decir que "un B es un A" y también que "un C es un A") y también que n sea mayor a 1 (o sea, que haya más métodos en la clase madre que no sean sobreescritos por las clases hijas).
De todas maneras insisto en que es necesario analizarlo en los términos del dominio del problema que quieras modelar, dado que podría darse que la relación de herencia sea adecuada pero que se podría resolver el problema mediante delegación al modelar una clase nueva. Suele ser conveniente encarar primero con delegación y luego, si se justifica, se refactoriza para aplicar herencia.
Considerá además que lo que pretendés hacer también lo podrías realizar con una sola clase implementando varios métodos de clase a modo de constructores (lo cual no necesariamente es mejor).
Saludos,
Tomás
Tomás, una consulta al respecto.
Si la clase A la hago abstracta y defino un metodo abstracto, porque no quiero que se creen instancias de esa clase y además quiero que las clases que hereden de ella implementen si o si ese metodo, y el otro metodo que tiene la clase A, es simplemente un setter de un atributo que es comun a las clases hijas, estaría justificada la herencia? con solo dos metodos en la madre?
Y otra consulta es si es excesivo para este tp que haya dos clases abstractas, y que cada una de estas tenga a su vez 3 hijas, todo en pos de no repetir codigo.
Gracias
Ademas, se cumple el principio "es un" en todos los casos.
Hola Ezequiel:
Si la clase A la hago abstracta y defino un metodo abstracto, porque no quiero que se creen instancias de esa clase y además quiero que las clases que hereden de ella implementen si o si ese metodo, y el otro metodo que tiene la clase A, es simplemente un setter de un atributo que es comun a las clases hijas, estaría justificada la herencia? con solo dos metodos en la madre?
Al igual que la respuesta anterior, no se puede responder de manera absoluta para una situación tan genérica. La respuesta en teoría es que sí, porque estás cumpliendo la regla de "es un" y además hay métodos abstractos en la clase madre que son reutilizados por las clases hijas. El problema es que hace falta saber más información del dominio del problema para ver si vale la pena usar herencia ahí en lugar de delegación.
Y otra consulta es si es excesivo para este tp que haya dos clases abstractas, y que cada una de estas tenga a su vez 3 hijas, todo en pos de no repetir codigo.Esto no se puede determinar ya que dependerá exclusivamente de tu modelo.
Saludos,
Tomás