Vad är en mixin?
I datorprogrammering är en mixin en klass som ärvs av en annan klass men inte är 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 mixins kan vara mycket flexibel.
ett vanligt problemEM 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 "Diamond of Death", 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 samma namn i klasserna A, B och C kan alla ärvas i klass D, vilket gör flera versioner av samma metod utan tydliga utmärkelser. 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 standard multipel arv.
mixins åsidosätter inte metoder i klasser som de ärvs. Till exempel, om en klass A definierade en metod "mymethod" och ärvde en mixin B som också definierade metoden "mymethod", kan båda dessa metoder fortfarande kallas utan tvetydighet, och implementeringen av "mymethod" i klass Askulle 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 efterlikna 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.