Поддерживает ли Ruby полиморфизм включения? - PullRequest
1 голос
/ 17 декабря 2010

Поддерживает ли Ruby «полиморфизм включения»?Это то же самое, что Duck Typing?

Если нет, то в чем разница между полиморфизмом и Duck Typing в Ruby?

Может кто-нибудь проиллюстрировать мой пример ниже:*

1 Ответ

0 голосов
/ 17 декабря 2010

Что ж, в вашем примере вы могли бы сказать, что каждый цикл работает благодаря типизации утки (в связи с тем, что клиентский код заботится только о том, может ли переменная создавать шум), но тот факт, что Cats и Birds могут создавать шум,теоретическое описание механизма подкласса, известного как полиморфизм.

Таким образом, вы можете сказать, что различие между полиморфизмом и типизацией уток заключается в том, что полиморфизм - это идея, что вы можете использовать объект, который претендует на то, чтобы быть определенным типом вместо другого в любых обстоятельствах, но типизация утки - этоИдея, что вас не волнует тип объекта, если он реализует определенный интерфейс.Так, например, в Java, если вы создаете подкласс Animal, вы можете ожидать, что он не только создает шум, но и будет иметь другое поведение, связанное с животными, в то время как в случае Ruby тот факт, что объект может создавать шум, нене зависит от типа, просто от существования конкретного метода.Конечно, в Java у вас есть концепция интерфейсов, которые предоставляют (статический) механизм для одного и того же шаблона.

Самым важным отличием ИМХО является различная философия программирования за именами, а не столько в самих концепциях.

Полагаю, все сводится к тому, что термин полиморфизм связан с более структурированными идеями ООП, в то время как Руби пришлось придумывать название для способа программирования, который имеет разные возможности и последствия.

...