..


Liens sponsorisés

Utilisez des mixins en Ruby

Article écrit par Alessio Saltarini
Page 1 sur 2

Parfois, vous voulez créer une classe d'objets qui ont "cette" fonctionnalité, mais aussi «ce» et «cet autre», qui sont peut-être déjà été écrit ailleurs dans notre code source.

En d'autres termes, nous voulons créer une classe qui emprunte des méthodes et des propriétés définies dans d'autres parties du code source ou dans certaines bibliothèques.

Inversement, nous rassembler autour de mêmes caractéristiques de notre code source dans un endroit accessible à tous. Comment?

Les puristes sont horrifiés programmation orientée objet et le soutien - à mon avis pas totalement sans raison - que tout besoin de ce type peuvent être résolus avec l'utilisation correcte de polymorphisme.

D'autres, surtout si elles proviennent de l'expérience avec des langages comme le C + +, font valoir que c'est précisément à cause de ces exigences en utilisant l'héritage multiple.

Langues pragmatique comme Ruby, cependant, aborder la question en proposant une technique appelée "mixin", le nom - ça sonne! - Un homme de crème glacée lui a donné la Massuchussets composé de différents parfums de crème glacée (crème, chocolat ...)

Les mixins Ruby

Techniquement, mixins Ruby sont implémentées en utilisant l'intérieur des classes, le code défini dans les différents modules (module).

Pour prendre un exemple trivial, supposons que je voulais mettre en œuvre un traitement de texte qui imprime automatiquement mon amitié d'une lettre d'affaires. Puisque vous voulez entrer uniquement les données nécessaires, c'est à dire le destinataire et le message. Le programme sera le match amical pense différentes comme, "Monsieur" et "Sincèrement".

Commençons par définir sous une forme conviviale:






 Module CordialitaLettera



    



 def départ (adresse)



        



 retour "Cher Monsieur." + bénéficiaire + "\ n"



    



 fin



    



 signature finale (lettre)



        



 retour lettre + "\ n" + "Sincèrement, \ nCarlo Smith"



    



 fin







 fin



Rien de particulier, puis, seulement deux méthodes qui peuvent changer le texte reçu en entrée.

Nous allons écrire une classe «mixte» à ces méthodes, juste un mixin:






 Lettres de classe



    



 comprend CordialitaLettera



    



 dernière stampaLettera (destinataire, message)



        



 Point de départ = (récepteur)



        



 = Lettre + après



        



 met la signature (lettre)



    



 fin







 fin



Lettres-dessus de la classe a une méthode qui prend en entrée que les parties variables de la lettre, avec un format convivial définies dans le module.

Comme vous pouvez voir la syntaxe est assez similaire à l'héritage en Ruby, cependant, contrairement à ce dernier, dans une classe peut implémenter n'importe quel nombre de formes - et comme on le sait, une classe peut être dérivée d'une et une seule classe parente (Ruby ne supporte pas l'héritage multiple!)

Par exemple, nous pouvons écrire:






 def main ()



    



 Lengin = Lettere.new



    



 lEngine.stampaLettera ('Alessio Saltarini »,



                          



 «Je vient de procéder au transfert



                           



 vous avez demandé. ')



    



 met



    



 lEngine.stampaLettera ('Matthew Pisconi,



                          



 «Je envoyer le fax à nr.038283873. ')







 fin



qui renvoie:





 Chers sig.Alessio Saltarini,







 Je viens de faire le transfert que vous avez demandé.







 Cordialement,







 Carlo Rossi








 Chers sig.Matteo Pisconi,







 J'ai envoyer le fax à nr.038283873.







 Cordialement,







 Carlo Rossi



Cette technique, entre autres choses, nous permet d'assimiler l'utilisation de mixins que des interfaces en Java: en effet, si une classe est un «mélange» avec un formulaire, en fait, il mettra en œuvre les méthodes (et répond donc à une certaine interface) .

Dans la même catégorie ...
E-Learning
Ruby et Ruby on Rails (Cours) Ruby et Ruby on Rails (Cours)
Créer des applications logicielles et Web avec Ruby et RoR. A partir de 39 €.
Liens sponsorisés