«Полиморфизм - это не то же самое, что перегрузка метода или переопределение метода». - PullRequest
8 голосов
/ 17 декабря 2010

"Полиморфизм - это не то же самое, что перегрузка метода или переопределение метода. ... Ни ... ни сами по себе реализации полиморфизма".

Это цитата из wikipedia

Однако в книге «Объектно-ориентированное программирование» Тимоти Бадд утверждает, что существуют «четыре различные формы полиморфизма»:

  • перегрузка (специальный полиморфизм)

  • переопределение (полиморфизм включения)

  • полиморфная переменная (полиморфизм назначения)

  • универсальные

Кто прав?Спасибо

Ответы [ 3 ]

3 голосов
/ 31 января 2011

Полиморфизм - это характеристика или особенность языков программирования.Языки программирования либо поддерживают это, либо нет.Поскольку языки программирования подпадают под действие иногда существенно различных парадигм, разные парадигмы (функциональное программирование или объектно-ориентированное программирование) могут иметь несколько разные интерпретации, и применение HOW полиморфизма выражается в этой конкретной парадигме.

Насколько яЗнаете, в ООП полиморфизм считается одним из основных принципов и очень отличительным.Большинство объектно-ориентированных языков имеют полиморфизм среди многих своих особенностей.В двух словах, полиморфизм лучше всего проявляется, когда вызывающая сторона объекта с полиморфной реализацией не знает точный тип объекта.Это часто является следствием наследования и приведения, также называется полиморфизм подтипа и работает с использованием vTables .

Я разделяю идею (наряду со многими авторами), что перегрузка операторов является проявлением полиморфизма.Таким образом, если вы перегружаете оператор == для получения TypeA == TypeB, вы фактически интерпретируете TypeB как TypeA, если сравниваете элементы в списке, содержащем случайные элементы типов A или B, вас не волнует, что получится,так как все они могут быть рассмотрены на равенство.Как и во многих других дебатах, у этого есть защитники и ненавистники.

Но это конец истории для ООП.

В функциональных (декларативных) языках (Lisp, F #), поскольку граждане первого класса являютсяФункции (против объектов) полиморфизм выражается через отношения между функциями и проявляется немного по-другому.См. Тип Полиморфизм

Последнее слово, которое я хочу сказать, это то, что я люблю Википедию так же, как и все остальные, но вы всегда должны брать статьи с крошкой соли и никогда не доверять имвслепую без подтверждения других источников.Если вы хотите узнать правду об истинных принципах ООП, вам следует начать здесь:

Построение объектно-ориентированного программного обеспечения (Бертран Мейер)

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

Я оставлю точные определения кому-то, кто знает лучше (с точки зрения полного пуризма), но с чисто семантической точки зрения эти утверждения не обязательно противоречат друг другу.

Одинперечисление «четырех разных форм» чего-либо, а другой говорит, что две из этих четырех форм «сами по себе» не составляют предмет.Можно утверждать, что автор «четырех форм» не обязательно говорит, что каждая из этих форм сама по себе является «полным» примером целого, но что они являются компонентами.


сказал, я думаю, что автор «четырех форм» является более правильным, и автор википедии, возможно, просто пытается что-то немного разобрать.Как и ты.: Р

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

Я полагаю, что одно из лучших определений полиморфизма, которое я видел, относится к типу объекта, обнаруживаемому во время выполнения.Кажется, это подчеркивает, что тип среды выполнения объектов может отличаться от объявленного типа и что методы, вызываемые для объекта, будут сопоставляться в процессе выполнения.

...