У меня есть код, где хорошая модель наследования пошла под откос, и я пытаюсь понять, почему и как это исправить. По сути, представьте, что у вас есть иерархия Zoo с:
class Animal
class Parrot : Animal
class Elephant : Animal
class Cow : Animal
и т.п.
У вас есть методы eat (), run () и т. Д., И все хорошо. Затем однажды кто-то приходит и говорит - наш класс CageBuilder работает отлично и использует animal.weight () и animal.height (), за исключением нового африканского бизона, который слишком силен и может разрушить стену, поэтому я добавлю еще одно свойство класса Animal - isAfricanBizon (), которое используется при выборе материала и переопределяет его только для класса AfricanBizon. Следующий человек приходит и делает что-то подобное, и в следующий раз вы знаете, что у вас есть все эти свойства, специфичные для некоторого подмножества иерархии в базовом классе.
Какой хороший способ улучшить / реорганизовать такой код? Одна альтернатива здесь будет состоять в том, чтобы просто использовать dynamic_casts для проверки типов, но это загромождает вызывающих и добавляет кучу if-then-else повсеместно. Здесь вы можете иметь более специфичные интерфейсы, но если все, что у вас есть, это ссылка на базовый класс, которая тоже мало поможет Любые другие предложения? Примеры?
Благодарность!