Question

Est-il quelque chose comme le Python descripteur de protocole mis en œuvre dans d'autres langues?Il semble comme une bonne façon d'augmenter la modularité/encapsulation sans augmenter la taille de votre contenant de la classe de mise en œuvre, mais je n'ai jamais entendu parler de quelque chose de similaire dans d'autres langues.Il est probable absent à partir d'autres langues en raison de la recherche de surcharge?

Était-ce utile?

La solution

Je n'ai pas entendu parler d'un équivalent direct soit.Vous pourriez probablement obtenir le même effet avec des macros, surtout dans une langue comme Lisp qui est extrêmement puissant macros.

Je ne serais pas surpris si d'autres langues commencent à intégrer quelque chose de semblable, car il est si puissant.

Autres conseils

Ruby et C#, facilement vous permettent de créer des accesseurs en spécifiant les getter/setter pour un attribut, un peu comme en Python.Cependant, ce n'est pas conçu pour naturellement vous permettent d'écrire le code de ces méthodes dans une autre classe de la façon que Python permet.Dans la pratique, je ne sais pas combien cela est important, car à chaque fois que j'ai vu un attribut défini par le protocole descripteur de ses été mis en œuvre dans la même classe.

EDIT:Darn ma dyslexie, je veux dire le négligent la lecture).Pour une raison quelconque, j'ai toujours lu "descripteur" comme "décorateur" et vice versa, même si je suis le seul à taper toutes les deux.Je vais laisser mon post intacte depuis il a des informations valides, mais l'information qui n'a absolument rien à voir avec la question.

Le terme de "décorateur" lui-même est en fait le nom d'un modèle de conception décrit dans le fameux "Design Patterns" livre.L'article de Wikipedia contient de nombreux exemples dans différents langages de programmation de la décoratrice d'utilisation: http://en.wikipedia.org/wiki/Decorator_pattern

Cependant, les décorateurs dans cet article orienté objet;ils ont des classes implémentant une interface prédéfinie qui permet à une autre classe se comportent différemment en quelque sorte, etc.Python décorateurs agir de façon fonctionnelle par le remplacement d'une fonction lors de l'exécution avec une autre fonction, ce qui vous permet de modifier/remplacer cette fonction, insérez le code, etc.

C'est connu dans le monde Java en tant qu'Aspect de la programmation Orientée, et la AspectJ compilateur Java vous permet de faire ces sortes de choses et de compiler votre AspectJ code (qui est un sur-ensemble de Java en bytecode Java.

Je ne suis pas assez familier avec le C# ou Ruby pour savoir ce que leur version de décorateurs serait.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top