Répondre

37

La programmation structurée est un terme ancien qui, je pense, engloberait fonctionnel, procédural, et bien d'autres. Cela signifie essentiellement utiliser des structures de contrôle-flux explicites plutôt que de sauter directement de l'instruction à l'instruction.

La programmation fonctionnelle et procédurale sont, dans ce sens, des paradigmes structurés. La programmation fonctionnelle est aussi une programmation déclarative - la structure donnée à votre code correspond à sa signification - un programme est une fonction qui change l'état du monde. La programmation procédurale est ce que vous considérez comme une programmation "typique" dans n'importe quel langage C ou ses descendants, y compris les langages OO tels que Java et C++. Un programme est une série d'instructions qui doivent être exécutées en série et invoquant des sous-procédures en cours de route.

Ou, comme il a été célèbre décrit:

Programmation fonctionnelle est comme décrivant votre problème à un mathématicien . La programmation impérative est comme donner des instructions à un idiot .

--- arcus, #scheme on Freenode 
+0

La citation est pas vraiment pertinente pour aider à résoudre le problème d'origine de l'OP, puisque la citation est la différence entre paradigmes de programmation fonctionnels et impératifs (oui, même si la programmation procédurale est généralement considérée comme un sous-paradigme de la programmation impérative). De plus, je soutiendrais que Java ne supporte pas réellement la programmation procédurale, puisque tout est en Java une classe ou un objet, à l'exception des nouvelles fonctionnalités de Java 8, telles que les fonctions lambda, qui seraient liées à la programmation fonctionnelle. Donc, je dois downvote cette réponse. – nbro

9

Programmation fonctionnelle est en utilisant des fonctions comme des éléments de première classe. Utilisation de fonctions d'ordre supérieur (prendre et/ou renvoyer des fonctions); conduisant à des constructions puissantes et un code bien factorisé. Certaines personnes se concentrent également sur l'aspect pureté de la PF, c'est-à-dire que les fonctions doivent toujours renvoyer le même résultat, avec la même entrée. Ce sont, je crois, les deux piliers fondamentaux de la PF. Je vois aussi éviter les effets secondaires comme essentiellement abstraction un peu des instructions de niveau de charge/magasin de machine.

La programmation structurée remonte à l'article "Goto Considered Harmful" de Djikstra. Cela signifie utiliser les structures if/then/else/elif, do/while/until/pour les boucles, etc. au lieu de recourir à goto. C'est essentiellement abstraire un peu des instructions au niveau de la machine de comparaison/branche. La programmation structurée est orthogonale à la programmation fonctionnelle et procédurale. La programmation procédurale, je crois, fait référence à la programmation avec des "sous-programmes" impératifs (par opposition aux "fonctions" pures) consistant généralement en une série de "déclarations" (par opposition à "expressions") laissant des effets secondaires.

+0

Je dirais que la programmation procédurale est un sous-paradigme de la programmation impérative, comme indiqué également ici: https: //en.wikipedia.org/wiki/Imperative_programming – nbro

+0

Très vrai, je vais supprimer le "(parfois 'programmation impérative')" de côté. La procédure est en effet un sous-ensemble de l'impératif. Il est tout à fait possible de programmer impérativement des "procédures" dans certaines langues. Cependant, la différence clé entre une "procédure" et une "fonction", je crois, est que la première est impérative. C'est ce que je voulais dire. – AshleyF