Quelle est la différence entre idiome et design-pattern? Il semble que ces terminologies se chevauchent quelque part; où exactement, je ne sais pas. Sont-ils interchangeables? Quand devrais-je utiliser quoi?
Voici une liste des idiomes C ++. Puis-je les appeler des modèles de conception?
Wikipedia définit,
Idiome de programmation en tant que modèle de conception de bas niveau
Qu'est-ce que ça veut dire? Que veut dire "bas niveau" ici?
Cette question est inspirée d'une autre question: https://stackoverflow.com/questions/7343531/are-the-some-design-paterns-language-dependent
Réponses:
Un idiome est une idée pour contourner les bizarreries d’une langue. Certains exemples qui me viennent à l’esprit sont les idiomes C ++ que vous avez liés dans la question initiale. Ils résolvent un problème commun dans cette langue de manière conservée.
Un modèle de conception est similaire, en ce sens qu'il résout un problème commun. Mais le modèle de conception idéal est basé sur des fonctionnalités de langage communes et est donc indépendant du langage.
Il existe cependant un continuum entre les idiomes et les modèles de conception, de la même manière qu’il existe des langages de bas niveau à des langages de haut niveau.
Le modèle de visiteur est un bon exemple; s'il n'y avait qu'une seule langue qui ne supportait qu'une seule distribution dynamique, nous pourrions considérer le motif Visitor comme un idiome de cette langue. Mais il existe des hordes de langues qui ne prennent pas directement en charge l'envoi multiple. Par conséquent, le modèle de visiteur était né.
Le motif Observer vient aussi à l'esprit - C # le supporte directement, il n'a donc pas besoin de la forme de contournement habituelle du motif.
Les fonctionnalités OO (héritage, polymorphisme, etc.) constituent un exemple. C ne les soutient pas directement. Si plus de langues ressemblaient à C, nous pourrions alors développer des modèles de conception pour implémenter v-tables, sécurité de type, etc. solution un modèle de conception.
la source
Les modèles de conception ne sont généralement pas spécifiques à la langue. Les idiomes linguistiques ont tendance à dépendre de caractéristiques particulières d'une langue (ou d'une classe de langues) ou à résoudre un problème spécifique de cette langue.
la source
Je ne mettrais pas trop de monnaie dans la définition de Wikipedia.
À tout le moins, un idiome est spécifique à une langue, tandis qu'un modèle de conception s'efforce ou devrait s'efforcer d'être agnostique. Pour aller plus loin, les idiomes sont généralement des conventions destinées à améliorer la lisibilité, ou constituent l'alternative supérieure (sur un certain mérite technique) lorsqu'il existe plus d'une façon de faire quelque chose. Toutes ces choses sont liées à la façon dont les idées sont exprimées (clarté, verbosité, concision), mais pas aux idées elles-mêmes.
D'autre part, les modèles de conception sont l'essence même d'une idée récurrente, une idée qui peut a priori être exprimée dans n'importe quelle langue qui s'y prête. Le visiteur est une implémentation de la double dépêche reposant sur la dépêche unique et la surcharge, qui peut être utilisée dans toutes les langues utilisant la dépêche unique et la surcharge. Connaître le modèle n'aide pas à écrire du code plus expressif ou plus lisible, cela aide à résoudre le problème associé. Il n'y a rien d'idiome à ce sujet car, par exemple, il n'y a pas de forme canonique du visiteur, par exemple en C ++.
la source
virtual
à certains endroits, alors que le pointeur écrit à la main sur la supercherie des tables des membres aura l'air tout simplement ridicule.do_something() or die "...";
(volé d'un autre commentaire ici). Il est basé sur des fonctionnalités linguistiques spécifiques, mais constitue un moyen courant d’utiliser ces fonctionnalités. Ce n'est pas multilingue et ne le sera probablement pas.La définition anglaise normale de Idiom. Est une phrase dont la signification acceptée ne figure pas dans les mots utilisés. Les exemples seraient "Raining Chiens et Chats" ou "Où est le Boeuf?"
Dans les langages de programmation, il est généralement fait référence à un raccourci syntaxique faisant quelque chose qui n’est pas immédiatement évident à partir du code lui-même mais qui est utilisé assez souvent pour que les autres programmeurs reconnaissent instantanément le sens.
Perl est peut-être la langue la plus riche en idiomes. Avec des constructions comme:
Dont le sens est évident pour un programmeur Perl expérimenté mais mystère pour quiconque
la source
do_something() or die "arrrrgh!";
Les idiomes sont spécifiques à la langue. Eg
while (*dest++=*src++);
est un idiome C / C ++. Il est totalement impossible d'écrire quelque chose de très similaire en Pascal ou en Java. Utilisez le mot "idiome" comme vous l'utilisez en anglais. "Comment allez-vous?" comme une salutation est un idiome. Certaines langues comme l'allemand et le français ont le même idiome. Mais beaucoup d'autres langues ne «demanderaient» pas quelque chose comme ça comme une salutation. En revanche, un modèle (orienté objet) peut généralement être adapté à n’importe quel langage prenant en charge l’héritage et la délégation. Un idiome peut être aussi simple qu'une ligne de code. Un modèle de conception implique toujours plusieurs classes.la source
A idiom might be as simple as one line of code. A design pattern always involves several classes.
J'ai trouvé cet article à la recherche d'idiomes communs au C ++, car je m'y suis intéressé assez récemment et j'aimerais que mon code ne paraisse pas aussi amateur que je le pense ... :-P
Après avoir passé pas mal de temps avec Perl, j’ai trouvé que les idiomes de cette langue ressemblaient beaucoup à ceux que l’on trouve dans les langues naturelles, comme l’anglais ou l’espagnol (seulement deux que je connais assez bien pour connaître certains idiomes).
Je ne suis pas d'accord pour dire qu'un idiome est comme un "petit motif de conception". Je ne suis toujours pas d'accord, bien que ce soit moins vrai, qu'un idiome est un moyen de contourner une déficience d'une langue.
Peut-être que la réponse de Luc Danton est la plus proche, mais laissez-moi vous expliquer. Je pense qu'un idiome est, bien, idiomatique de ceux qui utilisent la langue. Habituellement, une expression courante ou une séquence d'expressions qui, sans être peut-être évidentes, effectuent une opération ou expriment une intention d'une manière qui ait un sens pour ceux qui sont suffisamment fluides pour l'avoir vue auparavant.
De retour à Perl, l'idiome le plus connu est peut-être la " transformation de Schwartzian ", une expression qui effectue un tri des données de manière compacte et efficace. Ce n’est pas la façon la plus évidente de réaliser une telle opération, mais c’est succinct, et ceux qui l’ont vue auparavant savent immédiatement ce qu’elle fait.
Un autre exemple notable est " The Orcish Maneuver ", qui tire parti des notions de vrai / faux, d'opérateurs riches et de priorité des opérateurs de Perl.
Celui que j’ai personnellement beaucoup aimé est en quelque sorte lié à la manœuvre orque, mais je ne connais pas de nom pour cela:
Ce n’est en effet pas un obscurcissement, mais plutôt une expression claire et compacte de quelque chose qui, autrement, exigerait plusieurs lignes. Si la clé est présente dans le hachage et a une valeur true, annulez-la en tant que tableau et poussez $ some_value sur ce tableau. Si l'élément de hachage n'est pas présent ou a une valeur false, affectez-lui un tableau vide, déréférencerez ce tableau et effectuez le push.
Il est également intéressant de noter que depuis Perl 5.14, une partie de cet idiome est obsolète - push peut désormais fonctionner directement sur la référence du tableau, sans @ {} nécessaire! De plus, à partir de Perl 5.10, on peut utiliser // = au lieu de || = qui vérifie non pas la vérité, mais bien la définition.
la source
some_dict.setdefault(key, []).append(some_value)
.l’idée d’un idiome est d’être une idée ou un concept qui englobe les langages de programmation, c’est une façon de faire les choses et un processus qui fonctionne sans beaucoup de restructuration conceptuelle lorsque vous le prenez et que vous le collez dans un autre, comme le genre de bulle humble . Les modèles de conception sont des implémentations spécifiques d'un idiome, ou des extensions de l'idée pour s'intégrer dans un langage, vous avez donc le modèle de conception javascript de l'idiome écouteur d'événements, etc.
la source
Design patterns are specific implementations of an idiom
? De quelle façon précisément? Avez-vous vu les idiomes C ++, dans le lien dans ma question?Je ne suis pas sûr à 100%, mais les idiomes sont simplement des termes se rapportant à un certain domaine. Lorsque vous parlez de "modèles de conception", vous pensez à "Modèle d'observateur" "Chaîne de responsabilité" "Modèle de visiteur" "usine". Ce sont des modèles courants utilisés pour résoudre des problèmes courants de programmation. Regardez ici pour une liste complète: http://en.wikibooks.org/wiki/C++_Programming/Code/Design_Patterns
la source
Je suppose que cela signifie qu’il ne s’agit pas d’une manière abstraite de haut niveau de modéliser votre application ou ses composants, mais plutôt d’une utilisation intelligente ou courante de la sémantique du langage.
Par exemple, définir une variable si sa valeur est false (généralement utilisé pour définir conditionnellement les variables nil):
la source
Voici un exemple d'idiome (en C #) pour gérer un événement. Vous n'êtes pas autorisé à déclencher un événement s'il n'y a pas de gestionnaire attaché. L'idiome est de toujours vérifier cela en premier.
Par conséquent, le langage général utilisé pour gérer les événements devient:
Cet idiome est spécifique (bien que non exclusif) au langage C #.
Plus généralement cependant, le mécanisme d'événement C # est un exemple du modèle de conception d' observateur qui pourrait être mis en œuvre dans n'importe quel langage.
la source