Što je Mixin?

U računalnom programiranju, mixin je klasa koju nasljeđuje druga klasa, ali nije namijenjena za instanciranje. Jedna klasa može naslijediti mnogo mixina, tako da se mnoge zbirke funkcija mogu lako konsolidirati. Iako mnogi uobičajeni programski jezici koriste mixin metodologiju, postoji mnogo više onih koji ne koriste, uključujući C++ i Javu. Općenito, miksini se nalaze u skriptnim jezicima ili onim jezicima koji imaju mogućnost stvaranja skripti, kao što su JavaScript i Perl.

Miksini su jedinstveni po tome što postaju dio podklase tijekom kompilacije. Njihove metode i konstante uključene su u podklasu. Još jedna jedinstvena osobina mixin klasa je da se metode mogu definirati i vezati za objekte tijekom vremena izvođenja. Većina jezika koristi drugačiji pristup, metode obvezivanja i definiranja u vrijeme prevođenja, a ne u vrijeme izvođenja. Ovo uvezivanje tijekom izvođenja omogućuje miksinama da budu vrlo fleksibilni.

Uobičajeni problem kod višestrukog nasljeđivanja je dvosmislenost u pozivanju metoda, a miksini mogu riješiti ovaj problem jer ne slijede točno ista pravila kao višestruko nasljeđivanje. Na primjer, višestruko nasljeđivanje može stvoriti takozvani “dijamant smrti”, gdje roditeljska klasa A ima podklase B i C, a klasa D nasljeđuje obje klase B i C. Problem u ovom scenariju je da metode koje imaju isto ime u klasama A, B i C može se naslijediti u klasu D, čineći više verzija iste metode bez jasnih razlika. Mixins rješavaju ovaj problem držeći svaku verziju metode različitom, umjesto da ih pokušavaju prepisati kao kod standardnog višestrukog nasljeđivanja.

Mixins ne nadjačavaju metode u klasama u koje su naslijeđene. Na primjer, ako je klasa A definirala metodu “myMethod” i naslijedila mixin B koji je također definirao metodu “myMethod”, obje ove metode bi se i dalje mogle pozvati bez dvosmislenosti, a implementacija “myMethod” u klasi A i dalje bi bila potpuno dostupan. Kako će se točno te metode zvati ovisi o jeziku na kojem je mixin implementiran.

Neki programski jezici koji ne koriste miksine, kao što je Java, koriste sučelja da ih oponašaju. Sučelja u tim jezicima ne oponašaju punu funkcionalnost mixina, jer sučelja mogu sadržavati samo konstante i deklaracije metoda. Mixins, s druge strane, mogu sadržavati potpune implementacije metoda. Oni jezici koji ne podržavaju miksine često imaju održive alternative koje se mogu nagovoriti da rade otprilike istu stvar.