Cos'è un mixin?
Nella programmazione di computer, una mixin è una classe ereditata da un'altra classe ma non è pensata per essere istanziata. Una singola classe può ereditare molti mixin, quindi molte raccolte di funzioni possono essere facilmente consolidate. Sebbene molti linguaggi di programmazione comuni utilizzino la metodologia Mixin, ce ne sono molti altri che non lo fanno, tra cui C ++ e Java. In generale, i mixin si trovano nei linguaggi di scripting o in quelle lingue che hanno la capacità di creare script, come JavaScript e Perl.
I mixin sono unici in quanto diventano parte di una sottoclasse durante la compilation. I loro metodi e costanti sono inclusi nella sottoclasse. Un altro tratto unico delle classi di mixin è che i metodi possono essere definiti e legati agli oggetti in fase di esecuzione. La maggior parte delle lingue utilizza un approccio diverso, i metodi vincolanti e definiti al momento della compilazione anziché in fase di esecuzione. Questa rilegatura in runtime consente ai mixin di essere molto flessibili.
un probl comuneEM in eredità multipla è l'ambiguità nella chiamata del metodo e i mixin possono risolvere questo problema perché non seguono esattamente le stesse regole dell'eredità multipla. Ad esempio, l'eredità multipla può creare un cosiddetto "diamante di morte", in cui una classe A genitore ha sottoclassi B e C e una classe D eredita da entrambe le classi B e C. Il problema in questo scenario sono che i metodi che hanno lo stesso nome nelle classi A, B e C possono essere tutti ereditati nella classe D, rendendo più versioni del metodo senza distinzioni. I mixin risolvono questo problema mantenendo distinta ogni versione del metodo, piuttosto che tentare di sovrascriverli come nella eredità multipla standard.
i mixin non prevalgono i metodi nelle classi in cui sono ereditati. Ad esempio, se una classe A ha definito un metodo "mymethod" e ha ereditato un mixin B che ha anche definito il metodo "mythod", entrambi questi metodi potrebbero essere ancora chiamati senza ambiguità e l'implementazione di "mymethod" nella classe ASarebbe comunque completamente accessibile. Esattamente come verranno chiamati questi metodi dipende dalla lingua in cui viene implementata la miscein.
Alcuni linguaggi di programmazione che non utilizzano mixin, come Java, usano le interfacce per imitarli. Le interfacce in queste lingue non emulano la piena funzionalità dei mixin, poiché le interfacce possono contenere solo costanti e dichiarazioni dei metodi. I mixin, d'altra parte, possono contenere implementazioni complete di metodi. Quelle lingue che non supportano i mixin hanno spesso alternative praticabili che possono essere convinte per fare all'incirca la stessa cosa.