quelles tables ou quels index elle examine, quelles clauses partielles doivent être
calculées en priorité etc.
* la programmation orientée objets manipule des collections d'objets. Les objets ont
un état interne et supportent des méthodes qui requièrent ou modifient l'état interne
comme il le faut. Smalltalk et Java sont des langages orientés objets. C++ et le langage
Python supportent la programmation orientée objets mais ne forcent pas à utiliser les
caractéristiques de l'orienté objets.
* la programmation fonctionnelle décompose un problème en un ensemble de
fonctions. Dans l'idéal, les fonctions prennent des entrées, et produisent des sorties, et
n'ont aucun état interne qui affecte les sorties produites pour des données d'entrées
données. Parmi les plus connus des langages fonctionnelle, citons la famille ML
(Standard ML, Ocaml, et d'autres variantes) et Haskell.
NDT : Haskell est un langage destiné à la recherche sur la programmation. C'est un langage
fonctionnel pur, ce qui signifie que par défaut aucun effet de bord n'est autorisé, ni les
entrées/sorties, ni même l'affectation d'une variable. Haskell impose ce style dans tout code
qui ne signale pas explicitement par son type qu'il contient des effets de bord.
Les concepteurs de certains langages informatiques choisissent de mettre l'accent sur une
approche particulière de programmer. Cela peut rendre difficile d'écrire des programmes qui
utilisent une approche différente. D'autres langages sont des langages multi-paradigmes qui
supportent plusieurs approches différentes. Lisp, C++, Python sont multi-paradigmes. Vous
pouvez écrire des programmes ou des librairies qui sont largement procéduraux, ou orientés
objets, ou fonctionnels avec tous ces langages. Dans un grand programme, des sections
différentes peuvent être écrites selon des approches différentes ; par exemple, les unités
d'interface graphique peuvent être orientés objet alors que la logique du calcul est procédurale
ou fonctionnelle.
Dans un programme fonctionnel, l'entrée remonte à travers un ensemble de fonctions. Chaque
fonction opère sur son entrée et produit une nouvelle entrée. Le style fonctionnel décourage
les fonctions qui on un effet de bord qui modifie l'état interne ou réalise d'autres changements
qui ne sont pas visibles dans la valeur retournée par la fonction. Les fonctions sans effet de
bord sont dites purement fonctionnelles. Éviter les effets de bord, cela signifie qu'on ne peut
utiliser de structures de données qui sont mises à jour quand le programme tourne ; chaque
sortie d'une fonction doit uniquement dépendre de ses entrées.
Certains langages sont très stricts sur la pureté et ne possèdent pas l'instruction d'affectation
comme a=3 ou c=a+b, mais il difficile d'éviter tous les effets de bord. Afficher à l'écran ou
écrire un fichier sur un disque sont des effets de bord. Par exemple en Python, l'appel des
fonctions print() ou time.sleep() ne retourne rien de bien utile ; ces fonctions sont
uniquement appelées pour leur effet de bord qui est d'envoyer du texte à l'écran ou d'arrêter
l'exécution durant une seconde.
Les programmes Python écrits dans un style fonctionnel ne tombent pas dans ces extrêmes
que sont l'évitement de toute entrée/sortie ou de toute affectation ; ainsi, ils auront une
interface d'apparence fonctionnelle, mais utiliseront des caractères non fonctionnels en
interne. Par exemple, l'implémentation d'une fonction va utiliser l'affectation à des variables
locales, mais évitera de modifier des variables globales et autres effets de bord.
On peut considérer la programmation fonctionnelle comme l'exact opposé de la
programmation orientée objets. Les objets sont un peu comme des capsules qui contiennent
des états internes avec une collection de méthodes qui quand vous les appelez, modifient ces
états, et un programme consiste à réaliser le bon ensemble de ces changement d'états. La
programmation fonctionnelle désire éviter les changements d'état autant que possible et
adaptation de la doc Python page 2 Programmation fonctionnelle en Python