- Covariance and contravariance (computer science)
- Many programming language type systems support subtyping. For instance, if the type Cat is a subtype of Animal, then an expression of type Cat should be substitutable wherever an expression of type Animal is used.
Este contenido es algo con lo que te encontrarás naturalmente si eres desarrollador de compiladores,
si usas las API de un compilador,
o si usas excesivamente el sistema de tipos de un compilador.
Naturalmente, es algo con lo que te encontrarás en tu vida como programador.
Y se integra naturalmente en nuestra vida de codificación.
En pocas palabras, si tenemos dos tipos, Animal y Dog,
si Dog se asigna a Animal,es covarianzay
por el contrariosi Animal se asigna a Dog,es contravarianza.
Generalmente, no puedes asignar Animal a Dog.
Porque desde el punto de vista de la gente común no es apropiado,
por lo que los desarrolladores de compiladores, teniendo esto en cuenta,solo lo implementan enalgunas partes.
Por lo general, la contravarianza se usa para los valores de entrada de una función, mientras que la covarianza se mantiene para los valores de salida.
¿Por qué necesitamos esta contravarianza?Podrías preguntarte.
Esto ayuda a trabajar de manera más flexible y a mantener el polimorfismo en áreas como el manejo de eventos.
De hecho, la covarianza puede causar problemas.
En el código anterior, hemos logrado flexibilidad al usar Animal donde cabría Dog, permitiendo prestar atención al polimorfismo.
Por otro lado, si en lugar de Animal se usara un subtipo de Dog, como Chiwawa, al ejecutar el manejador de eventos, se produciría un error debido a la interfaz única de Chiwawa que no está presente en Dog.
De hecho, dado que usaremos el tipo Animal al ejecutar la función, podría parecer que simplemente estamos insertando el subtipo de Animal.
Podría parecer similar a asignar Dog a Animal.
Como se puede ver, la contravarianza se suele utilizar principalmente para los valores de entrada.
Invariabilidad, Inmutabilidad
En resumen, la invariabilidad permite tanto la covarianza como la contravarianza, mientras que la inmutabilidad no permite ninguna de las dos.
Para concluir
Este tema puede ser simple o complejo dependiendo del enfoque,
Por lo tanto, te recomiendo que lo leas directamente.
Comentarios0