Полиморфизм (информатика): различия между версиями

[отпатрулированная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
Строка 234:
}}</ref>.
 
Некоторые языки используют своебразныесвоеобразные [[ad hoc]]-решения. Например, [[система типов]] языка [[С++]] предусматривает автоматическое [[приведение типов]] (то есть является [[сильная и слабая типизация|слабой]]), {{nobr|не [[полиморфизм типов|полиморфная]]}}, эмулирует {{iw|Выделение подтипов данных|выделение подтипов|en|Subtyping}} через {{iw|Манифестная типизация|манифестное|en|Manifest typing}} наследование с [[Ковариантность и контравариантность (программирование)|инвариантными]] сигнатурами методов и не поддерживает абстракцию типов (не путать с [[Сокрытие (программирование)|сокрытием]] полей). [[наследование (программирование)|Наследование]] в [[С++]] реализуется набором {{nobr|ad hoc-механизмов}}, однако, его использование называется в сообществе языка «полиморфизмом» (а [[Сокрытие (программирование)|сокрытие]] полей — «абстракцией»{{sfn|Joyner|1996|loc=2.8 Encapsulation|с=8}}). Имеется возможность управлять графом наследования: [[ромбовидное наследование]] в С++ называется «''виртуальным наследованием''» и задаётся явным атрибутом <code>virtual</code>; по умолчанию же осуществляется дублирование унаследованных полей с доступом к ним по квалифицированному имени. Использование такого языка может быть [[типобезопасность|небезопасно]] — нельзя гарантировать устойчивость программ{{sfn|Mitchel - Concepts in Programming Languages|2004|loc=6.2.1 Type Safety|с=132-133}}{{sfn|Joyner|1996|loc=3.38 Signature Variance|с=35}} (язык называется [[типобезопасность|безопасным]], если программы на нём, которые могут быть приняты компилятором как правильно построенные, в динамике никогда не выйдут за рамки допустимого поведения{{sfn|Harper - Practical Foundations for Programming Languages|loc=Chapter 4. Statics|с=35}}).
 
==== Подтипизация высшего порядка ====