Полиморфизм (информатика): различия между версиями
[непроверенная версия] | [непроверенная версия] |
Содержимое удалено Содержимое добавлено
→Полиморфизм подтипов: орфография (откат излишней макрозамены) |
м →Классификация: орфография |
||
Строка 59:
Двойственность содержания термина {{nobr|«''ad hoc полиморфизм''»}} долгие годы была заслуженной{{sfn|Wadler - How to make ad-hoc polymorphism less ad hoc|с=1-2}}. Стрэчи выбрал этот термин, руководствуясь первым значением — в работе он подчеркивает, что при {{nobr|ad hoc}} полиморфизме нет единого систематичного способа вывести тип результата из типа аргументов, и хотя возможно построение определённого набора правил для сужения спектра его поиска, но эти правила по своей природе являются спонтанными как по содержанию, так и по контексту применения{{sfn|Strachey - Fundamental Concepts|1967}}.
Действительно, [[ad hoc полиморфизм]] не является ''истинным'' полиморфизмом{{sfn|Cardelli - On Understanding Types|loc=1.3. Kinds of Polymorphism|с=6}}. [[Перегрузка функций]] даёт не «'''''значение''', имеющее множество типов''», а «'''''символ''', имеющий множество типов''», но значения, [[Идентификатор|идентифицируемые]] этим символом, имеют ''разные'' (потенциально
Тем не менее, определение специальных реализаций функций для разных типов в некоторых случаях является ''необходимостью'', а не случайностью. Классическими примерами служат реализация арифметических операций (физически различная для [[Целый тип|целых]] и [[Число с плавающей запятой|чисел с плавающей запятой]]) и {{iw|Интуиционистская теория типов#Равенство типов|равенства типов|en|Intuitionistic type theory#Equality type}}, которые на протяжении десятилетий не имели общепринятой универсальной формализации. Решением стали [[Класс типов|классы типов]]{{переход|#Классы типов|text}}, представляющие собой механизм явного дискретного перечисления допустимых значений [[Переменная типа|переменных типа]] для статической диспетчеризации в слое типов. Это сводит воедино две разновидности полиморфизма, разделённые Стречи, и «''делает {{nobr|ad hoc полиморфизм}} менее {{nobr|ad hoc}}''»{{sfn|Wadler - How to make ad-hoc polymorphism less ad hoc|с=1-2}} ([[игра слов|игра]] на двойственности смысла).
В отличие от [[перегрузка функций|перегрузки]] и [[приведение типов|приведения типов]], полиморфизм {{iw|Выделение подтипов данных|подтипов|en|Subtyping}}{{переход|#Полиморфизм подтипов|text}} является ''истинным'' полиморфизмом: объектами подтипа можно манипулировать единообразно, как если бы они они принадлежали к своим супертипам (но сказанное
== Основные разновидности полиморфизма ==
|