Mis on Mixin?

Arvutiprogrammeerimises on mixin klass, mille pärib teine ​​klass, kuid mis ei ole mõeldud instantseerimiseks. Üks klass võib pärida palju segusid, nii et paljusid funktsioonide kogusid saab hõlpsasti konsolideerida. Kuigi paljud levinumad programmeerimiskeeled kasutavad mixini metoodikat, on palju rohkem, mis seda ei kasuta, sealhulgas C++ ja Java. Üldiselt leidub miksine skriptikeeltes või sellistes keeltes, millel on skriptide loomise võimalus, nagu JavaScript ja Perl.

Mixinid on ainulaadsed selle poolest, et nad muutuvad koostamise käigus osaks alamklassist. Nende meetodid ja konstandid kuuluvad alamklassi. Teine mixin-klasside ainulaadne omadus on see, et meetodeid saab defineerida ja objektidega käitamise ajal siduda. Enamik keeli kasutab erinevat lähenemist, sidudes ja määratledes meetodeid, mitte käitusajal. See käitusaegne sidumine võimaldab miksinidel olla väga paindlik.

Ühine probleem mitme pärimise korral on meetodi kutsumise ebaselgus ja miksinid saavad selle probleemi lahendada, kuna nad ei järgi täpselt samu reegleid kui mitmikpärimine. Näiteks võib mitmikpärimine luua niinimetatud “surma teemanti”, kus vanemklassil A on alamklassid B ja C ning klass D pärib mõlemast klassist B ja C. Selle stsenaariumi probleem seisneb selles, et meetodid, millel on sama nime klassides A, B ja C saab pärida D-klassi, luues samast meetodist mitu versiooni ilma selgete erinevusteta. Mixinid lahendavad selle probleemi, hoides meetodi iga versiooni eraldi, selle asemel, et üritada neid üle kirjutada nagu standardse mitme pärimise korral.

Miksiinid ei alista meetodeid klassides, kuhu nad on päritud. Näiteks kui klass A defineeris meetodi “myMethod” ja pärandas mixin B, mis defineeris ka meetodi “myMethod”, saab mõlemat meetodit siiski nimetada ilma ühemõttelisuseta ja “myMethod” rakendamine klassis A oleks ikkagi täiesti ligipääsetav. Kuidas neid meetodeid täpselt nimetada, sõltub sellest, millises keeles mixin on rakendatud.

Mõned programmeerimiskeeled, mis miksineid ei kasuta, näiteks Java, kasutavad nende jäljendamiseks liideseid. Nende keelte liidesed ei emuleeri mixinide kõiki funktsioone, kuna liidesed võivad sisaldada ainult konstante ja meetodi deklaratsioone. Mixinid seevastu võivad sisaldada meetodite täielikke rakendusi. Nendel keeltel, mis miksineid ei toeta, on sageli elujõulisi alternatiive, mida saab meelitada tegema ligikaudu sama asja.