Eu tenho algum código em que um bom modelo de herança desceu e estou tentando entender por que e como corrigi-lo. Basicamente, imagine que você tenha uma hierarquia de zoológico com:
class Animal
class Parrot : Animal
class Elephant : Animal
class Cow : Animal
etc.
Você tem seus métodos eat (), run (), etc e tudo é bom. Então, um dia, alguém aparece e diz - nossa classe CageBuilder funciona muito bem e usa o animal.weight () e animal.height (), exceto o novo bisonte africano, que é muito forte e pode quebrar a parede, então vou acrescentar mais uma propriedade para a classe Animal - isAfricanBizon () e use-a ao escolher o material e substitua-o apenas pela classe AfricanBizon. A próxima pessoa vem e faz algo semelhante e, em seguida, você sabe que possui todas essas propriedades específicas para algum subconjunto da hierarquia na classe base.
Qual é uma boa maneira de melhorar / refatorar esse código? Uma alternativa aqui seria usar apenas dynamic_casts para verificar os tipos, mas isso atrapalha os chamadores e adiciona um monte de if-then-else em todo o lugar. Você pode ter interfaces mais específicas aqui, mas se tudo o que você tem é a referência da classe base que também não ajuda muito. Alguma outra sugestão? Exemplos?
Obrigado!