Ir al contenido

Diferencia entre revisiones de «Covarianza y contravarianza (ciencias de la computación)»

De Wikipedia, la enciclopedia libre
Contenido eliminado Contenido añadido
Ikanor (discusión · contribs.)
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

  1. a b John C. Reynolds (1981). North-Holland, ed. The Essence of Algol. Symposium on Algorithmic Languages. 
  2. 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)