Qu'est-ce qu'un mixin?
En programmation informatique, un mixin est une classe qui est héritée par une autre classe mais qui n'est pas censée être instanciée. Une même classe peut hériter de nombreux mixins, ce qui permet de consolider facilement de nombreuses collections de fonctions. Bien que de nombreux langages de programmation courants utilisent la méthodologie mixin, de nombreux autres ne le font pas, notamment C ++ et Java. En général, les mixins se trouvent dans des langages de script ou dans des langages pouvant créer des scripts, tels que JavaScript et Perl.
Les mixins sont uniques en ce qu'ils font partie d'une sous-classe lors de la compilation. Leurs méthodes et constantes sont incluses dans la sous-classe. Un autre trait unique des classes mixin est que les méthodes peuvent être définies et liées à des objets lors de l'exécution. La plupart des langages utilisent une approche différente, liant et définissant des méthodes au moment de la compilation plutôt qu'au moment de l'exécution. Cette liaison d'exécution permet aux mixins d'être très flexibles.
Un problème courant dans l'héritage multiple est l'ambiguïté dans l'appel de méthode, et les mixins peuvent résoudre ce problème car ils ne suivent pas exactement les mêmes règles que l'héritage multiple. Par exemple, l'héritage multiple peut créer ce que l'on appelle un "diamant de mort", dans lequel une classe parente A comporte les sous-classes B et C, et une classe D hérite des classes B et C. Le problème dans ce scénario est que les méthodes qui ont le même nom dans les classes A, B et C peut tous être hérité dans la classe D, créant ainsi plusieurs versions de la même méthode sans distinction claire. Les mixins résolvent ce problème en gardant chaque version de la méthode distincte, plutôt que d'essayer de les écraser comme dans l'héritage multiple standard.
Les mixins ne remplacent pas les méthodes des classes dans lesquelles elles sont héritées. Par exemple, si une classe A définit une méthode "myMethod" et hérite d'un mixin B qui définit également la méthode "myMethod", ces deux méthodes peuvent toujours être appelées sans ambiguïté et l'implémentation de "myMethod" en classe A sera toujours complètement accessible. Le nom exact de ces méthodes dépend du langage dans lequel le mixin est implémenté.
Certains langages de programmation qui n'utilisent pas de mixins, tels que Java, utilisent des interfaces pour les imiter. Les interfaces de ces langages n'émulent pas toutes les fonctionnalités de mixins, car elles ne peuvent contenir que des constantes et des déclarations de méthodes. Les mixins, en revanche, peuvent contenir des implémentations complètes de méthodes. Les langues qui ne supportent pas les mixins ont souvent des alternatives viables qui peuvent être amenées à faire à peu près la même chose.