Kaj je Mixin?

V računalniškem programiranju je mixin razred, ki ga podeduje drug razred, vendar ni namenjen za instanciranje. En razred lahko podeduje veliko mešanic, tako da je mogoče veliko zbirk funkcij enostavno konsolidirati. Čeprav mnogi običajni programski jeziki uporabljajo metodologijo mixin, jih je veliko več, vključno s C++ in Javo. Na splošno se mešanice nahajajo v skriptnih jezikih ali tistih jezikih, ki imajo možnost ustvarjanja skriptov, kot sta JavaScript in Perl.

Mešanice so edinstvene po tem, da med prevajanjem postanejo del podrazreda. Njihove metode in konstante so vključene v podrazred. Druga edinstvena lastnost razredov mixin je, da je metode mogoče definirati in vezati na predmete med izvajanjem. Večina jezikov uporablja drugačen pristop, metode vezave in definiranja v času prevajanja in ne med izvajanjem. Ta vezava med izvajanjem omogoča, da so mešanice zelo prilagodljive.

Pogosta težava pri večkratnem dedovanju je dvoumnost pri klicanju metod in mešanice lahko rešijo to težavo, ker ne sledijo popolnoma enakim pravilom kot večkratno dedovanje. Večkratno dedovanje lahko na primer ustvari tako imenovani »diamant smrti«, kjer ima nadrejeni razred A podrazreda B in C, razred D pa deduje iz obeh razredov B in C. Težava v tem scenariju je, da metode, ki imajo isto ime v razredih A, B in C se lahko podeduje v razred D, kar naredi več različic iste metode brez jasnih razlik. Mešanice rešujejo to težavo tako, da ohranijo vsako različico metode ločeno, namesto da bi jih poskušali prepisati kot pri standardnem večkratnem dedovanju.

Mešanice ne preglasijo metod v razredih, v katere so podedovane. Na primer, če je razred A definiral metodo »myMethod« in podedoval mešanico B, ki je definiral tudi metodo »myMethod«, bi lahko obe metodi še vedno poklicali brez dvoumnosti, implementacija »myMethod« v razredu A pa bi bila še vedno popolnoma dostopen. Točno, kako bi se te metode imenovale, je odvisno od jezika, v katerem je implementiran mixin.

Nekateri programski jeziki, ki ne uporabljajo mešanic, kot je Java, uporabljajo vmesnike za njihovo posnemanje. Vmesniki v teh jezikih ne posnemajo celotne funkcionalnosti mešanic, ker lahko vmesniki vsebujejo samo konstante in deklaracije metod. Po drugi strani lahko mešanice vsebujejo popolne izvedbe metod. Tisti jeziki, ki ne podpirajo mešanic, imajo pogosto izvedljive alternative, ki jih je mogoče prepričati, da naredijo približno isto stvar.