Skip to main content

Vad är en mixin?

I datorprogrammering är en mixin en klass som ärvs av en annan klass men är inte tänkt att instanseras.En enda klass kan ärva många mixiner, så många funktionssamlingar kan lätt konsolideras.Även om många vanliga programmeringsspråk använder mixinmetodiken, finns det många fler som inte gör, inklusive C ++ och Java.I allmänhet finns mixins på skriptspråk eller de språk som har förmågan att skapa skript, såsom 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 av mixinklasser är att metoder kan definieras och bundna till objekt vid körning.De flesta språk använder ett annat tillvägagångssätt, bindande och definierande metoder vid sammanställningstid snarare än runtime.Denna runtime -bindning gör att mixiner kan 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 multipel arv.Till exempel kan flera arv skapa en så kallad dödsdiamant, där en överordnad klass 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 sammaNamn i klasserna A, B och C kan alla ärvas i klass D, vilket gör flera versioner av samma metod utan tydliga distinktioner.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 standardmultipel arv.

Mixins åsidosätter inte metoder i klasser som de ärvda.Till exempel, om en klass A definierade en metod mymetod och ärvde en mixin B som också definierade metod mymethod, skulle 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å det språk där mixinet implementeras.

Vissa programmeringsspråk som inte använder mixiner, till exempel Java, använder gränssnitt för att härma dem.Gränssnitt på dessa språk emulerar inte mixins fulla funktionalitet, eftersom gränssnitt endast kan innehålla konstanter och metoddeklarationer.Mixins kan å andra sidan innehålla fullständiga implementeringar av metoder.De språk som inte stöder mixiner har ofta livskraftiga alternativ som kan samlas för att göra ungefär samma sak.