Langages de programmation
introduction
Paradigmes de programmation
●
Paradigme:
En science, un paradigme décrit des concepts distincts ou des modèles de pensée dans une discipline scientifique
●
Les principaux paradigmes:
– Programmation impérative
– Programmation fonctionnelle
– Programmation logique ou déclarative
●
Paradigme orthogonal aux trois précédents:
– Programmation orientée objet
Programmation impérative
●
Le paradigme repose sur:
– La modification de variables mutables
– L‘utilisation d‘affectations
– Le codage de structures de contrôle comme:
● Si alors sinon, itération, arrêt, continuation, retour
●
Le paradigme est très influencé par l‘architecture des machines de type Von Neumann
Processeur Mémoire
Bus
Programmation impérative et ordinateurs
●
Il y a une forte correspondance entre:
mutations cellules mémoire
déréférencements instructions de chargement affectations instructions de stockage structures de contrôle jumps
●
Problème:
– Comment éviter de concevoir un programme mot par mot ?
●
Référence:
– John Backus: Can Programming Be Liberated From Von Neumann Style ? (Turing Award Lecture 1978)
Solution
●
Constat:
–
La programmation impérative est limitée par l‘architecture Von Neumann:
● Qui tend à concevoir les structures de données mot par mot
●
Solution:
–
Il est nécessaire d‘avoir d‘autres techniques pour définir des abstractions de haut niveau comme les collections, les documents, les chaînes de caractères, etc.
–
Il faut donc idéalement développer des théories ... des langages
Qu‘est-ce qu‘une théorie ?
●
Une théorie consiste en:
– Un ou plusieurs types de données
– Des opérations sur ces types
– Des lois ou règles qui décrivent les relations entre valeurs et opérations
●
Normalement, une théorie ne décrit pas les mutations
– Par exemple la théorie des polynômes
– Ou encore celle des chaînes de caractères
● Les JAVA Strings sont immutables.
Conséquences en programmation
●
Pour implémenter des concepts de haut niveau qui respectent les théories mathématiques, il ne faut pas de mutation
– La théorie ne doit pas l‘accepter
– La mutation contredit les lois de la théorie
●
Conséquences:
– Définir des théories qui portent sur des opérateurs vus comme des fonctions
– Éviter les mutations
– Avoir une bonne solution pour élever le niveau d‘abstraction et composer des fonctions
Programmation fonctionnelle
●
Sens restrictif
– La programmation fonctionnelle (FP) signifie qu‘il faut programmer sans variable mutable, affectation, boucle, et les autres structures de contrôle impératives
●
Sens plus large
– La programmation fonctionnelle signifie se concentrer sur les fonctions
●
En particulier
– Les fonctions peuvent être des valeurs produites, consommées et composées
– Cela est possible avec un langage de programmation fonctionnelle
Langages de programmation fonctionnelle
● Sens stricte
– Un langage de programmation fonctionnelle n‘a pas de variable mutable, d‘affectation ou de structures de contrôle impératives
● Sens large
– Un langage de programmation fonctionnelle permet la construction de programmes élégants qui sont centrés sur les fonctions
● En particulier, les fonctions dans un langage FP sont des objets de première classe (first class citizens)
– Elles peuvent être définies n‘importe où, même dans d‘autres fonctions
– Comme toute autre valeur, elles peuvent être passées comme paramètres aux fonctions et retournées comme résultat
– Comme pour les autres valeurs, il existe un ensemble d‘opérateurs pour composer les fonctions
Paradigme orienté objet
●
Tout est pensé en terme d‘objets qui font quelque chose
●
Orientation objet pure
–
Chaque valeur est un objet
–
Si le concept de classe existe alors le type de chaque valeur est une classe
●
Orientation objet élargie
–
Il peut y avoir des types primitifs non objet
Programmation orientée objet
●
Fondements
– L’abstraction fait référence à un ensemble de concepts qu’une
entité produit afin de résoudre un problème
– L’encapsulation représente un ensemble de mécanismes offert
par le langage qui permet de masquer les détails de
l’implémentation
Historique des langages FP
● 1959 Lisp
● 1975-77 ML, FP, Scheme
● 1978 Smalltalk
● 1986 Standard ML
● 1990 Haskell, Erlang
● 1999 XSLT
● 2000 OCaml
● 2003 Scala, Xquery
● 2005 F#
● 2007 Clojure
Les langages
●
Programmation impérative
– Langage C
●
Programmation impérative et orientée objet
– Langages JAVA, C++, C#, Python, Ruby, PHP
●
Programmation fonctionnelle
– Haskell, Pure Lisp, XSLT, XPath, XQuery, FP
●
Programmation fonctionnelle et orientée objet
– Langages SCALA, OCaml
●
Programmation impérative, fonctionnelle et orientée objet
– Langages Javascript, JAVA, C#, PHP, Ruby, ...