Je programme en Java dans un style très orienté objet (OO). La programmation orientée objet me vient très intuitivement, mais j'ai très peu de connaissances sur les autres types de programmation.
Qu'est-ce que la programmation procédurale ? En quoi est-ce différent de la programmation orientée objet? Est-ce la même chose que la programmation fonctionnelle ?
J'avais l'habitude de penser que toute programmation qui n'est pas OO est procédurale. Mais je commence à penser que ce n'est pas vrai.
object-oriented
procedural
Aviv Cohn
la source
la source
Réponses:
Wikipedia a de bonnes explications pour ces termes. Quoi qu'il en soit, voici le résumé:
La programmation déclarative est le contraire de la programmation impérative - elle spécifie ce qu'il faut calculer plutôt que comment (par exemple, SQL, regex).
Les modèles de programmation fonctionnelle sont calculés comme des expressions pouvant (éventuellement) générer des valeurs. Les fonctions sont des valeurs et peuvent être transmises ou renvoyées par d'autres fonctions. La mutation est découragée; toutes les variables sont immuables par défaut. En conséquence, il est plus déclaratif qu'impératif, car il met l'accent sur ce qui est calculé plutôt que sur la séquence des changements d'état nécessaires pour y parvenir.
Leurs relations sont un peu compliquées parce que la POO est un terme assez chargé. Vous pouvez utiliser des objets à la fois dans les langages fonctionnels et dans les langages procéduraux, mais les langages qui se présentent comme étant OO sont procéduraux. Pour confondre davantage la question:
Cela amène les gens à penser que la programmation orientée objet est le seul moyen d'abstraction, et que la programmation fonctionnelle et la programmation orientée objet sont en quelque sorte opposées ou mutuellement exclusives. Beaucoup de gens pensent également que tous les langages fonctionnels sont purs et interdisent les mutations.
De plus, les gens jonglent généralement entre impératif et procédure de manière interchangeable, contrastant parfois avec la POO (impliquant un code sans abstraction, généralement C) et parfois avec la programmation fonctionnelle. Le terme de programmation structurée est pour la plupart devenu hors d'usage (probablement parce que, à ce stade, la plupart des gens considèrent comme allant de soi que goto et les globals sont considérés comme nuisibles.)
la source
La programmation procédurale est une approche de la programmation qui constitue l’un des éléments de base des nombreux composants de langage (la fonctionnalité n’en est pas une).
La plupart des langues appartiennent à l'ensemble de la "programmation procédurale" et il s'agit probablement de l'approche de conception la plus naturelle pour la plupart des gens (si vous pensez en termes de OO, alors je dirais que vous êtes en minorité).
BASIC est procédural.
Comme d'autres l'ont dit, il s'agit d'un mécanisme permettant de structurer les programmes de manière séquentielle.
Cela nécessite un mécanisme de définition de "procédures" - des blocs de code nommé similaires aux méthodes OO, pouvant accepter zéro à plusieurs paramètres et éventuellement renvoyer une valeur (qui serait alors généralement appelée une fonction - ce qui peut entraîner votre confusion avec les langages fonctionnels )
Le paradigme ne dicte pas ce que vous ferez, ni la manière dont les choses circulent.
Il décrit simplement que le programme sera structuré comme une série de procédures (ou fonctions) fonctionnant de manière séquentielle. Les données sont ensuite définies indépendamment des procédures.
Cela diffère de la programmation orientée objet, qui structure le programme autour de collections de données et de méthodes (non de fonctions) qui agissent sur ces données.
Une façon de penser à cela est en termes de portée des données.
Dans un langage procédural, la portée est assez simple. Une variable peut être dans l'étendue d'une procédure donnée (déclarée localement), jusqu'au niveau des commandes appelant en haut (déclarée globalement), avec des étendues imbriquées entre.
Dans un langage orienté objet, vous ajoutez un nouveau contexte de portée, celui de l'objet actuellement utilisé, qui est orthogonal à ce qui précède.
Une autre façon de penser procédurale, par rapport à orientée objet, consiste à considérer un langage orienté objet où toutes les méthodes doivent être déclarées comme statiques. Le résultat est un langage procédural dans lequel les classes peuvent être utilisées pour regrouper des procédures.
la source
Programmation procédurale n'est certainement pas une programmation fonctionnelle.
La programmation procédurale se produit lorsque vous avez dans votre tête un modèle de l'ordinateur en tant que machine et que vous réfléchissez à la façon dont il modifie les données en mémoire. Donc, d'abord, vous réglez
A
la valeur 3, puis vous ajoutez 1 et stockez-le dans l'emplacement de la mémoireA
nouveau (en remplaçant la valeur précédente).La programmation fonctionnelle serait de dire
A
3 etB
estA + 1
, et de laisser ensuite l’ordinateur déterminer comment calculerB
. Une fois que vous avez défini,A
il devrait être immuable (non changeant). Functional vous permet également de faire des choses comme passer une fonction en tant que valeur de première classe (une fonction peut prendre une fonction en tant qu'argument).La programmation orientée objet combine souvent les deux et est en quelque sorte orthogonale aux deux. Vous pouvez utiliser la programmation fonctionnelle et renvoyer un objet immuable, et cet objet peut avoir une méthode qui renvoie une valeur calculée, et même le faire paresseusement - c'est de la programmation orientée objet fonctionnelle. Vous pouvez également avoir un objet qui représente un "référentiel" (version abstraite d'une base de données), vous pouvez "enregistrer" des éléments dans le référentiel et "les récupérer", et laisser cet objet gérer tous les détails de la procédure. . C'est essentiellement la programmation procédurale orientée objet.
la source
La POO n'est rien d'autre qu'une forme légèrement raffinée de programmation procédurale, qui appartient encore à la grande famille de la programmation impérative. La preuve en est que beaucoup de programmeurs C # / Java ont tendance à "faire quelque chose" et préfèrent des méthodes telles que:
Donc, un programme qui consiste en un tas de méthodes void (anciennement appelées procédures (sic!)) Et un code comme:
est une programmation procédurale parfaite.
la source