Paradigme (programmation)

Pour les articles homonymes, voir Paradigme (homonymie).

Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus.

Cet article ne cite pas suffisamment ses sources (juin 2008).

Si vous disposez d'ouvrages ou d'articles de référence ou si vous connaissez des sites web de qualité traitant du thème abordé ici, merci de compléter l'article en donnant les références utiles à sa vérifiabilité et en les liant à la section « Notes et références ».

En pratique : Quelles sources sont attendues ? Comment ajouter mes sources ?

Schéma FBP (en) simple à 3 blocs, avec des connexions étiquetées

Le paradigme de programmation est la façon (parmi d'autres) d'approcher la programmation informatique et de formuler les solutions aux problèmes et leur formalisation dans un langage de programmation approprié[1]. Ce n'est pas de la méthodologie contenant une méthode ; cette dernière organise le traitement des problèmes reconnus dans l'écosystème concerné pour aboutir à la solution conceptuelle et programme exécutable.

## Utilisation

[modifier | modifier le code]

Un paradigme de programmation fournit (et détermine) la vue qu’a le développeur de l’exécution de son programme en situation d'exploitation. Par exemple, en programmation orientée objet, les développeurs peuvent considérer le programme comme une collection d’objets en interaction, tandis qu’en programmation fonctionnelle un programme peut être vu comme une suite d'évaluations de fonctions sans états. Lors de la programmation d’ordinateurs ou de systèmes multi-processeurs, la programmation orientée processus permet aux développeurs de voir les applications comme des ensembles de processus agissant sur des structures de données localement partagées.

De la même manière que des courants différents du génie logiciel préconisent des méthodes différentes, des langages de programmation différents plaident pour des « paradigmes de programmation » différents. Certains langages sont conçus pour supporter un paradigme (en particulier Smalltalk et Java, qui supportent la programmation orientée objet, tandis que Haskell supporte la programmation fonctionnelle), alors que d’autres supportent des paradigmes multiples (à l’image de C++, Common Lisp, OCaml, Oz, Python, Ruby, Scala, Pascal ou Scheme).

De nombreux paradigmes de programmation sont aussi célèbres pour les techniques qu’ils prohibent que pour celles qu’ils permettent. La programmation fonctionnelle pure, par exemple, interdit l’usage d’effets de bord ; la programmation structurée interdit l’usage du goto. En partie pour cette raison, les nouveaux paradigmes sont souvent considérés comme doctrinaires ou abusivement rigides par les développeurs habitués aux styles déjà existants. Cependant, le fait d’éviter certaines techniques peut permettre de rendre plus aisée la démonstration de théorèmes sur la correction d’un programme — ou simplement la compréhension de son fonctionnement — sans limiter la généralité du langage de programmation. De plus, il est possible d'écrire un programme en adoptant la programmation orientée objet même si le langage, par exemple le langage C, ne supporte pas ce paradigme.

La relation entre les paradigmes de programmation et les langages de programmation peut être complexe, car un langage de programmation peut supporter des paradigmes multiples. Pour citer un exemple, C++ est conçu pour supporter des éléments de programmation procédurale, de programmation orientée objet et de programmation générique. Cependant, concepteurs et développeurs décident de la méthode d’élaboration d’un programme en utilisant ces éléments de paradigmes. Il est possible d’écrire un programme purement procédural en C++, comme il est possible d’en écrire un purement orienté objet, ou encore qui relève des deux paradigmes.

## Liste de paradigmes

[modifier | modifier le code]

Les paradigmes de la liste sont regroupés par grandes familles.

### Types de programmation impérative (et dérivés)

[modifier | modifier le code]

* Programmation impérative, le paradigme originel et le plus courant
* Programmation structurée, visant à structurer les programmes impératifs pour en supprimer les instructions goto
* Programmation procédurale, à comparer à la programmation fonctionnelle

### Types de programmation orientée objet (et dérivés)

[modifier | modifier le code]

* Programmation orientée objet, consistant en la définition et l’assemblage de briques logicielles appelées objets (comme en Smalltalk)
* Programmation orientée prototype, qui simplifie et rend plus flexible la programmation orientée objet
* Programmation orientée classe (en), à comparer à la Programmation orientée prototype (dans le contexte de la programmation orientée objet)
* Programmation orientée composant (comme en OLE)

### Types de programmation déclarative (et dérivés)

[modifier | modifier le code]

* Programmation déclarative, consistant à déclarer les données du problème, puis à demander au programme de le résoudre
* Programmation descriptive, à l'expressivité réduite, qui permet de décrire des structures de données (par exemple, HTML ou LaTeX)
* Programmation fonctionnelle, avec laquelle un programme est une fonction au sens mathématique du terme
* Programmation logique, consistant à exprimer les problèmes et les algorithmes sous forme de prédicats (comme en Prolog)
* Programmation par contraintes, à comparer à la programmation logique

### Autres types

[modifier | modifier le code]

* Programmation événementielle, consistant à répondre à des événements
* Programmation séquentielle
* Programmation interruptible, à comparer à la programmation événementielle
* Programmation concurrente, où l’on tient compte de l’exécution en parallèle de plusieurs piles sémantiques
* Programmation orientée aspect (comme en AspectJ)
* Programmation par contrat, dans lequel le déroulement des traitements est régi par des règles (comme en Eiffel)
* Programmation chimique, où les programmes sont vus comme des solutions chimiques abstraites. Les données sont des molécules dont les réactions chimiques représentent les opérations
* Programmation orientée agent, souvent basée sur la programmation orientée objet, qui simplifie le développement d’agents logiciels
* Programmation orientée concept
* Programmation orientée pile (en) (comme en Forth)
* Programmation orientée principes
* Programmation orientée flux de données, souvent utilisée pour les solutions de communication client/serveur, elle permet d'abstraire les différentes plateformes en se concentrant sur l'échange et le traitement des données. Elle est généralement représentée sous forme de diagrammes ou de graphes (voir Diagramme de flux de données) (comme dans un Tableur)
* Programmation non-déterministe
* Programmation orientée sujet (en)
* Programmation réactive
* Programmation synchrone
* Programmation par annotations (comme en langage Flare)
* Programmation par attributs (comme avec les annotations Java, pré-traitées par la classe XDoclet, ou avec les attributs C#)
* Programmation sur flux, à comparer à la Programmation sur événement
* Programmation par messages, à comparer à la programmation impérative
* Programmation orientée processus (en), pour la programmation parallèle
* Programmation récursive, à comparer à la programmation itérative
* Programmation réflexive
* Programmation scalaire, à comparer à la programmation par tableaux
* Programmation au niveau valeur (en), à comparer à la programmation au niveau fonction (en)

## Notes et références

[modifier | modifier le code]

* (en) Cet article est partiellement ou en totalité issu de l’article de Wikipédia en anglais intitulé « Programming paradigm » (voir la liste des auteurs).

1. ↑ Informations lexicographiques et étymologiques de « formaliser » dans le Trésor de la langue française informatisé, sur le site du Centre national de ressources textuelles et lexicales ;
Informations lexicographiques et étymologiques de « formuler » dans le Trésor de la langue française informatisé, sur le site du Centre national de ressources textuelles et lexicales ;
Informations lexicographiques et étymologiques de « formalisation » dans le Trésor de la langue française informatisé, sur le site du Centre national de ressources textuelles et lexicales.

## Voir aussi

[modifier | modifier le code]

### Articles connexes

[modifier | modifier le code]

* Comparaison des langages de programmation multi-paradigmes
* Polymorphisme (informatique)

### Liens externes

[modifier | modifier le code]

*   *   * Notice dans un dictionnaire ou une encyclopédie généraliste :
* Enciclopedia De Agostini

* Notices d'autorité :
* GND

v · m

Paradigmes de programmation

Impérative |  | Structurée |

* Orientée composant
* Orientée objet
* Orientée aspects
* Orientée prototype
* Orientée classe

|

* Procédurale
* Événementielle

Déclarative |

* Fonctionnelle
* Logique
* Par contraintes
* Descriptive

Métaprogrammation |

* Réflexive
* Macros
* Patrons

Autres |

* Concurrente
* Par contrat
* Réactive
* Synchrone

Comparaison des langages de programmation multi-paradigmes

v · m

Domaines de l'informatique

Remarque : cette liste s'inspire du système de classification informatique de l'ACM édité en 2012
Matériel |

* Circuit imprimé
* Périphérique
* Circuit intégré
* Intégration à très grande échelle
* Circuit logique programmable
* Informatique durable
* Conception assistée par ordinateur pour l'électronique

Appareil et organisation
d'un système |

* Architecture matérielle
* Architecture de processeur
* Machine à calculer
* Mécanographie
* Calculateur analogique
* Calculatrice
* Calculateur quantique
* Ordinateur
* Système embarqué
* Système temps réel
* Sûreté de fonctionnement

Réseau |

* Architecture de réseau
* Protocole de communication
* Équipement d'interconnexion de réseau informatique
* Planificateur de réseau (en)
* Rendement du réseau (en)
* Service réseau

Organisation du logiciel |

* Interprète
* Middleware
* Machine virtuelle
* Système d'exploitation
* Qualité logicielle

Théorie et outil (en)
de programmation |

* Paradigme de programmation
* Langage de programmation
* Compilateur
* Langage dédié
* Langage de modélisation
* Cadriciel
* Environnement de développement
* Gestion de configuration logicielle
* Bibliothèque logicielle
* Dépôt

Développement de logiciel |

* Software development process
* Analyse des exigences
* Conception de logiciel
* Assemblage de logiciel (en)
* Déploiement de logiciel (en)
* Maintenance du logiciel
* Équipe de programmation (en)
* Open source

Théorie du calcul (en) |

* Modèle de calcul
* Langage formel
* Théorie des automates
* Théorie de la complexité
* Logique (en)
* Sémantique

Algorithmique |

* Algorithme
* Conception d'algorithme
* Analyse de la complexité des algorithmes
* Algorithme évolutionniste
* Algorithme probabiliste
* Géométrie algorithmique
* Génération procédurale

Mathématiques
de l'informatique |

* Mathématiques discrètes
* Probabilité
* Statistique
* Logiciel mathématique (en)
* Théorie de l'information
* Analyse
* Analyse numérique

Système d'information |

* Base de données
* Mémoire (informatique)
* Progiciel
* Logiciel social
* Système d'information géographique
* Système d'aide à la décision
* Supervision
* Base de données multimédia
* Exploration de données
* Bibliothèque numérique
* Plateforme
* Marketing électronique
* World Wide Web
* Recherche d'information

Sécurité |

* Cryptographie
* Méthode formelle
* Service de sécurité (en)
* Système de détection d'intrusion
* Sécurité matérielle (en)
* Sécurité du réseau
* Sécurité de l'information
* Sécurité de l'application (en)

Interactions humain-machine |

* Design numérique
* Informatique sociale (en)
* Informatique ubiquitaire
* Visualisation (en)
* Accessibilité numérique

Concurrence (en) |

* Programmation concurrente
* Parallélisme
* Calcul distribué
* Multithreading
* Multiprocesseur

Intelligence artificielle |

* Traitement automatique des langues
* Représentation des connaissances
* Vision par ordinateur
* Planification
* Optimisation
* Philosophie de l'intelligence artificielle
* Intelligence artificielle distribuée

Apprentissage automatique |

* Apprentissage supervisé
* Apprentissage non supervisé
* Apprentissage par renforcement
* Apprentissage multi-tâches (en)
* Validation croisée

Infographie |

* Animation par ordinateur
* Animation 2D numérique
* Animation 3D
* Rendu photoréaliste
* Retouche d'image
* Processeur graphique
* Réalité mixte
* Réalité virtuelle
* Compression d'image
* Conception paramétrique

Audio informatique |

* Générateur de son programmable
* Processeur de signal numérique
* Synthétiseur analogique
* échantillonnage
* Séquenceur musical
* Tracker (musique)
* Musique assistée par ordinateur

Informatique appliquée |

* Commerce en ligne
* Logiciel d'entreprise
* Mathématiques computationnelles
* Physique numérique
* Chimie numérique
* Biologie numérique
* Sciences sociales numérique (en)
* Ingénierie numérique
* Informatique médicale
* Art numérique
* Édition électronique
* Cyberguerre
* Vote électronique
* Jeu vidéo
* Traitement de texte
* Recherche opérationnelle
* Technologies éducatives
* Gestion électronique des documents

* Portail de la programmation informatique

*[(en)]: Langue : anglais
*[v]: Voir ce modèle.
*[m]: Modifier ce modèle. Merci de prévisualiser avant de sauvegarder.