O que é um Mixin?
Na programação de computadores, um mixin é uma classe que é herdada por outra classe, mas não deve ser instanciada. Uma única classe pode herdar muitos mixins, e muitas coleções de funções podem ser consolidadas facilmente. Embora muitas linguagens de programação comuns usem a metodologia mixin, há muito mais que não, incluindo C ++ e Java. Em geral, os mixins são encontrados em linguagens de script ou nos idiomas que têm a capacidade de criar scripts, como JavaScript e Perl.
Os mixins são únicos, pois se tornam parte de uma subclasse durante a compilação. Seus métodos e constantes estão incluídos na subclasse. Outra característica única das classes mixin é que os métodos podem ser definidos e vinculados a objetos em tempo de execução. A maioria dos idiomas usa uma abordagem diferente, métodos de ligação e definição em tempo de compilação, em vez de tempo de execução. Essa ligação de tempo de execução permite que os mixins sejam muito flexíveis.
Um problema comum na herança múltipla é a ambiguidade na chamada de método, e os mixins podem resolver esse problema porque eles não seguem exatamente as mesmas regras que a herança múltipla. Por exemplo, herança múltipla pode criar o chamado "diamante da morte", em que uma classe pai A tem subclasses B e C e uma classe D herda das classes B e C. O problema neste cenário é que os métodos que possuem o mesmo nome nas classes A, B e C pode ser herdado na classe D, criando várias versões do mesmo método sem distinções claras. Os mixins resolvem esse problema mantendo cada versão do método distinta, em vez de tentar substituí-las como na herança múltipla padrão.
Os mixins não substituem os métodos nas classes nas quais eles são herdados. Por exemplo, se uma classe A definisse um método "myMethod" e herdasse um mixin B que também definisse o método "myMethod", esses dois métodos ainda poderiam ser chamados sem ambiguidade, e a implementação de "myMethod" na classe A ainda seria completamente acessível. Exatamente como esses métodos seriam chamados depende do idioma em que o mixin é implementado.
Algumas linguagens de programação que não usam mixins, como Java, usam interfaces para imitá-las. As interfaces nessas linguagens não emulam a funcionalidade completa dos mixins, porque as interfaces podem conter apenas constantes e declarações de método. Os mixins, por outro lado, podem conter implementações completas de métodos. Os idiomas que não suportam mixins geralmente têm alternativas viáveis que podem ser persuadidas a fazer aproximadamente a mesma coisa.