Ограниченная количественная оценка
В типов теории ограниченная квантификация (также ограниченный полиморфизм или ограниченная универсальность ) относится к универсальным или экзистенциальным кванторам , которые ограничены («ограничены») диапазоном только подтипов определенного типа. Ограниченная количественная оценка — это взаимодействие параметрического полиморфизма с подтипированием . Ограниченная количественная оценка традиционно изучалась в функциональной настройке System F <: , но доступна в современных объектно-ориентированных языках, поддерживающих параметрический полиморфизм ( дженерики ), таких как Java , C# и Scala .
Обзор
[ редактировать ]Цель ограниченной количественной оценки — позволить полиморфным функциям зависеть от некоторого конкретного поведения объектов вместо наследования типов . Он предполагает модель на основе записей для классов объектов, где каждый член класса является элементом записи, а все члены класса являются именованными функциями. Атрибуты объекта представлены как функции, которые не принимают аргументов и возвращают объект. Конкретное поведение — это имя некоторой функции вместе с типами аргументов и типом возвращаемого значения. Ограниченная количественная оценка рассматривает все объекты с такой функцией. Примером может служить полиморфный min
функция, которая рассматривает все объекты, сравнимые друг с другом. [ нужна ссылка ]
F-ограниченная количественная оценка
[ редактировать ]F -ограниченная количественная оценка или рекурсивно ограниченная количественная оценка , представленная в 1989 году, позволяет более точно типизировать функции, которые применяются к рекурсивным типам. Рекурсивный тип — это тип, который включает функцию, которая использует его в качестве типа для некоторого аргумента или его возвращаемого значения. [1]
Пример
[ редактировать ]Ограничение типа такого рода может быть выражено в Java с помощью универсального интерфейса. В следующем примере показано, как описывать типы, которые можно сравнивать друг с другом, и использовать их в качестве информации о типизации в полиморфных функциях . Test.min
Функция использует простую ограниченную количественную оценку и не обеспечивает взаимное сравнение объектов, в отличие от функции Test.fMin
функция, которая использует F-ограниченную количественную оценку.
В математической записи типы двух функций таковы:
- мин: ∀ T, ∀ S ⊆ {compareTo: T → int}. С → С → С
- fMin: ∀ T ⊆ Comparable[T]. Т → Т → Т
где
- Comparable[T] = {compareTo: T → int}
interface Comparable<T> {
int compareTo(T other);
}
public class Integer implements Comparable<Integer> {
@Override
public int compareTo(Integer other) {
// ...
}
}
public class String implements Comparable<String> {
@Override
public int compareTo(String other) {
// ...
}
}
public class Test {
public static void main(String[] args) {
final String a = min("cat", "dog");
final Integer b = min(10, 3);
final Comparable c = min("cat", 3); // Throws ClassCastException at runtime
final String str = fMin("cat", "dog");
final Integer i = fMin(10, 3);
// final Object o = fMin("cat", 3); // Does not compile
}
public static <S extends Comparable> S min(S a, S b) {
if (a.compareTo(b) <= 0) {
return a;
} else {
return b;
}
}
public static <T extends Comparable<T>> T fMin(T a, T b) {
if (a.compareTo(b) <= 0) {
return a;
} else {
return b;
}
}
}
См. также
[ редактировать ]- Ковариантность и контравариантность (информатика)
- Любопытно повторяющийся шаблон шаблона
- Подстановочный знак (Java)
Примечания
[ редактировать ]- ^ F -ограниченный полиморфизм для объектно-ориентированного программирования. Каннинг, Кук , Хилл, Олтхоф и Митчелл . http://dl.acm.org/citation.cfm?id=99392
Ссылки
[ редактировать ]- Карделли, Лука ; Вегнер, Питер (декабрь 1985 г.). «О понимании типов, абстракции данных и полиморфизме» (PDF) . Обзоры вычислительной техники ACM . 17 (4): 471–523. CiteSeerX 10.1.1.117.695 . дои : 10.1145/6041.6042 . ISSN 0360-0300 . S2CID 2921816 .
- Питер С. Каннинг , Уильям Р. Кук , Уолтер Л. Хилл , Джон К. Митчелл и Уильям Олтхофф . «F-ограниченный полиморфизм для объектно-ориентированного программирования» . На конференции по функциональным языкам программирования и компьютерной архитектуре , 1989 г.
- Бенджамин К. Пирс «Типы пересечений и ограниченный полиморфизм». Конспект лекций по информатике 664 , 1993.
- Гилад Брача , Мартин Одерски , Дэвид Стаутамир и Филип Уодлер . «Сделаем будущее безопасным для прошлого: добавление универсальности к языку программирования Java». В объектно-ориентированном программировании: системы, языки, приложения (OOPSLA). АКМ, октябрь 1998 г.
- Эндрю Кеннеди и Дон Сайм . «Проектирование и реализация универсальных шаблонов для общеязыковой среды выполнения .NET». В «Проектировании и реализации языков программирования» , 2001 г.
- Пирс, Бенджамин К. (2002). Типы и языки программирования . МТИ Пресс. ISBN 978-0-262-16209-8 . , Глава 26: Ограниченная количественная оценка
Внешние ссылки
[ редактировать ]- Ограниченный полиморфизм в репозитории шаблонов Портленда
- «F-ограниченный полиморфизм» на языке Сесила: спецификация и обоснование