2010-02-24 4 views

Répondre

9

Pour une bonne comparaison et pour le raisonnement pourquoi les traits sont préférés, vous pouvez vérifier le traits paper (pdf).

En substance, il est ce que Lukas Renggli dit:

membres se composent en traits de caractère d'une classe, et ne change pas sa hiérarchie d'héritage. Les conflits doivent être explicitement résolus par l'utilisateur des traits.

Les mixins sont linéarisés dans la hiérarchie d'héritage de la classe cible. S'il y a des membres en conflit, l'ordre dans lequel ils ont été déclarés dicte quel membre est appelé. C'est fragile car il définit implicitement le comportement de la composition, et l'auteur de la classe doit être conscient des conflits potentiels et de leur impact sur la classe résultante.

Puisque les mixins sont linéarisés, ils ne souffrent pas du fameux "problème de diamant" d'héritage multiple.Donc, la nature fragile dans laquelle ils sont empilés est un autre problème, que je vais appeler le "problème de rubis", pour garder la métaphore de la pierre précieuse. Pour certaines raisons étranges qui ont à voir avec moose, les perles ne représentent pas le problème aussi bien que les rubis.

9

Les caractères sont composés à l'aide d'une règle de composition. Les conflits doivent être résolus manuellement, il ne peut pas arriver qu'un trait remplace accidentellement une autre méthode avec le même nom.

Les mixines sont composées par ordre et ont donc des problèmes de fragilité similaires à l'héritage multiple.

+1

La fragilité généralement associée à l'héritage multiple est "le problème du diamant" - aucune résolution déterministe de la méthode avec le même nom et la même signature qui est héritée de plusieurs classes. Dans le cas des mixins, comme vous l'avez déjà noté, l'ordre de composition détermine comment les méthodes sont résolues, donc les mixins ne souffrent pas du "problème du diamant". – Yardena

+2

Oui, ils le font, mais c'est biaisé. Si vous obtenez deux méthodes 'm()' et 'n()' à partir de 'Mixin1' et' Mixin2', vous ne pouvez avoir que les deux méthodes d'un mixin. Si vous voulez une méthode de Mixin1 et l'autre de Mixin2, vous êtes bloqué. –

+1

Ce que vous décrivez n'est pas ce qu'on appelle «le problème du diamant». Je ne suis pas sûr que ce soit un problème - mixin est censé représenter une unité minimale de comportement réutilisable, donc naturellement il ne peut pas être décomposé plus loin ... – Yardena

8

Dans Newspeak, toutes les classes sont des mixins. Voici quelques extraits de la réponse de Gilad Bracha à une question similaire dans Newspeak discussion forum:

Mixins ne sont pas une caractéristique de novlangue en soi. Autrement dit, nous n'avons pas conçu la langue disant, ok, maintenant nous allons ajouter mixins. Les mixins tombent automatiquement de la sémantique de classe et la sémantique basée sur le message. C'est-à-dire, si vous avez des classes virtuelles , vous avez mixins à moins que vous ne les interdisiez réellement. Les caractères tentent d'adresser problème de mixins.

  1. Il y a très peu d'expérience réelle indiquant que ces problèmes perçus sont réels ( ).
  2. Les caractères sont limités à être sans état. Cela simplifie les choses, mais ne gère pas tous les cas d'intérêt . En fait, il y a maintenant documents de recherche tentant d'ajouter état aux traits.

sont entièrement englobées caractères par un plus modèle général, que j'imaginé beaucoup il y a ans dans ma thèse de doctorat (disponible sur mon site web, si vous voulez vraiment creuser en profondeur). ... Je voudrais examiner comment nous pourrions intégrer ces combinateurs dans Newspeak. ...

Questions connexes