Was ist ein Mixin?
In der Computerprogrammierung ist ein Mixin eine Klasse, die von einer anderen Klasse geerbt wird, aber nicht als Instanz erstellt werden soll. Eine einzelne Klasse kann viele Mixins erben, sodass viele Funktionssammlungen einfach konsolidiert werden können. Obwohl viele gängige Programmiersprachen die Mixin-Methode verwenden, gibt es noch viele andere, einschließlich C ++ und Java. Im Allgemeinen befinden sich Mixins in Skriptsprachen oder in solchen Sprachen, in denen Skripts erstellt werden können, z. B. JavaScript und Perl.
Mixins sind insofern einzigartig, als sie beim Kompilieren Teil einer Unterklasse werden. Ihre Methoden und Konstanten sind in der Unterklasse enthalten. Ein weiteres einzigartiges Merkmal von Mixin-Klassen ist, dass Methoden zur Laufzeit definiert und an Objekte gebunden werden können. Die meisten Sprachen verwenden einen anderen Ansatz, binden und definieren Methoden zur Kompilierungszeit und nicht zur Laufzeit. Durch diese Laufzeitbindung können Mixins sehr flexibel eingesetzt werden.
Ein häufiges Problem bei der Mehrfachvererbung ist die Mehrdeutigkeit beim Methodenaufruf. Mixins können dieses Problem lösen, da sie nicht genau den gleichen Regeln folgen wie die Mehrfachvererbung. Zum Beispiel kann eine Mehrfachvererbung einen sogenannten "Diamanten des Todes" erzeugen, bei dem eine Elternklasse A die Unterklassen B und C hat und eine Klasse D von beiden Klassen B und C erbt. Das Problem in diesem Szenario sind die Methoden, die haben Der gleiche Name in den Klassen A, B und C kann in die Klasse D übernommen werden, wodurch mehrere Versionen derselben Methode ohne klare Unterscheidung erstellt werden. Mixins lösen dieses Problem, indem jede Version der Methode getrennt bleibt, anstatt zu versuchen, sie wie bei der standardmäßigen Mehrfachvererbung zu überschreiben.
Mixins überschreiben keine Methoden in Klassen, in die sie vererbt werden. Wenn beispielsweise eine Klasse A eine Methode "myMethod" definiert und ein Mixin B geerbt hat, das auch die Methode "myMethod" definiert, könnten beide Methoden weiterhin ohne Mehrdeutigkeit aufgerufen werden, und die Implementierung von "myMethod" in Klasse A wäre weiterhin möglich vollständig zugänglich. Wie genau diese Methoden aufgerufen werden, hängt von der Sprache ab, in der das Mixin implementiert ist.
Einige Programmiersprachen, die keine Mixins verwenden, wie z. B. Java, verwenden Schnittstellen, um diese zu imitieren. Schnittstellen in diesen Sprachen emulieren nicht die volle Funktionalität von Mixins, da Schnittstellen nur Konstanten und Methodendeklarationen enthalten können. Mixins hingegen können vollständige Implementierungen von Methoden enthalten. Diejenigen Sprachen, die Mixins nicht unterstützen, haben oft praktikable Alternativen, die dazu überredet werden können, ungefähr dasselbe zu tun.