up:: [[plan du mémoire de L3]] #informatique #fac # Définition et concepts importants ## qu'est-ce qu'un paradigme ![[paradigme de programmation#^definition|paradigme]] > [!cite] [Programming Paradigms for Dummies: What Every Programmer Should Know](zotero://select/groups/5383243/items/673TMQRT) - [Page 10](zotero://open-pdf/groups/5383243/items/P4L4LCJZ?page=2&annotation=2294PTUD) > A programming paradigm is an approach to programming a computer based on a mathematical theory or a coherent set of principles. > > > [!note] Notes > > Paradigme: approche (éventuellement mathématique) de la programmation > > > > - chaque paradigme est défini à partir de principes de base (éventuellement une théorie mathématique) > ^2294PTUDaP4L4LCJZg5383243p2 ## les principaux paradigmes [[taxonomie des paradigmes de programmation]] - impératif - procédural - orienté objet - fonctionnel - fonctionnel pur - programmation structurée ## les langages multi-paradigmes > [!cite] [Programming Paradigms for Dummies: What Every Programmer Should Know](zotero://select/groups/5383243/items/673TMQRT) - [Page 10](zotero://open-pdf/groups/5383243/items/P4L4LCJZ?page=2&annotation=4YR7745Q) > A language should ideally support many concepts in a well-factored way, so that the programmer can choose the right concepts whenever they are needed without being encumbered by the others. > > > [!note] Notes > > Les langages devraient tous être multiparadigmes, pour pouvoir choisir les bons concepts en fonction du problème. > ^4YR7745QaP4L4LCJZg5383243p2 ## Définition de la puissance d'expression > [!cite]+ [Expressive power (computer science)](zotero://select/groups/5383243/items/L9WYV33P) - [Page ](zotero://open-pdf/groups/5383243/items/Q9KCGU98?annotation=4FGMWNP7) > In computer science, the expressive power (also called expressiveness or expressivity) of a language is the breadth of ideas that can be represented and communicated in that language. > > > [!note] Notes > > expressivité := étendue des idées qui peuvent être représentées par un langage > ^4FGMWNP7aQ9KCGU98g5383243 > [!cite]+ [Expressive power (computer science)](zotero://select/groups/5383243/items/L9WYV33P) - [Page ](zotero://open-pdf/groups/5383243/items/Q9KCGU98?annotation=ENM5Z4IE) > The more expressive a language is, the greater the variety and quantity of ideas it can be used to represent. > ^ENM5Z4IEaQ9KCGU98g5383243 > [!cite]+ [Expressive power (computer science)](zotero://select/groups/5383243/items/L9WYV33P) - [Page ](zotero://open-pdf/groups/5383243/items/Q9KCGU98?annotation=UL4ZYIV6) > The term expressive power may be used with a range of meaning. It may mean a measure of the ideas expressible in that language:[2] > > regardless of ease (theoretical expressivity) > concisely and readily (practical expressivity) > > ^UL4ZYIV6aQ9KCGU98g5383243 ### Au sens formel ![[expressivité théorique]] Tous les paradigmes sont équivalent puisqu'ils sont tous turing-complets en fait non : - nuance : les langages descriptifs (XML, HTML, JSON...) - languages de markup : non turing-complets mais intéressants quand même ### Au sens commun ![[expressivité pratique#^definition]] ### compromis expressivité vs analysabilité Plus un langage est expressif, plus il est complexe de l'analyser mathématiquement. - expressivité théorique : plus un formalisme peut exprimer d'idées, plus il est complexes de démontrer des théorèmes sur ce formalisme - en général : plus un formalisme est complexe, plus les problèmes de décision sont durs à résoudre, voir indécidables - exemple : si un langage est turing-complet, alors le problème de l'arrêt est indécidable sur ce langage > [!cite]+ [Paradigme (programmation)](zotero://select/groups/5383243/items/U2XUNF8V) - [Page ](zotero://open-pdf/groups/5383243/items/PYQD2DCX?annotation=LMVQE7BZ) > Cependant, le fait d’éviter certaines techniques peut permettre de rendre plus aisée la démonstration de théorèmes sur la correction d’un programme — ou simplement la compréhension de son fonctionnement — sans limiter la généralité du langage de programmation. > ^LMVQE7BZaPYQD2DCXg5383243 > [!cite]+ [Expressive power (computer science)](zotero://select/groups/5383243/items/L9WYV33P) - [Page ](zotero://open-pdf/groups/5383243/items/Q9KCGU98?annotation=T3UDRGGG) > The design of languages and formalisms involves a trade-off between expressive power and analyzability. The more a formalism can express, the harder it becomes to understand what instances of the formalism say. Decision problems become harder to answer or completely undecidable. > > > [!note] Notes > > design d'un langage => compromis entre expressivité et analysabilité. > > formalisme peut exprimer + de concepts => ses instances deviennent + dures à analyser (les problèmes de décision devienent plus complexes, voire indécidables) > ^T3UDRGGGaQ9KCGU98g5383243 #### Exemple de compromis : automates et grammaires - les automates à pile sont moins expressifs que les machines de Turing - les automates à pile reconnaissent exactement les grammaires non-contextuelles - les machines de Turing reconnaissent les langages récursivement énumérables - les automates à pile ont un formalisme plus pratique (certains théorèmes sont plus définis) - le problème qui demande si un mot est reconnu par un automate à pile est décidable - le problème qui demande si un mot est reconnu par une machine de Turing est indécidable On voit donc que les machines de Turing sont un formalisme plus expressif (certains concepts exprimés par des machines de Turing ne sont pas exprimables par des automates à pile) mais que certains problèmes deviennent indécidables sur ce formalisme (alors qu'ils le sont sur les automates à pile). > [!cite]+ [Hiérarchie de Chomsky](zotero://select/groups/5383243/items/SWVUNZNM) - [Page ](zotero://open-pdf/groups/5383243/items/GTNGMUQL?annotation=Z2Q99QE4) > Les langages produits, appelés langages contextuels ou sensibles au contexte, sont exactement ceux reconnus par une machine de Turing non déterministe à mémoire linéairement bornée, appelés couramment automates linéairement bornés. > > > [!note] Notes > > les grammaires contextuelles sont reconnues exactement par les automates linéairement bornés (machines de Turing non déterministe à mémoire linéairement bornée) > ^Z2Q99QE4aGTNGMUQLg5383243 > [!cite]+ [Hiérarchie de Chomsky](zotero://select/groups/5383243/items/SWVUNZNM) - [Page ](zotero://open-pdf/groups/5383243/items/GTNGMUQL?annotation=2Q8JY698) > Ces grammaires engendrent exactement les langages algébriques, appelés aussi langages hors contexte, langages acontextuels, ou langages non contextuels. Ils sont reconnus par un automate à pile. > > > [!note] Notes > > en parlant des grammaires non-contextuelles > ^2Q8JY698aGTNGMUQLg5383243 > [!cite]+ [Hiérarchie de Chomsky](zotero://select/groups/5383243/items/SWVUNZNM) - [Page ](zotero://open-pdf/groups/5383243/items/GTNGMUQL?annotation=SL7UL6CY) > La classe des langages rationnels (type 3) est incluse strictement dans la classe des langages algébriques (type 2). > La classe des langages contextuels (type 1) est incluse strictement dans la classe des langages récursivement énumérables (type 0). > L'inclusion de la classe des langages algébriques (type 2) dans la classe des langages contextuels (type 1) doit être précisée car un langage contextuel ne contient jamais le mot vide ε. L'énoncé exact est : > Un langage algébrique ne contenant pas le mot vide est un langage contextuel > ou, de manière équivalente : > Un langage algébrique est un langage contextuel éventuellement augmenté du mot vide. > > > [!note] Notes > > implique que les grammaires non-contextuelles on moins d'expressivité que les grammaires contextuelles. > ^SL7UL6CYaGTNGMUQLg5383243 > [!cite]+ [Automate à pile](zotero://select/groups/5383243/items/7X5UDIRY) - [Page ](zotero://open-pdf/groups/5383243/items/WAETBZDG?annotation=DMXNL4GE) > le problème de l'appartenance d'un mot à un langage algébrique est décidable : il existe un algorithme qui, étant donnés la description d'une grammaire non contextuelle et un mot, répond en temps fini à la question de l'appartenance de ce mot au langage défini par cette grammaire (plus précisément, on peut le tester en un temps $O(n^{3})$ pour un mot de longueur n, grâce à l'algorithme CYK). > ^DMXNL4GEaWAETBZDGg5383243 # Paradigmes dans l'apprentissages ## avantages de la diversité > [!cite]+ [10 Things Software Developers Should Learn about Learning](zotero://select/groups/5383243/items/E829XCHJ) - [Page 81](zotero://open-pdf/groups/5383243/items/SQN4T6Z8?page=4&annotation=7WYHBT9D) > One key difference between beginners and experts is that experts have seen it all before. Research into chess experts has shown that their primary advantage is their ability to remember and recognize the state of the board. > > > [!note] Notes > > L'avantage des experts est d'avoir en mémoire beaucoup de cas, quand les débutants doivent réfléchir pour chaque nouveau cas. > ^7WYHBT9DaSQN4T6Z8g5383243p4 > [!cite]+ [10 Things Software Developers Should Learn about Learning](zotero://select/groups/5383243/items/E829XCHJ) - [Page 81](zotero://open-pdf/groups/5383243/items/SQN4T6Z8?page=4&annotation=K2JKSWGE) > Experts build up a mental library of patterns > ^K2JKSWGEaSQN4T6Z8g5383243p4 > [!cite]+ [10 Things Software Developers Should Learn about Learning](zotero://select/groups/5383243/items/E829XCHJ) - [Page 81](zotero://open-pdf/groups/5383243/items/SQN4T6Z8?page=4&annotation=2PSW4XYM) > seeing a variety of programming paradigms will help further. > ^2PSW4XYMaSQN4T6Z8g5383243p4 ## problèmes de la diversité > [!cite]+ [10 Things Software Developers Should Learn about Learning](zotero://select/groups/5383243/items/E829XCHJ) - [Page 84](zotero://open-pdf/groups/5383243/items/SQN4T6Z8?page=7&annotation=588UCYYD) > Knowing multiple languages can be beneficial once they have been mastered, but sometimes transferring knowledge from one programming language to another can lead to faulty knowledge > > > [!note] Notes > > le transfert de connaissances d'un langage à un autre peut être avantageux, mais peut aussi créer de la connaissance fausse (si le transfert n'est pas pertinent à ce moment). > ^588UCYYDaSQN4T6Z8g5383243p7 # Paradigmes pour la résolution de problèmes ## diversité des approches La diversité est utile, de nouveaux paradigmes apportent de nouvelles façons de voir. Langages multi-paradigmes ## créer un paradigme pour chaque type de problème # Les paradigmes comme outil pour la pensée Connaître un système de calcul ne permet pas d'immédiatement tout connaître sur son champ d'expressivité Notamment : - connaître un système de calcul ne permet pas (toujours) de connaître l'ensemble des problèmes décidables de ce système - En particulier, les systèmes universels (Turing-complets) : il existe toujours des problèmes indécidables dans de tels modèles (problème de l'arrêt) - voir [[Remplissage du plan de L3#compromis expressivité vs analysabilité]] De la même manière, connaître un langage de programmation ne permet pas de savoir immédiatement résoudre tous les problèmes que l'on peut rencontrer. Par exemple, la syntaxe des langages similaires à LISP est très simple et peut être apprise en quelques heures pour certains dialectes. Cependant, connaître la syntaxe complête et le fonctionnement de LISP ne permettra pas de résoudre tout problème : il est également nécessaire d'être capable de "faire le lien" entre un problème et un langage. C'est ce lien que les paradigmes de programmation permettent de faire, soit en donnant explicitement une méthode pour le faire (comme la [[paradigme programmation structurée|programmation structurée]]), soit en définissant comment le programmeur doit voir les programmes, soit en implémentant certaines fonctionnalités utiles pour gérer certains problèmes.