Hvad er en Mixin?
I computerprogrammering er en mixin en klasse, der erves af en anden klasse, men ikke er beregnet til at blive instantieret. En enkelt klasse kan arve mange mixins, så mange samlinger af funktioner kan let konsolideres. Selvom mange almindelige programmeringssprog bruger mixin-metodikken, er der mange flere, der ikke gør det, inklusive C ++ og Java. Generelt findes mixins på scriptsprog eller de sprog, der har evnen til at oprette scripts, såsom JavaScript og Perl.
Mixins er unikke, idet de bliver en del af en underklasse under kompilering. Deres metoder og konstanter er inkluderet i underklassen. Et andet unikt træk ved mixin-klasser er, at metoder kan defineres og bindes til objekter under kørsel. De fleste sprog bruger en anden tilgang, bindende og definerende metoder på kompileringstid snarere end runtime. Denne runtime-binding giver mixins mulighed for at være meget fleksible.
Et almindeligt problem i flere arv er tvetydighed i metodekald, og mixins kan løse dette problem, fordi de ikke følger nøjagtigt de samme regler som multiple arv. For eksempel kan multiple arv skabe en såkaldt "diamant af død", hvor en forældreklasse A har underklasser B og C, og en klasse D arver fra både klasse B og C. Problemet i dette scenarie er de metoder, der har det samme navn i klasse A, B og C kan alle arves i klasse D, hvilket gør flere versioner af den samme metode uden klare sondringer. Mixins løser dette problem ved at holde hver version af metoden adskilt i stedet for at forsøge at overskrive dem som i standard multiple arv.
Mixins tilsidesætter ikke metoder i klasser, hvor de er arvet. For eksempel, hvis en klasse A definerede en metode "myMethod" og arvet en mixin B, der også definerede metode "myMethod," kunne begge disse metoder stadig kaldes uden tvetydighed, og implementeringen af "myMethod" i klasse A ville stadig være helt tilgængelig. Præcis hvordan disse metoder kaldes, afhænger af det sprog, som mixin implementeres i.
Nogle programmeringssprog, der ikke bruger mixins, såsom Java, bruger grænseflader til at efterligne dem. Grænseflader på disse sprog emulerer ikke den fulde funktionalitet af mixins, fordi grænseflader kun kan indeholde konstanter og metodedeklarationer. Mixins kan på den anden side indeholde fulde implementeringer af metoder. De sprog, der ikke understøtter mixins, har ofte levedygtige alternativer, der kan coaxes til at gøre omtrent det samme.