Diferencia entre revisiones de «Covarianza y contravarianza (ciencias de la computación)»
Creada con concepto y ejemplos Etiqueta: sin categorizar |
(Sin diferencias)
|
Revisión del 00:53 8 oct 2017
La covarianza y la contravarianza son propiedades de las relaciones entre dos tipos compuestos, y que indican si se mantiene o se invierte la relación de orden entre los tipos que los componen.
Sean por ejemplo int
y float
los tipos que identifican a los números enteros y flotantes, respectivamente, que además guardan una relación de orden int ≤ float
(int
es un subtipo de float
). Sea también f(int)
una función que acepta un parámetro de tipo int
. Si el sistema de tipos permite usar una función f(float)
en cualquier lugar donde se necesita una función f(int)
, se dice entonces que las funciones son contravariantes para los argumentos, puesto que f(float) ≤ f(int)
y e el tipo compuesto se invierte la relación de orden entre los tipos simples int ≤ float
. Si en cambio se tiene la función f()⟶float
que devuelve un flotante, y el sistema de tipos permite usar una función f()⟶int
que devuelve un entero en su lugar, entonces f()⟶int ≤ f()⟶float
, y se dice que las funciones son covariantes para los valores de retorno. [1]
Historia
Aunque no con la nomenclatura actual, el concepto ya fue descrito por John C. Reynolds en ALGOL68 [1] y aplicado por Luca Cardelli a su modelo de registros. [2].
Referencias
- ↑ a b John C. Reynolds (1981). North-Holland, ed. The Essence of Algol. Symposium on Algorithmic Languages.
- ↑ Luca Cardelli (1984). Springer, ed. A semantics of multiple inheritance. Semantics of Data Types (International Symposium Sophia-Antipolis, France, June 27 – 29, 1984). Lecture Notes in Computer Science 173. doi:10.1007/3-540-13346-1_2. (Versión ampliada en Information and Computation, 76(2/3): 138-164, febrero 1988)