Tengo un código donde un buen modelo de herencia ha ido cuesta abajo y estoy tratando de entender por qué y cómo solucionarlo. Básicamente, imagine que tiene una jerarquía de zoológico con:
class Animal
class Parrot : Animal
class Elephant : Animal
class Cow : Animal
etc.
Tienes tus métodos eat (), run (), etc. y todo está bien. Entonces, un día aparece alguien y dice: nuestra clase CageBuilder funciona muy bien y usa animal.weight () y animal.height (), excepto el nuevo Bisonte africano que es demasiado fuerte y puede romper la pared, así que voy a agregar una propiedad más para la clase Animal: esAfricanBizon () y úsela al elegir el material y solo lo anule para la clase AfricanBizon. La siguiente persona viene y hace algo similar y lo siguiente que sabes es que tienes todas estas propiedades específicas para algún subconjunto de la jerarquía en la clase base.
¿Cuál es una buena manera de mejorar / refactorizar dicho código? Una alternativa aquí sería usar dynamic_casts para verificar los tipos, pero eso abarrota a las personas que llaman y agrega un montón de if-then-else por todas partes. Puede tener interfaces más específicas aquí, pero si todo lo que tiene es la referencia de clase base que tampoco ayuda mucho. ¿Cualquier otra sugerencia? Ejemplos?
¡Gracias!