Quelle est la différence entre les paradigmes de programmation déclarative et procédurale?

Réponses:

108

Impératif

Il existe plusieurs sous-paradigmes du paradigme de programmation impérative, tels que les paradigmes de programmation procédurale ou orientée objet.

Dans le paradigme de la programmation impérative, vous décrivez l'algorithme étape par étape, à divers degrés d'abstraction.

Exemples de langages de programmation prenant en charge le paradigme procédural:

  • C (et la plupart des autres langages hérités)
  • PHP, principalement
  • Dans un certain sens, toutes les langues principales

Orienté objet

Il fait généralement référence aux langages qui présentent une hiérarchie de types qui héritent à la fois des méthodes et de l'état des types de base aux types dérivés, mais inclut également le JavaScript inhabituel basé sur un prototype.

Exemples de langages de programmation prenant en charge le paradigme OO:

  • Java

Déclaratif

Il existe plusieurs sous-paradigmes du paradigme de programmation déclarative, tels que les paradigmes de programmation fonctionnelle ou logique.

Dans le paradigme de programmation déclarative, vous décrivez un résultat ou un objectif, et vous l'obtenez via une " boîte noire ". Le contraire de l' impératif.

Exemples de langages de programmation prenant en charge le paradigme de programmation déclarative:

  • yacc
  • Cime des arbres
  • SQL
  • Expressions régulières
  • lex
  • XSLT
  • balisage, troff, CSS, VHDL

Fonctionnel

La programmation fonctionnelle met l'accent sur l'application de fonctions sans effets secondaires et sans état mutable. Les systèmes déclaratifs ci-dessus présentent certains aspects de la programmation fonctionnelle.

Exemples de langages de programmation prenant en charge le paradigme fonctionnel déclaratif:

  • Haskell
  • OCaml
  • Schème
  • Erlang
  • F#
  • Scala
DigitalRoss
la source
61

La programmation déclarative est l'endroit où vous dites ce que vous voulez sans avoir à dire comment le faire. Avec la programmation procédurale, vous devez spécifier des étapes exactes pour obtenir le résultat.

Par exemple, SQL est plus déclaratif que procédural, car les requêtes ne spécifient pas d'étapes pour produire le résultat.

Ned Batchelder
la source
2
+1 pour un bon exemple sur SQL. pouvons-nous avoir plus d'exemples s'il vous plaît?
mauris
5
Mauris: Peut-être pas un langage de programmation, mais HTML est déclaratif, car vous décrivez ce que vous voulez (un paragraphe avec ce bit en gras), plutôt que d'écrire "dessiner une chaîne, mesurer une chaîne, avancer la position, etc." Un autre exemple est Prolog, où un "programme" est un ensemble déclaratif de faits et de relations / déductions, et une requête. Le moteur Prolog détermine comment évaluer la requête: vous n'avez pas besoin de lui dire comment faire. Enfin, les expressions régulières: vous décrivez le modèle plutôt que d'énoncer les étapes pour tester une correspondance.
itowlson
MXML (qui fait partie du framework Flex) est déclaratif: vous lui indiquez dans quel ordre vous voulez que vos objets / conteneurs soient affichés, et il gère la mise en page selon que vous lui avez dit de se disposer horizontalement ou verticalement. ActionScript 3 est procédural avec prise en charge des paradigmes POO.
Hourra, je t'aide
makefiles est un autre langage déclaratif assez célèbre
Stefano Borini
25

Laissez-moi vous donner un exemple concret: j'ai besoin d'une tasse de thé.

De procédure:

  1. Aller à la cuisine
  2. Obtenez du sucre, du lait et du thé,
  3. Mélangez-les et faites chauffer sur le feu jusqu'à ébullition
  4. Mettez ça dans une tasse et apportez-le moi

Déclaratif:

  1. Apportez-moi une tasse de thé.

Dans un langage procédural, vous définissez l'ensemble du processus et indiquez les étapes à suivre pour le faire. Il vous suffit de fournir des commandes et de définir comment le processus sera servi.

Dans un langage déclaratif, vous définissez simplement la commande ou l'ordre, et laissez le système indiquer comment terminer cet ordre. Vous avez juste besoin de votre résultat sans creuser dans la façon dont cela doit être fait.

Muhammad Zeeshan Tahir
la source
2
Cet exemple extrêmement simplifié a en fait fait ressortir le point pour moi (un peu). Mais une chose me dérange toujours, en essayant de comprendre la différence - et s'il n'y a pas de commande "Apporte-moi une tasse de thé"? Devriez-vous alors le créer vous-même? Si tel est le cas, ne créeriez-vous pas une fonction similaire à l'exemple procédural? Je suppose que ce qui me rend confus, c'est qu'il semble que la procédure et le déclaratif ne sont pas des propriétés fixes d'un langage spécifique , mais plutôt comment vous utilisez ce langage? Vous pourriez dire "Donnez-moi une tasse de thé" en Java, si c'est une méthode disponible ...
Magnus W
3
Je me demande si "1. Tea, Earl Grey, Hot" serait un meilleur exemple. Il déclare ce qui doit être livré, pas les actions à effectuer (`` Get me ... '')
JeffUK
Magnus, votre question est tout à fait juste. À mon avis, les langages déclaratifs sont des langages de plus haut niveau et dérivent de la procédure. Rappelez-vous le moment où les développeurs doivent utiliser des lignes de commande pour ajouter deux nombres? Vous pouvez maintenant obtenir la somme de deux nombres ou plus avec une simple fonction. Donc, à mon avis, s'il n'y a pas de commande "Apporte-moi une tasse de thé", vous devez la créer. Lorsque la prochaine personne essaiera d'utiliser, elle sera là. C'est selon ma mauvaise connaissance. Merci
Muhammad Zeeshan Tahir
5

Programmation procédurale:

En programmation procédurale, lorsque le programme démarre, il suit un ensemble d'instructions. Les instructions peuvent changer en fonction du contenu de certains fichiers ou de la mémoire, mais dans l'ensemble, elles ne varient pas beaucoup. l'entrée dans le programme ne provient généralement pas d'une entrée utilisateur en temps réel, mais plutôt d'un ensemble de données pré-rassemblées.

Programmation déclarative:

Dans la programmation déclenchée par les événements déclaratifs, se centralise autour d'un corps de données avec des actions optionnelles que le programme peut entreprendre. Par exemple, chaque «événement» dans un traitement de texte est une modification de souris ou de clavier (ou de fichier) qui affecte les données, le ou les documents. Ils ne doivent être exécutés dans aucun ordre. La programmation événementielle prend la forme de petits programmes (gestionnaires d'événements) qui fonctionnent tous sur un ensemble commun de données, de sorte que chaque petit programme puisse utiliser les mêmes données, le document dans cet exemple.

SattiS
la source
1

La principale différence entre deux langages de programmation est la suivante: en programmation procédurale, nous disons à l'ordinateur comment résoudre le problème et en programmation déclarative, nous disons à l'ordinateur quel problème nous voulons résoudre.

Manodhya Opallage
la source
0

Pour répondre au commentaire ansible et peut-être donner un exemple entre les différences des deux. Ansible est procédural alors que quelque chose comme marionnette ou terraform est déclaratif. Par exemple, vous créez un fichier yaml ansible pour déployer 10 instances ec2 comme ceci:
-ec2: count: 10 image: ami-058c6e5b73b074cd2 instance_type: t2.micro

Si vous exécutiez ce fichier deux fois, vous vous retrouveriez avec 20 instances t2.micro ec2. Si vous écriviez l'équivalent dans un langage déclaratif comme terraform et que vous l'exécutiez deux fois, vous n'auriez que 10 instances de t2.micro en cours d'exécution, quel que soit le nombre de fois que vous l'avez exécuté. Les langages déclaratifs spécifient l'état final. Les langages procéduraux font juste ce que vous leur dites sans tenir compte de l'état actuel ou passé.

utilisateur13709426
la source
-1

Donc YAML est un langage de programmation déclaratif? Parce que nous définissons ce que nous voulons au lieu d'écrire de la logique réelle.

Je demande cela parce que si quelqu'un connaît Ansible qui est un outil de gestion de configuration, il utilise YAML mais il appartient toujours à la catégorie du langage procédural.

Monsieur Kashyap
la source
Cela ressemble plus à un commentaire très affirmé sans réponse
zardilior
-2

Dans l'approche procédurale, vous encodez votre instruction pour obtenir le résultat. Dans l'approche déclarative, vous définissez ce qui doit être résolu comme la connaissance de la résolution du problème. Jetez un œil à l' exemple d' approche procédurale ou déclarative que j'ai mis en œuvre dans les deux approches.

Comme vous le verriez dans l'exemple, dans l'approche déclarative, vous n'avez pas besoin d'instruire COMMENT résoudre le problème.

Arash Aghlara
la source
Vous faites référence à des exemples hors site comme s'ils avaient été écrits ici. Apportez vos exemples dans le cadre de votre réponse.
ChronoFish du