Ograniczonym ilościowe - Bounded quantification

W teorii typu , ograniczony ilościową (również ograniczonym polimorfizmem lub ograniczone genericity ) dotyczy uniwersalnych lub kwantyfikatorów egzystencjalnych które są ograniczone ( „ograniczony”), które wahają się tylko nad podtypami określonego typu. Ograniczonym kwantyfikacja jest oddziaływanie parametrycznej polimorfizmu z podtypy . Ograniczonym ilościowe tradycyjnie badano w funkcjonalnej ustawienia systemu F <: , ale jest dostępna w nowoczesnych języków obiektowych wspierających parametrycznych polimorfizmu ( rodzajowych ), takich jak Java , C # i Scala .

Przegląd

Celem ograniczonego kwantyfikacji jest umożliwienie funkcje polimorficzne zależeć od jakiegoś określonego zachowania obiektów zamiast typu dziedziczenia . Zakłada ona, model oparty na rekordowy klas obiektów, gdzie każdy element jest elementem klasy rekord i wszyscy członkowie klasy są nazwane funkcje. Atrybuty obiektu są reprezentowane jako funkcji, które mają żadnego dowodu i powrót obiekt. Specyficzne zachowanie jest wtedy jakiś nazwa funkcji wraz z typami argumentów i typ zwracany. Ograniczonym ilościowa pozwala uważa wszystkie obiekty o takiej funkcji. Przykładem może być polimorficzne minfunkcja uważa wszystkich obiektów, które są ze sobą porównywalne.

F-ilościowe ograniczone

F -bounded ilościowe lub rekurencyjnie ograniczony kwantyfikacji , wprowadzony w 1989 roku, pozwala na bardziej precyzyjne pisanie funkcji, które są stosowane na rekurencyjnych typów. Cykliczna jest typu, który zawiera funkcję, która używa jako pewnego rodzaju argumentu lub wartość powrotną.

Przykład

Ten rodzaj typu ograniczenia mogą być wyrażone w języku Java z rodzajowego interfejsu. Poniższy przykład pokazuje, jak opisać typy, które mogą być porównywane ze sobą i używać tego jako wpisując informacje w funkcji polimorficznych . Test.minFunkcja używa prostego ograniczone ilościowe i nie zachowuje typ przypisanych typów, w przeciwieństwie do Test.Fminfunkcji, która wykorzystuje F-ograniczony kwantyfikacji.

W zapisie matematycznym, rodzaje tych dwóch funkcji są

min: ∀ T ∀ S ⊆ {compareTo T → Int}. → S S S →
Fmin: ∀ T ⊆ porównawczych [t]. T → T → T

gdzie

Porównywalne [T] = {compareTo T → Int}
interface Comparable<T> {
  public int compareTo(T other);
}

class Integer implements Comparable<Integer> {
  @Override
  public int compareTo(Integer other) {
    //...
  }
}

class String implements Comparable<String> {
  @Override
  public int compareTo(String other) {
    //...
  }
}

class Test {
  public static void main(String[] args) {
    Comparable<String> a = min("cat", "dog");
    Comparable<Integer> b = min(new Integer(10), new Integer(3));
    String str = Fmin("cat", "dog");
    Integer i = Fmin(new Integer(10), new Integer(3));
  }
  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;
  }
}

Zobacz też

Uwagi

Referencje

  • Cardelli Luca ; Wegner, Piotr (grudzień 1985). „Na Zrozumienie typów danych abstrakcji i Polimorfizm” (PDF) . Sondaże ACM Computing . New York, NY, USA: ACM . 17 (4): 471 & ndash, 523. doi : 10,1145 / 6041,6042 . ISSN  0360-0300 .
  • Peter S. Canning , William R. Cooka , Walter L. Hill , John C. Mitchell i William Olthoff . „F-ograniczony polimorfizm programowania obiektowego” . W konferencji na temat języków programowania funkcyjnego i Computer Architecture 1989.
  • Benjamin C. Pierce „typy skrzyżowania i polimorfizm ograniczonym”. Lecture Notes in Computer Science 664 , 1993.
  • Gilad Bracha , Martin Odersky , David Stoutamire i Philip Wadler . „Making przyszłość bezpieczna dla ostatniego: Dodawanie genericity do języka programowania Java”. W obiektowego Programowanie: Systems, języki, Aplikacje (OOPSLA). ACM, październik 1998 r. W
  • Andrew Kennedy i Don Syme . „Opracowanie i wdrożenie rodzajowych dla .NET Common Language Runtime”. W Programming Language Projektowania i Realizacji 2001r.
  • Pierce Benjamin C. (2002). Rodzaje i Języki programowania . MIT Press. ISBN  0-262-16209-1 .Rozdział 26: Ograniczone kwantyfikacji

Linki zewnętrzne