J'ai un code où un bon modèle d'héritage s'est dégradé et j'essaie de comprendre pourquoi et comment y remédier. Fondamentalement, imaginez que vous ayez une hiérarchie Zoo avec:
class Animal
class Parrot : Animal
class Elephant : Animal
class Cow : Animal
etc.
Vous avez vos méthodes eat (), run (), etc. et tout va bien. Puis un jour, quelqu'un arrive et dit - notre classe CageBuilder fonctionne très bien et utilise les animaux.weight () et animal.height (), à l'exception du nouveau bison d'Afrique qui est trop fort et peut briser le mur, donc je vais ajouter une propriété de plus pour la classe Animal - isAfricanBizon () et utilisez-la lors du choix du matériau et remplacez-la uniquement pour la classe AfricanBizon. La personne suivante vient et fait quelque chose de similaire et la prochaine chose que vous savez, c'est que toutes ces propriétés sont spécifiques à un sous-ensemble de la hiérarchie dans la classe de base.
Quelle est la bonne façon d'améliorer / refactoriser un tel code? Une alternative ici serait d'utiliser simplement dynamic_casts pour vérifier les types mais cela encombre les appelants et ajoute un tas de if-then-else partout. Vous pouvez avoir des interfaces plus spécifiques ici, mais si tout ce que vous avez est la référence de classe de base qui n'aide pas beaucoup non plus. D'autres suggestions? Exemples?
Merci!