избегание RTTI в объектно-ориентированном дизайне

Недавно я увидел на каком-то форуме вопрос по объектно-ориентированному дизайну и начал думать об использовании RTTI. Однако это должно быть плохой дизайн, но я не могу придумать альтернативы. Вот простой вопрос:

Создайте программу на C ++ для следующего сценария, используя объектно-ориентированные концепции -

Моя собака по имени Бадди живет на заднем дворе. Он лает по ночам, когда видит приехавшую в гости кошку или белку. Если он видит лягушку и голоден, он ее ест. Если он видит лягушку и не голоден, он играет с ней. Если он уже съел 2 лягушек и все еще голоден, он отпустит их. Если он видит койота, он взывает о помощи. Иногда его друг Спот останавливается, и они преследуют друг друга. Если он видит любое другое животное, он просто наблюдает за ним. Я ожидал, что у вас будет класс животных и класс кошек, собак, белок, койотов, унаследованный от класса животных.

Я начал думать о том, чтобы иметь метод see () в классе dog, который принимает аргумент Animal, а затем проверяет фактический тип объекта (лягушка, кошка и т. Д.) И предпринимает необходимые действия - воспроизведение, погоня и т. Д. В зависимости от актуальный тип. Однако для этого потребуется RTTI, который должен иметь плохой дизайн.Может ли кто-нибудь предложить лучший дизайн, который позволил бы избежать RTTI, а также указать на ошибку в моем мышлении?

10
задан Mahesh 15 February 2012 в 03:11
поделиться