Vad är en mixin?
I datorprogrammering är en mixin en klass som ärvs av en annan klass men inte är avsedd att instanseras. En enda klass kan ärva många mixins, så många samlingar funktioner kan enkelt konsolideras. Även om många vanliga programmeringsspråk använder mixin-metodiken, finns det många fler som inte gör det, inklusive C ++ och Java. I allmänhet finns mixins på skriptspråk eller de språk som har möjlighet att skapa skript, till exempel JavaScript och Perl.
Mixins är unika genom att de blir en del av en underklass under sammanställningen. Deras metoder och konstanter ingår i underklassen. En annan unik egenskap hos mixinklasser är att metoder kan definieras och bindas till objekt under körning. De flesta språk använder en annan metod, bindande och definierande metoder vid sammanställningstid snarare än körtid. Denna runtime-bindning gör det möjligt för mixins att vara mycket flexibla.
Ett vanligt problem i flera arv är tvetydighet i metodsamtal, och mixins kan lösa detta problem eftersom de inte följer exakt samma regler som flera arv. Exempelvis kan flera arv skapa en så kallad "dödsdiamant", där en förälderklass A har underklasser B och C, och en klass D ärver från båda klasserna B och C. Problemet i detta scenario är att metoder som har samma namn i klasserna A, B och C kan alla ärvas i klass D, vilket gör flera versioner av samma metod utan tydliga åtskillnader. Mixins löser detta problem genom att hålla varje version av metoden distinkt, snarare än att försöka skriva över dem som i standardmultipelarv.
Mixins åsidosätter inte metoder i klasser där de ärvs. Om till exempel en klass A definierade en metod "myMethod" och ärvde en mixin B som också definierade metoden "myMethod", kunde båda dessa metoder fortfarande kallas utan tvetydighet, och implementeringen av "myMethod" i klass A skulle fortfarande vara helt tillgängligt. Exakt hur dessa metoder skulle kallas beror på språket på vilket mixin implementeras.
Vissa programmeringsspråk som inte använder mixins, som Java, använder gränssnitt för att härma dem. Gränssnitt på dessa språk emulerar inte hela funktionaliteten för mixins, eftersom gränssnitt endast kan innehålla konstanter och metoddeklarationer. Mixins å andra sidan kan innehålla fullständiga implementeringar av metoder. De språk som inte stöder mixins har ofta livskraftiga alternativ som kan coaxas för att göra ungefär samma sak.