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