Buenas a todos,
Supongamos que tenemos una clase (c2) que debe hacer lo mismo y algunas cosas mas que otra que ya tenemos creada (c1).
Pero esta nueva clase que realiza las mismas tareas que la anterior, va a terminar siendo un "atributo" o formará parte de la clase vieja.
Es correcto hacer algo de este tipo? Sería crear una "c2" que herede de "c1" y que "c2" sea un atributo de "c1", no se si se entiende muy bien a lo que me refiero.
La duda la tengo ya que en este caso de herencia, solo sería para no repetir código, ya que no cambiaría ningun método de c1, solo agregaría algunos metodos más en c2.
Gracias!
Hola Manuel,
Si eso es correcto o no dependerá principalmente de cuáles sean las responsabilidades de tus clases C1 y C2. Habría que plasmarlo a un ejemplo más concreto para poder analizarlo bien (que no sean viajes y paquetes).
Cuando tenés dos clases que tienen métodos prácticamente iguales se pueden tomar distintos enfoques para evitar la repetición de código. Algunas opciones son:
- Delegación: crear una tercera clase concreta que tenga la responsabilidad de hacer eso que estaba repetido. Las otras dos clases le delegarán a ella la tarea que antes estaba repetida. Por ejemplo, en la Máquina expendedora de bebidas, la clase HacedorDeTeConLeche y la clase HacedorDeCafeConLeche le delegan la responsabilidad a la clase Lechero de agregar leche en el vaso.
- Herencia: crear una tercera clase pero abstracta de la cual hereden tus dos clases C1 y C2. El método que estaba repetido pasará a estar escrito una única vez en la clase nueva. Por ejemplo, si tengo las clases Perro y Gato y ambas tienen el método caminar exactamente iguales, tiene sentido que cree una clase abstracta Cuadrúpedo que tenga la implementación del método caminar y tanto Perro como Gato lo heredarán.
En ambos ejemplos que puse estaría mal hacer lo que proponés dado que un Gato no es un Perro y un HacedorDeCafeConLeche no es un HacedorDeTeConLeche, pero quizás en otros casos puede estar bien.
Saludos,
Tomás