Articulo de referencia

cuantificación acotada

En teoría de tipos , la cuantificación acotada (también conocida como polimorfismo acotado o genericidad restringida ) se refiere a cuantificadores universales o existenciales q...

En teoría de tipos , la cuantificación acotada (también conocida como polimorfismo acotado o genericidad restringida ) se refiere a cuantificadores universales o existenciales que están restringidos ("acotados") para abarcar únicamente los subtipos de un tipo particular. La cuantificación acotada es una interacción del polimorfismo paramétrico con la subtipificación . Tradicionalmente, la cuantificación acotada se ha estudiado en el contexto funcional del Sistema F <:, pero está disponible en lenguajes modernos orientados a objetos que admiten polimorfismo paramétrico ( genéricos ), como Java , C# y Scala .

Descripción general

El propósito de la cuantificación acotada es permitir que las funciones polimórficas dependan de un comportamiento específico de los objetos en lugar de la herencia de tipos . Presupone un modelo basado en registros para las clases de objetos, donde cada miembro de la clase es un elemento de registro y todos los miembros de la clase son funciones con nombre. Los atributos de los objetos se representan como funciones que no reciben argumentos y devuelven un objeto. El comportamiento específico es entonces un nombre de función junto con los tipos de los argumentos y el tipo de retorno. La cuantificación acotada considera todos los objetos con dicha función. Un ejemplo sería una minfunción polimórfica que considera todos los objetos que son comparables entre sí.

cuantificación acotada por F

La cuantificación acotada por F o cuantificación recursivamente acotada , introducida en 1989, permite una tipificación más precisa de las funciones que se aplican a tipos recursivos. Un tipo recursivo es aquel que presenta como constructor una función que lo utiliza como tipo para algún argumento, o el valor de retorno de un argumento funcional, o algún argumento del valor de retorno funcional de un argumento funcional, etc.: es decir, en posición positiva. [ 1 ]

Ejemplo

Este tipo de restricción de tipo se puede expresar en Java con una interfaz genérica. El siguiente ejemplo muestra cómo describir tipos que se pueden comparar entre sí y cómo usar esta información de tipado en funciones polimórficas . La Test::minfunción utiliza cuantificación acotada simple y no garantiza que los objetos sean comparables entre sí, a diferencia de la Test::fMinfunción que utiliza cuantificación acotada F.

En notación matemática, los tipos de las dos funciones son:

  • min:T,S{compararA:Tentero},SSS{\displaystyle {\texttt {min}}:\forall T,\forall S\subseteq \{{\texttt {compareTo}}:T\to {\texttt {int}}\},S\to S\to S}
  • fmin:TComparable<T>,TTT{\displaystyle {\texttt {fmin}}:\forall T\subseteq {\texttt {Comparable<}}T{\texttt {>}},T\to T\to T}

dónde Comparable<T>={compararA:Tentero}{\displaystyle {\texttt {Comparable<}}T{\texttt {>}}=\{{\texttt {compareTo}}:T\to {\texttt {int}}\}}

Considere las siguientes posibles declaraciones en java.lang:

paquete java.lang ;interfaz pública 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 ) { // ... } }

Luego, en uso:

paquete org.wikipedia.examples ;public class Test { 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 ; } }public static void main ( String [] args ) { String a = min ( "cat" , "dog" ); Integer b = min ( 10 , 3 ); Comparable c = min ( "cat" , 3 ); // Lanza ClassCastException en tiempo de ejecución String str = fMin ( "cat" , "dog" ); Integer i = fMin ( 10 , 3 ); // Object o = fMin("cat", 3); // No compila } }

Véase también

Notas

  1. Polimorfismo acotado por F para programación orientada a objetos. Canning, Cook , Hill, Olthof y Mitchell . http://dl.acm.org/citation.cfm?id=99392

Referencias