This commit is contained in:
Oscar Plaisant
2024-03-31 23:15:58 +02:00
parent 1a938c5a10
commit 03a5034ca4
23 changed files with 478 additions and 46 deletions

View File

@@ -5,6 +5,8 @@ up:: [[plan du mémoire de L3]]
# 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.
>
@@ -19,12 +21,13 @@ up:: [[plan du mémoire de L3]]
[[taxonomie des paradigmes de programmation]]
### impératif
#### procédural
##### orienté objet
### fonctionnel
#### fonctionnel pur
### programmation structurée
- 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)
@@ -35,9 +38,102 @@ up:: [[plan du mémoire de L3]]
> ^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 dun 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é
@@ -80,6 +176,7 @@ Connaître un système de calcul ne permet pas d'immédiatement tout connaître
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.