Ответы, которые вы получили, хороши и объясняют, что такое полиморфизм. Я думаю, что это также может помочь понять некоторые причины, по которым это полезно.
В некоторых языках, в которых отсутствует полиморфизм, вы сталкиваетесь с ситуациями, когда вы хотите выполнить концептуально одну и ту же операцию над разными типами объектов, в случаях, когда эта операция должна быть реализована по-разному для каждого типа. Например, в синтаксисе, похожем на python:
def dosomething(thing):
if type(thing)==suchandsuch:
#do some stuff
elif type(thing)==somesuch:
#do some other stuff
elif type(thing)==nonesuch:
#yet more stuff
С этим есть некоторые проблемы. Самый большой из них заключается в том, что это вызывает очень тесную связь и много повторений. Скорее всего, у вас будет такой же набор тестов во многих местах вашего кода. Что произойдет, если вы добавите новый тип, который должен поддерживать эту операцию? Вы должны найти каждое место, где у вас есть такое условное выражение, и добавить новую ветвь. И, конечно же, вы должны иметь доступ ко всему исходному коду, чтобы иметь возможность вносить эти изменения. Кроме того, такая условная логика многословна и трудна для понимания в реальных случаях.
Лучше иметь возможность просто написать:
thing.dosomething()
Помимо того, что он намного короче, это приводит к гораздо более слабой связи. Этот пример/объяснение ориентирован на традиционные объектно-ориентированные языки, такие как Python. Детали немного отличаются, скажем, в функциональных языках. Но большая часть общей полезности полиморфизма остается прежней.
person
Tagore Smith
schedule
24.07.2010