Buenas noches, me encontre con una duda a ultimo momento y me gustaria si me podrian llegar a informar que opcion seria mas recomendable para un diseño orientado a objetos en la siguiente situacion:
Supongamos que tengo una clase libro. Y dentro del programa necesito tener un libro color y un libro en blanco y negro. Pero en ambos casos todos sus métodos y atributos serian completamente iguales, solo cambiaría el color.
Seria mejor en esta situación utilizar herencia crear una clase libro donde tenga definidos e implementados todos los métodos y atributos y luego crear dos clases hijas : LibroBlancoYNegro y LibroAColor y solo se diferencien en que tengan un constructor distinto que a uno le pone color y al otro no pero repito todos sus métodos serian exactamente los mismos, o conviene que solo cree la clase libro y que posea dos constructores distintos; uno que me lo cree a color y otro en blanco y negro. Si no se entiende bien la situación busco otra manera de explicarlo. Gracias!
Hola Mauricio:
En primer lugar, lo que mencionás no es sobrecarga de constructores. La sobrecarga de métodos consiste en tener más de un método con el mismo nombre dentro de la misma clase pero con distinta firma, es decir, que reciban tipos de datos por parámetros. Al ser Smalltalk un lenguaje de tipado dinámico esto no tiene sentido pero sí es una técnica que utilizaremos luego en Java.
La respuesta a lo que preguntás es que depende de las responsabilidades de tu clase Libro y en qué influye que sea en blanco y negro o a color. Por lo que describís no se justifica tener una clase para cada tipo de libro, por lo que la idea de los dos constructores suena mejor. Pero habría que ver el resto del modelo y ver por qué te importa hacer esa diferencia. Si es porque querés darles comportamientos distintos a cada uno y es algo necesario para tu solución entonces puede que tenga más sentido crear ambas clases separadas de manera tal que ambos entiendan un mismo mensaje y lo respondan de distintas maneras (polimorfismo).
En resumen, si la diferencia es solo un atributo entonces con una sola clase estás bien. Si además vas a tener comportamiento diferenciado entonces sí se justifica tener dos clases para que respondan de manera polimórfica.
Saludos,
Tomás