En la teoría de tipos , la cuantificación acotada (también polimorfismo acotado o genérico restringido ) se refiere a cuantificadores universales o existenciales que están restringidos ("acotados") para abarcar sólo los subtipos de un tipo particular. La cuantificación limitada es una interacción del polimorfismo paramétrico con el subtipo . La cuantificación limitada se ha estudiado tradicionalmente en el entorno funcional del Sistema F <:, pero está disponible en lenguajes orientados a objetos modernos que admiten polimorfismo paramétrico ( genéricos) como Java , C # y Scala .
Descripción general
El propósito de la cuantificación limitada es permitir que las funciones polimórficas dependan de algún comportamiento específico de los objetos en lugar de la herencia de tipos . Asume un modelo basado en registros para 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 objeto se representan como funciones que no toman ningún argumento y devuelven un objeto. El comportamiento específico es entonces algún nombre de función junto con los tipos de argumentos y el tipo de retorno. La cuantificación acotada permite considerar todos los objetos con tal función. Un ejemplo sería una min
funció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 la cuantificación acotada recursivamente , introducida en 1989, permite una tipificación más precisa de funciones que se aplican a tipos recursivos. Un tipo recursivo es aquel que incluye una función que lo usa como tipo para algún argumento o su valor de retorno. [1]
Ejemplo
Este tipo de restricción de tipo se puede expresar en Java con una interfaz genérica. El siguiente ejemplo demuestra cómo describir tipos que se pueden comparar entre sí y usar esto como información de escritura en funciones polimórficas . La Test.min
función utiliza una cuantificación acotada simple y no conserva el tipo de los tipos asignados, a diferencia de la Test.Fmin
función que utiliza la cuantificación acotada por F.
En notación matemática, los tipos de las dos funciones son
- min: ∀ T, ∀ S ⊆ {compareTo: T → int}. S → S → S
- Fmin: ∀ T ⊆ Comparable [T]. T → T → T
dónde
- Comparable [T] = {compareTo: T → int}
interfaz Comparable < T > { public int compareTo ( T otro ); }class Integer implementa Comparable < Integer > { @Override public int compareTo ( Integer other ) { // ... } }class String implementa Comparable < String > { @Override public int compareTo ( String other ) { // ... } }class Test { public static void main ( String [] args ) { Comparable < String > a = min ( "gato" , "perro" ); < Integer > comparable b = min ( nuevo entero ( 10 ), nuevo entero ( 3 )); String str = Fmin ( "gato" , "perro" ); Entero i = Fmin ( nuevo entero ( 10 ), nuevo entero ( 3 )); } público estático < S extiende Comparable > S min ( S a , S b ) { if ( a . compareTo ( b ) <= 0 ) return a ; de lo contrario, vuelva b ; } público estático < T se extiende Comparable < T >> T Fmin ( T a , T b ) { if ( a . compareTo ( b ) <= 0 ) return a ; de lo contrario, vuelva b ; } }
Ver también
Notas
- ^ Polimorfismo limitado por F para programación orientada a objetos. Canning, Cook , Hill, Olthof y Mitchell . http://dl.acm.org/citation.cfm?id=99392
Referencias
- Cardelli, Luca ; Wegner, Peter (diciembre de 1985). "Sobre la comprensión de los tipos, la abstracción de datos y el polimorfismo" (PDF) . Encuestas de computación ACM . 17 (4): 471–523. CiteSeerX 10.1.1.117.695 . doi : 10.1145 / 6041.6042 . ISSN 0360-0300 .
- Peter S. Canning , William R. Cook , Walter L. Hill , John C. Mitchell y William Olthoff . "Polimorfismo limitado por F para programación orientada a objetos" . En Conferencia sobre Lenguajes de Programación Funcional y Arquitectura de Computadores , 1989.
- Benjamin C. Pierce "Tipos de intersección y polimorfismo acotado". Lecture Notes in Computer Science 664 , 1993.
- Gilad Bracha , Martin Odersky , David Stoutamire y Philip Wadler . "Hacer el futuro seguro para el pasado: agregar genérico al lenguaje de programación Java". En Programación Orientada a Objetos: Sistemas, Lenguajes, Aplicaciones (OOPSLA). ACM, octubre de 1998.
- Andrew Kennedy y Don Syme . "Diseño e Implementación de Genéricos para .NET Common Language Runtime". En Diseño e implementación de lenguajes de programación , 2001.
- Pierce, Benjamin C. (2002). Tipos y lenguajes de programación . Prensa del MIT. ISBN 978-0-262-16209-8., Capítulo 26: Cuantificación limitada
enlaces externos
- Polimorfismo acotado en el repositorio de patrones de Portland
- "Polimorfismo limitado por F" en el lenguaje Cecil: especificación y fundamento