cours/Remplissage du plan de L3.md
Oscar Plaisant a56210eacb update
2024-03-31 23:24:50 +02:00

14 KiB
Raw Blame History

up:: plan du mémoire de L3 #informatique #fac

Définition et concepts importants

qu'est-ce qu'un paradigme

!paradigme de programmation#^definition

[!cite] Programming Paradigms for Dummies: What Every Programmer Should Know - Page 10 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 - Page 10 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) - Page 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) - Page 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) - Page 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) - Page 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) - Page 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 - Page 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 - Page 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 - Page 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 - Page 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é

  • pour apprendre, il est mieux d'apprendre plusieurs langages
    • car il en existe plusieurs
    • car le fait de connaître différentes approches de la programmation permet de mieux résoudre de nouveaux problèmes
      • on pourra choisir le paradigme adapté à notre problème (voir section résolution de problèmes)
      • on construit des modèles mentaux pour les problèmes

[!cite]+ Form and Content in Computer Science (1970 ACM turing lecture) - Page 9

  • To help people learn is to help them build, in their heads, various kinds of computational models.
  • This can best be done by a teacher who has, in his head, a reasonable model of what is in the pupil's head.
  • For the same reason the student, when debugging his own models and procedures, should have a model of what he is doing, and must know good debugging techniques, such as how to formulate simple but critical test cases.
  • It will help the student to know something about computational models and programming. The idea of debugging itself, for example, is a very powerful concept - in contrast to the helplessness promoted by our cultural heritage about gifts, talents, and aptitudes. The latter encourages "I'm not good at this" instead of "How can I make myself better at it?" ^CCMAKXHCaH39XI9D9g5383243p9

[!cite]+ 10 Things Software Developers Should Learn about Learning - Page 81 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 - Page 81 Experts build up a mental library of patterns ^K2JKSWGEaSQN4T6Z8g5383243p4

[!cite]+ 10 Things Software Developers Should Learn about Learning - Page 81 seeing a variety of programming paradigms will help further. ^2PSW4XYMaSQN4T6Z8g5383243p4

problèmes de la diversité

[!cite]+ 10 Things Software Developers Should Learn about Learning - Page 84 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

avantages des langages multi-paradigme

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

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), 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.