2009-02-26 11 views

Répondre

23

À un niveau agnostique de langage, un mixin ajoute simplement des fonctionnalités à une classe, et est plus pour la commodité du programmeur et pour éviter la duplication de code. Une classe abstraite (base) forme une relation is-a et permet le polymorphisme. Une des raisons pour lesquelles l'héritage est surutilisé est que c'est un moyen facile de mettre en œuvre des mixins sans écrire de texte standard dans des langages qui ne les supportent pas vraiment. Le problème est que vous déclarez une relation is-a polymorphe comme un effet secondaire, ce qui rend votre API plus confuse et peut-être ajouter de l'ambiguïté. Par conséquent, les langages plus récents comme D et Ruby prennent en charge les mixins en tant que fonctionnalités natives, ce qui permet d'ajouter facilement un tas de fonctionnalités à une classe sans déclarer de relation is-a polymorphe.

+0

+1 Bonne explication brève. Ce truc de COP a l'air cool. Bien que j'aime voir ce genre de chose se frayer un chemin jusqu'au niveau du langage de base. Même chose avec des trucs AOP. – BuddyJoe

+0

@Bruno Un langage de base comme C++? – leeand00

+0

concis et très clair. Explication géniale! – Hugo

0

Mixin n'est jamais conçu comme une classe autonome. Ils ajoutent simplement des fonctionnalités à la classe que vous déclarez. En Python, ils peuvent être facilement appliqués par les décorateurs de classe. Par exemple, vous pouvez décorer votre classe avec Singleton mixin, faisant de votre classe un singleton.