Co je to Mixin?
V počítačovém programování je mixin třída, která je zděděna jinou třídou, ale není zamýšlena jako instance. Jedna třída může zdědit mnoho mixinů, takže mnoho sbírek funkcí lze snadno konsolidovat. Ačkoli mnoho běžných programovacích jazyků používá metodiku mixin, existuje mnoho dalších, které ne, včetně C ++ a Java. Obecně platí, že mixiny se nacházejí ve skriptovacích jazycích nebo v těch jazycích, které mají schopnost vytvářet skripty, například JavaScript a Perl.
Mixiny jsou jedinečné v tom, že se během kompilace stanou součástí podtřídy. Jejich metody a konstanty jsou zahrnuty v podtřídě. Další jedinečnou vlastností tříd mixin je to, že metody lze definovat a navazovat na objekty za běhu. Většina jazyků používá odlišný přístup, metody vázání a definování v době kompilace než za běhu. Tato vazba za běhu umožňuje mixiny být velmi flexibilní.
Běžným problémem vícenásobné dědičnosti je nejednoznačnost volání metod a mixins tento problém může vyřešit, protože nedodržují přesně stejná pravidla jako vícenásobná dědičnost. Například vícenásobná dědičnost může vytvořit takzvaný „diamant smrti“, kde nadřazená třída A má podtřídy B a C a třída D dědí z obou tříd B a C. Problém v tomto scénáři je, že metody, které mají stejné jméno ve třídách A, B a C lze všechny zdědit do třídy D, což umožňuje několik verzí stejné metody bez jasných rozdílů. Mixins tento problém řeší tím, že udržuje každou verzi metody odlišnou, spíše než se je pokouší přepsat jako ve standardní vícenásobné dědičnosti.
Mixiny nepřekonávají metody ve třídách, za které jsou zděděny. Například, pokud třída A definovala metodu „myMethod“ a zdědila mixin B, který také definovala metodu „myMethod“, obě tyto metody by mohly být stále označovány bez dvojznačnosti a implementace „myMethod“ ve třídě A by byla stále zcela přístupné. Přesně, jak by se tyto metody nazývaly, závisí na jazyce, ve kterém je mixin implementován.
Některé programovací jazyky, které nepoužívají mixiny, jako je Java, používají k napodobování rozhraní. Rozhraní v těchto jazycích nenapodobují plnou funkčnost mixinů, protože rozhraní mohou obsahovat pouze konstanty a deklarace metod. Mixiny, na druhé straně, mohou obsahovat úplné implementace metod. Ty jazyky, které nepodporují mixiny, mají často životaschopné alternativy, které lze přimět, aby udělaly zhruba totéž.