fbpx
Wikipedia

Covarianza y contravarianza (ciencias de la computación)

La covarianza y la contravarianza son propiedades de la relación entre dos tipos compuestos, e indican si se mantiene o se invierte la relación de orden entre los tipos que los componen. Tienen especial relevancia en el diseño de lenguajes tipados, puesto que determinan cuándo es posible sustituir un tipo determinado por un subtipo o un supertipo.

Sea por ejemplo un sistema de tipos en el que int y float identifican a los números enteros y racionales, respectivamente, que además guardan una relación de orden int ≤ float, indicando que int es un subtipo de float. Sea también int⟶ el tipo de una función que acepta un parámetro de tipo int. Si el sistema de tipos permite usar una función float⟶ en cualquier lugar donde se necesita una función int⟶, se dice entonces que las funciones son contravariantes en los argumentos, puesto que float⟶ ≤ int⟶ y en el tipo compuesto se invierte la relación de orden entre los tipos simples int ≤ float. Si en cambio se tiene una función ⟶float que devuelve un racional, y el sistema de tipos permite usar una función ⟶int que devuelve un entero en su lugar, entonces ⟶int ≤ ⟶float, y se dice que las funciones son covariantes en los valores de retorno.[1][2]

En los lenguajes modernos se suele hablar de varianza,[3][4]​ y aplica no sólo a las relaciones de subtipado entre funciones libres, si no también a cómo funciona la especialización de métodos en subclases,[5]​ o a cómo de restrictivos son los parámetros en los tipos compuestos que contienen genéricos.[4]

Formalización

Sean   y   dos tipos simples en un sistema de tipos, y sean   e   dos tipos construidos sobre   y   respectivamente. Si   es una relación de orden que indica subtipado, y además  , se dice que:[2]

  •   es covariante si  
  •   es contravariante si  
  •   es invariante si no es covariante ni contravariante.

e   se denomina en este contexto una frase o constructor de tipos. Nótese que si   se construye con más de un parámetro puede ser covariante o contravariante de forma indistinta en cada uno de ellos.[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 orientado a objetos.[6]​ Giuseppe Castagna usa ya la nomenclatura moderna en su estudio sobre los fundamentos de la orientación a objetos.[2]

C++ incluirá métodos covariantes en los tipos de retorno en su modelo de herencia en 1998,[7]​ y Java hará lo propio en su versión 1.5 liberada en 2004.[8]

Referencias

  1. John C. Reynolds (1981). North-Holland, ed. The Essence of Algol. Symposium on Algorithmic Languages. 
  2. Giuseppe, Castagna (1996). Object-Oriented Programming A Unified Foundation. Birkhäuser Boston. p. 154–155. ISBN 9781461241386. OCLC 840279585. 
  3. «Variances | Scala Documentation». docs.scala-lang.org. Consultado el 8 de octubre de 2017. 
  4. «Generics: in, out, where - Kotlin Programming Language». Kotlin. Consultado el 8 de octubre de 2017. 
  5. Howard, Mark; Bezault, Eric; Meyer, Bertrand; Colnet, Dominique; Stapf, Emmanuel; Arnout, Karine; Keller, Markus (abril de 2003). «Type-safe covariance: Competent compilers can catch all catcalls». Consultado el 8 de octubre de 2017. 
  6. 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)
  7. Allison. . Archivado desde el original el 27 de mayo de 2012. Consultado el 8 de octubre de 2017. 
  8. Sanghera, Paul (30 de noviembre de 2006). SCJP Exam for J2SE 5: A Concise and Comprehensive Study Guide for The Sun Certified Java Programmer Exam (en inglés). Apress. p. 140. ISBN 9781430201731. Consultado el 8 de octubre de 2017. 
  •   Datos: Q362031

covarianza, contravarianza, ciencias, computación, covarianza, contravarianza, propiedades, relación, entre, tipos, compuestos, indican, mantiene, invierte, relación, orden, entre, tipos, componen, tienen, especial, relevancia, diseño, lenguajes, tipados, pues. La covarianza y la contravarianza son propiedades de la relacion entre dos tipos compuestos e indican si se mantiene o se invierte la relacion de orden entre los tipos que los componen Tienen especial relevancia en el diseno de lenguajes tipados puesto que determinan cuando es posible sustituir un tipo determinado por un subtipo o un supertipo Sea por ejemplo un sistema de tipos en el que int y float identifican a los numeros enteros y racionales respectivamente que ademas guardan una relacion de orden int float indicando que int es un subtipo de float Sea tambien int el tipo de una funcion que acepta un parametro de tipo int Si el sistema de tipos permite usar una funcion float en cualquier lugar donde se necesita una funcion int se dice entonces que las funciones son contravariantes en los argumentos puesto que float int y en el tipo compuesto se invierte la relacion de orden entre los tipos simples int float Si en cambio se tiene una funcion float que devuelve un racional y el sistema de tipos permite usar una funcion int que devuelve un entero en su lugar entonces int float y se dice que las funciones son covariantes en los valores de retorno 1 2 En los lenguajes modernos se suele hablar de varianza 3 4 y aplica no solo a las relaciones de subtipado entre funciones libres si no tambien a como funciona la especializacion de metodos en subclases 5 o a como de restrictivos son los parametros en los tipos compuestos que contienen genericos 4 Formalizacion EditarSean A displaystyle A y B displaystyle B dos tipos simples en un sistema de tipos y sean I lt A gt displaystyle I lt A gt e I lt B gt displaystyle I lt B gt dos tipos construidos sobre A displaystyle A y B displaystyle B respectivamente Si displaystyle leq es una relacion de orden que indica subtipado y ademas A B displaystyle A leq B se dice que 2 I displaystyle I es covariante si I lt A gt I lt B gt displaystyle I lt A gt leq I lt B gt I displaystyle I es contravariante si I lt B gt I lt A gt displaystyle I lt B gt leq I lt A gt I displaystyle I es invariante si no es covariante ni contravariante e I displaystyle I se denomina en este contexto una frase o constructor de tipos Notese que si I displaystyle I se construye con mas de un parametro puede ser covariante o contravariante de forma indistinta en cada uno de ellos 1 Historia EditarAunque 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 orientado a objetos 6 Giuseppe Castagna usa ya la nomenclatura moderna en su estudio sobre los fundamentos de la orientacion a objetos 2 C incluira metodos covariantes en los tipos de retorno en su modelo de herencia en 1998 7 y Java hara lo propio en su version 1 5 liberada en 2004 8 Referencias Editar a b c John C Reynolds 1981 North Holland ed The Essence of Algol Symposium on Algorithmic Languages a b c Giuseppe Castagna 1996 Object Oriented Programming A Unified Foundation Birkhauser Boston p 154 155 ISBN 9781461241386 OCLC 840279585 Variances Scala Documentation docs scala lang org Consultado el 8 de octubre de 2017 a b Generics in out where Kotlin Programming Language Kotlin Consultado el 8 de octubre de 2017 Howard Mark Bezault Eric Meyer Bertrand Colnet Dominique Stapf Emmanuel Arnout Karine Keller Markus abril de 2003 Type safe covariance Competent compilers can catch all catcalls Consultado el 8 de octubre de 2017 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 Version ampliada en Information and Computation 76 2 3 138 164 febrero 1988 Allison What s New in Standard C Archivado desde el original el 27 de mayo de 2012 Consultado el 8 de octubre de 2017 Sanghera Paul 30 de noviembre de 2006 SCJP Exam for J2SE 5 A Concise and Comprehensive Study Guide for The Sun Certified Java Programmer Exam en ingles Apress p 140 ISBN 9781430201731 Consultado el 8 de octubre de 2017 Datos Q362031 Obtenido de https es wikipedia org w index php title Covarianza y contravarianza ciencias de la computacion amp oldid 140894427, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos