URL: https://linuxfr.org/users/tisaac/journaux/l-d-es-differents-paradigmes-de-programmation-en-python Title: L/D·es différents paradigmes de programmation en Python Authors: tisaac Date: 2019年11月07日T23:10:12+01:00 License: CC By-SA Tags: paradigme et python Score: 37 Utilisateur de Python tendance Data Sciences pas doué ni réellement formé en programmation, j’ai toujours eu une sorte de complexe par rapport au fait que ce que j’écris en Python sont juste des scripts basiques qui n’utilisent pratiquement pas le caractère orienté objet de Python. Caractère qui me semblait être une des composantes fondamentales de l’identité de Python. Il semblerait qu’il n’est en fait pas non pythonic d’écrire selon d’autre paradigme de programmation que celui orienté objet. C’est même une des nombreuses qualités attribuées à Python. C’est ce que j’ai découvert en lisant l’[article](https://opensource.com/article/19/10/python-programming-paradigms#comments) Perceiving Python programming paradigms de Jigyasa Grover. Pour les actuellement 34 personnes ayant répondu lors d’un sondage de la plus haute scientificité : Je ne parle pas anglais ; ça veut dire quoi « if » dans ce code source Python ?!, voici en français de très très larges extraits traduits. C’est parti : ============= Au début de chaque année, TIOBE annonce son Langage de programmation de l'année. Titre basé sur le nombre de recherches effectués sur des moteurs de recherche (notamment sur Google, Bing, Yahoo, Wikipedia, Amazon, YouTube, et Baidu) en 2018. Lorsque son dernier rapport annuel sur l'indice TIOBE est sorti, je n'ai pas été du tout surpris de voir Python remporter à nouveau ce titre. Allant dans le même sens que les conclusions de TIOBE, près de 90 000 développeurs ont participé à l'enquête annuelle de Stack Overflow sur les développeurs. Cette enquête est la plus vaste et la plus complète sur les personnes qui codent dans le monde entier. La principale conclusion à retenir des résultats de cette année était :> "Python, le langage de programmation à la croissance la plus rapide, a une fois de plus grimpé dans le classement des langages de programmation dans notre enquête, devançant Java cette année et se classant au deuxième rang des langages les plus populaires (derrière Rust). " Depuis que j'ai commencé à programmer et à explorer différents langages de programmation, j'ai vu l'admiration pour Python monter en flèche. Depuis 2003, il a toujours été parmi les 10 langages de programmation les plus populaires. Comme l'indique le rapport de TIOBE :> "C'est le premier langage de programmation le plus enseigné dans les universités de nos jours, il est numéro un dans le domaine statistique, numéro un pour l'IA, numéro un dans le scripting et numéro un dans l’écriture de tests système. En outre, Python est également leader dans la programmation web et le calcul scientifique (pour ne citer que quelques autres domaines). En résumé, Python est partout." Il y a plusieurs raisons à l'ascension rapide de Python, sa floraison et sa domination dans de multiples domaines, y compris le développement Web, le calcul scientifique, les tests, la science des données, l'apprentissage machine, et ceterae. Les raisons en sont notamment sa lisibilité et sa maintenabilité, la structure modulaire, dynamique et portable, la programmation flexible, son apprentissage facile et les supports d'apprentissage, les structures de données conviviales, la productivité et la vitesse qu’il permet, et, plus important encore, le support communautaire. La diversité des applications de Python est le résultat de ses caractéristiques combinées, qui lui donnent un avantage sur les autres langages. Mais à mon avis, la simplicité relative de sa syntaxe et la flexibilité stupéfiante qu'elle offre aux développeurs venant d’autres langages l'emporte. Très peu de langages peuvent égaler la capacité de Python à se conformer au style de codage d'un développeur plutôt que de le forcer à coder d'une manière particulière. Python permet aux développeurs seniors d'utiliser le style qui leur semble le mieux adapté pour résoudre un problème particulier. En travaillant avec Python, vous êtes comme un charmeur de serpent. Vous pouvez profiter de la promesse de Python d'offrir aux développeurs un environnement non contraignant pour coder dans le style le mieux adapté à une situation particulière et de rendre le code plus lisible, testable et cohérent. Les paradigmes de programmation de Python ----------------------------------------- Python supporte quatre grands [paradigmes de programmation] (https://fr.wikipedia.org/wiki/Paradigme_(programmation)) : impératif, fonctionnel, procédural et orienté objet. Que vous soyez d'accord ou pas pour dire qu'ils sont valables ou même utiles, Python s'efforce de rendre les quatre disponibles et opérationnels. Avant de nous plonger dans la détermination de quel paradigme de programmation est le plus approprié pour des cas d'utilisation spécifiques, c'est un bon moment pour les passer en revue rapidement. ### La programmation impérative La [programmation impérative]( https://fr.wikipedia.org/wiki/Programmation_impérative) utilise le caractère impératif du langage naturel pour exprimer les instructions. Il exécute les commandes étape par étape, comme une série de commandes verbales. Suivant l'approche "comment résoudre", il apporte des changements directs à l'état du programme ; c'est pourquoi il est aussi appelé modèle de programmation dynamique. En utilisant la programmation impérative, vous pouvez rapidement écrire du code très simple mais élégant, et c'est super pratique pour les tâches qui impliquent une manipulation de données. En raison de sa stratégie d'exécution relativement plus lente et séquentielle, il ne peut pas être utilisé pour des calculs complexes ou parallèles. ### La programmation fonctionnelle La [programmation fonctionnelle]( https://fr.wikipedia.org/wiki/Programmation_fonctionnelle) considère un programme de calcul comme l'évaluation de fonctions mathématiques basées sur le [calcul lambda]( https://fr.wikipedia.org/wiki/Lambda-calcul). Le calcul lambda est un système formel en logique mathématique pour exprimer le calcul basé sur l'abstraction de fonction et l'application utilisant la liaison et la substitution de variables. Il suit l'approche de la "solution à apporter", c'est-à-dire qu'il exprime la logique sans décrire son flux de contrôle, d'où il est aussi classé dans le paradigme de programmation déclarative. ### La programmation procédurale La [programmation procédurale]( https://fr.wikipedia.org/wiki/Programmation_procédurale) est un cas particulier de programmation impérative dans lequel les énoncés sont structurés en procédures (aussi appelées sous-programmes ou fonctions). La composition du programme est plutôt un appel de procédure où les programmes peuvent résider n’importe où dans l'univers alors que l'exécution est séquentielle, devenant ainsi un goulot d'étranglement pour l'utilisation des ressources. Le paradigme de programmation procédurale facilite la pratique d'une bonne conception de programme et permet de réutiliser les modules sous la forme de bibliothèques de code. Cette forme de développement modulaire est un style de développement très ancien. Les différents modules d'un programme peuvent n’avoir aucune relation les uns avec les autres et peuvent être situés à des endroits différents. Mais la multiplicité de modules crée des difficultés pour de nombreux développeurs, car cela conduit non seulement à la duplication de la logique mais aussi à beaucoup de frais généraux en termes de trouver et de faire les bons appels. ### La programmation orientée objet La programmation orientée objet considère des entités de base comme des objets dont l'instance peut contenir à la fois des données et les méthodes correspondantes pour modifier ces données. Les différents principes de la conception orientée objet aident à la réutilisation du code, au masquage des données, etc., mais c'est une bête complexe, et il n’est pas facile d’écrire dans ce paradigme. Quel type de programmation choisir ? ------------------------------------ Il est important de noter qu'il n'y a aucune comparaison entre les différents types de programmation. Puisque le logiciel n'est rien d'autre que la représentation d’un savoir, la réponse à la question : "Quelle est la meilleure façon de représenter mon problème ?" est de choisir un paradigme de programmation spécifique. En termes simples, si votre problème implique une série de manipulations séquentielles simples, adopter une programmation impérative de la vieille école serait le moins coûteux en termes de temps et d'effort et vous donnerait les meilleurs résultats. Dans le cas de problèmes nécessitant des transformations mathématiques des valeurs, du filtrage de l'information ou de la cartographie, la programmation fonctionnelle peut s'avérer utile. Si le problème est structuré comme un ensemble d'objets interdépendants avec certains attributs qui peuvent changer avec le temps, en fonction de certaines conditions, la programmation orientée objet sera super utile. Bien entendu, une approche fondée sur des règles ne fonctionne pas ici, car le choix du paradigme de programmation dépend aussi fortement du type de données à traiter, des besoins dynamiques du système et de divers autres facteurs comme l'évolutivité. Tendances récentes ------------------ L'analyse des derniers mots à la mode dans le monde IT peut aider à déterminer pourquoi certains paradigmes de programmation fonctionnent mieux que d'autres. L'**apprentissage machine** utilise un mélange sain de programmation impérative et de programmation fonctionnelle avec un soupçon d'immuabilité. L'extraction et le prétraitement des caractéristiques sont mieux abordées sur de manière fonctionnelle, car elles nécessitent un traitement mathématique des données et parce que les mappages, les réductions et les filtrations peuvent être effectuées en parallèle sans trop dépendre les unes des autres. L'estimation des modèles d'apprentissage machine est mieux abordée par la programmation impérative à l'ancienne, car l'optimisation de la valeur des fonctions (a.k.a. l'état du programme) doit être mise à jour à chaque itération et nécessite donc une exécution séquentielle à plusieurs endroits de l'algorithme. Dans ce cas, la programmation impérative est plus rapide que la programmation fonctionnelle. Cela évite également de créer des copies de tout après chaque étape ; au lieu de cela, elle se contente de mettre à jour les caractères de remplissage des valeurs précédentes. L'**apprentissage en profondeur** peut être bien exécuté d'une manière fonctionnelle, car les modèles d'apprentissage en profondeur sont des modèles composés. L'ensemble du processus optimise un ensemble de fonctions composées, les poids sont immuables et sans état, et les mises à jour peuvent être appliquées dans n'importe quel ordre tant que les entrées correspondantes sont calculées. L'utilisation de la programmation fonctionnelle permet la simultanéité et le parallélisme sans frais et facilite également le travail avec de grands modèles distribués. Il existe également certains paradigmes personnalisés où la programmation fonctionnelle est entrelacée avec la théorie de l'information pour éviter le surajustement dans les modèles statistiques. La **manipulation des données** peut être abordée aussi bien avec une programmation fonctionnelle qu’avec une programmation orientée objet. Dans la programmation fonctionnelle, tout est immuable, les algorithmes sont exprimés de manière succincte, et il y a une correspondance native des motifs, mais la formulation de la commande de type expression mathématique est un art. L'approche de la programmation orientée objet permet d'obtenir des boucles récursives et itératives et une structure basée sur les classes qui facilite la mise à l'échelle de données plus volumineuses et de nouvelles fonctions. L'inconvénient est que les algorithmes et la logique du code ne sont pas exprimés d'une manière lisible. Bien que les deux paradigmes ont en général un garbage collector automatique et peuvent accéder aux bases de données et les manipuler facilement, le choix de l'un ou l'autre dépend fortement des connaissances du programmeur. Plats à emporter ----------- Il y a une forte probabilité que deux développeurs soient en désaccord sur le meilleur style de codage pour n'importe quelle situation et aient des arguments valables à l'appui de leur opinion. La chose étonnante à propos de Python est qu'il vous permet de choisir le paradigme de programmation qui fonctionne le mieux pour vous dans une situation donnée. Une tâche peut toujours être divisée en sous-tâches où chaque petite partie est codée dans un paradigme complètement différent. Le style mix-and-match fonctionne parfaitement tant que les packages utilisés sont minimes, que les entrées et sorties sont clairement définies et que la complexité est modérée. Il n'y a aucune règle qui dit que vous ne pouvez pas combiner les styles selon vos besoins. Python ne s'arrête pas au milieu de l'interprétation de votre application et affiche une erreur de style lorsque vous mélangez les styles. Parce qu'il n'existe pas de guide parfait pour choisir un style de codage correct pour un cas d'utilisation donné, la meilleure suggestion est d'essayer plusieurs paradigmes en pesant le pour et le contre jusqu'à ce que vous trouviez celui qui mène à une solution simple mais efficace. Il y aura des moments au cours de cette expérimentation où vous verrez qu'au lieu d'utiliser un style unique, une combinaison de paradigmes de programmation fonctionne mieux. Au cours de ce processus, il est également fortement recommandé de documenter les exigences et les essais des différents styles pour les partager avec la communauté et obtenir des commentaires. Les commentaires et les suggestions aideront au développement ainsi que vos coéquipiers et tous les futurs développeurs qui rejoindront l'équipe.

AltStyle によって変換されたページ (->オリジナル) /