- 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.
Dieser Inhalt begegnet einem ganz natürlich, wenn man Compiler-Entwickler ist oder die API eines Compilers verwendet oder wenn man das Typsystem eines Compilers übermäßig stark nutzt.
Er ist in unserem Programmieralltag ganz selbstverständlich integriert.
Wenn wir beispielsweise die beiden Typen Animal und Dog haben,
und Dog wird Animal zugewiesen, dann ist das Kovarianzund
umgekehrtwenn Animal Dog zugewiesen wird, dann ist das Kontravarianzen.
Normalerweise kann man Animal nicht Dog zuweisen.
Das erscheint aus der Sicht eines normalen Nutzers nicht sinnvoll,
daher achten Compiler-Entwickler darauf und implementieren Kontravarianzen nur in einigen Bereichen.
Normalerweise wird Kontravarianzen wie oben bei den Eingabeparametern von Funktionen verwendet, während für die Ausgabeparameter Kovarianz beibehalten wird.
Warum ist diese Kontravarianzen überhaupt notwendig?Das fragen Sie sich vielleicht.
Sie hilft dabei, in Bereichen wie der Ereignisbehandlung flexibler und polymorpher zu arbeiten.
Bei Kovarianz können hingegen Probleme auftreten.
Im obigen Code wird durch die Verwendung von Animal anstelle von Dog die Flexibilität erhöht und die Polymorphie berücksichtigt.
Wenn stattdessen ein Untertyp von Dog, z. B. Chiwawa, verwendet würde, würde bei der Ausführung des Event-Handlers aufgrund der in Dog nicht vorhandenen Chiwawa-spezifischen Schnittstelle ein Fehler auftreten.
Wenn die Funktion ausgeführt wird, kann man sagen: "Da der Typ Animal verwendet wird, wird der Untertyp von Animal automatisch eingesetzt."
Das kann den Eindruck erwecken, dass Dog Animal zugewiesen wird.
Normalerweise wird Kontravarianzen hauptsächlich für Eingabeparameter verwendet.
Invarianz, Invarianz
Kurz gesagt: Invarianz bedeutet, dass sowohl Kovarianz als auch Kontravarianzen möglich sind, während Invarianz bedeutet, dass keines von beiden möglich ist.
Abschließend
Dieser Inhalt ist einfach oder komplex, je nach Betrachtungsweise,
Es wäre vielleicht eine gute Idee, dies einmal selbst zu lesen.
Kommentare0