Ich habe einen Code, in dem ein gutes Vererbungsmodell nicht mehr funktioniert, und ich versuche zu verstehen, warum und wie das Problem behoben werden kann. Stellen Sie sich vor, Sie haben eine Zoo-Hierarchie mit:
class Animal
class Parrot : Animal
class Elephant : Animal
class Cow : Animal
etc.
Sie haben Ihre Methoden eat (), run () usw. und alles ist gut. Dann kommt eines Tages jemand vorbei und sagt: Unsere CageBuilder-Klasse funktioniert hervorragend und verwendet animal.weight () und animal.height (), mit Ausnahme des neuen afrikanischen Bisons, der zu stark ist und die Wand zertrümmern kann eine weitere Eigenschaft für die Animal-Klasse - isAfricanBizon (). Verwenden Sie diese Eigenschaft bei der Auswahl des Materials und überschreiben Sie sie nur für die AfricanBizon-Klasse. Die nächste Person kommt und macht etwas Ähnliches, und als nächstes wissen Sie, dass Sie all diese Eigenschaften haben, die für eine Teilmenge der Hierarchie in der Basisklasse spezifisch sind.
Was ist ein guter Weg, um solchen Code zu verbessern / umzugestalten? Eine Alternative wäre hier, nur dynamic_casts zu verwenden, um nach den Typen zu suchen, aber das überfrachtet die Anrufer und fügt überall eine Menge Wenn-Dann-Anderer hinzu. Sie können hier spezifischere Schnittstellen haben, aber wenn Sie nur die Basisklassenreferenz haben, hilft das auch nicht viel. Irgendwelche anderen Vorschläge? Beispiele?
Vielen Dank!