Diverse implementazioni di mixin (ad esempio Ruby mixin, Scala trait) includono il supporto per la memorizzazione di dati (ad es. variabili, proprietà) tra chiamate di metodo in variabili d'istanza. C'è stato un po 'di dibattito in questa domanda sull'opportunità o meno di un metodo di estensione virtuale Java qualificato come mixin perché non è possibile memorizzare i dati in questo modo; tutte le variabili sono immesse ed emesse nell'ambito della chiamata al metodo e non possono essere memorizzate in una variabile di istanza. In sostanza, si è discusso su cosa sia un "mixin" per definizione e se implementazioni o meno in Ruby e quali non vanno oltre la definizione comunemente riconosciuta del concetto di programmazione.
Sfortunatamente, la definizione di un mixin sembra piuttosto vaga a questo riguardo. Ad esempio, Wikipedia dice quanto segue:
With mixins the class definition defines only the attributes and parameters associated with that class; methods are left to be defined elsewhere, as in Flavors and CLOS, and are organized in "generic functions". These generic functions are functions that are defined in multiple cases (methods) by type dispatch and method combinations.
Quanto sopra dice che un mixin definisce gli attributi, ma non cita fonti che potrebbero chiarire questo. Tuttavia, ogni altra definizione semplicemente non riesce a dire se i mixin consentono o meno di memorizzare i dati o se sono limitati a metodi. Per aggiungere ulteriore confusione, Wikipedia descrive in precedenza i mixin come an interface with implemented methods
, ma le interfacce non possono memorizzare variabili di istanza. Ho cercato di scoprire come è stato definito in Flavors , che è stato il primo linguaggio di programmazione a utilizzare qualcosa chiamato "mixin", ma non sono riuscito a trovare abbastanza informazioni online al riguardo.
Quindi un mixin per definizione consente di memorizzare i dati? O è qualcosa che è ambiguo e viene lasciato al linguaggio di programmazione per decidere?