Je viens de trouver un article sur un framework en Java qui lui permet apparemment de supporter Mixins et quelque chose qui s'appelle Composite Oriented Programming (qui à mon avis pourrait même être la même chose ...) J'ai aussi entendu parler de/travaillé avec AOP, et je ne suis pas sûr comment il diffère de cela soit ...Quelle est la différence entre une classe abstraite et une mixine?
Répondre
À 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.
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.
+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
@Bruno Un langage de base comme C++? – leeand00
concis et très clair. Explication géniale! – Hugo