web-dev-qa-db-fra.com

Quelle est la différence entre la programmation impérative, procédurale et structurée?

En faisant des recherches sur (livres, Wikipedia, questions similaires sur SE, etc.), j'ai compris que la programmation impérative est l'un des principaux paradigmes de programmation, où vous décrivez une série de commandes (ou déclarations) à exécuter par l'ordinateur (donc vous beaucoup lui ordonner de prendre des mesures spécifiques, d’où le nom "impératif"). Jusqu'ici tout va bien.

La programmation procédurale, en revanche, est un type (ou sous-ensemble) spécifique de programmation impérative, dans lequel vous utilisez des procédures (c'est-à-dire des fonctions) pour décrire les commandes que l'ordinateur doit exécuter.

Première question: Existe-t-il un langage de programmation impératif qui n'est pas procédural? En d'autres termes, pouvez-vous avoir une programmation impérative sans procédures?

pdate: Cette première question semble avoir reçu une réponse. Une langue PEUT être impérative sans être procédurale ou structurée. Un exemple est le langage d'assemblage pur.

Ensuite, vous avez également la programmation structurée, qui semble être un autre type (ou sous-ensemble) de programmation impérative, qui a émergé pour supprimer la dépendance à l'instruction GOTO.

Deuxième question: Quelle est la différence entre une programmation procédurale et une programmation structurée? Pouvez-vous en avoir un sans l'autre, et vice-versa? Peut-on dire que la programmation procédurale est un sous-ensemble de programmation structurée, comme dans l'image?

enter image description here

90
Daniel Scocco

De nombreux termes peuvent être réutilisés (souvent mal utilisés) à propos des langages de programmation, en particulier ceux autres que ceux orientés objet.

Voici quelques petites descriptions des termes.

  1. Programmation impérative - Au bon vieux temps, lorsque la programmation était largement assemblée, le code aurait des tonnes de GOTO. Même les langages de niveau supérieur comme FORTRAN et BASIC ont commencé à utiliser les mêmes primitives. Dans ce paradigme de programmation, le programme entier est un algorithme unique ou une fonctionnalité complète écrite linéairement - étape par étape. C'est impératif style. Comprenez que l'on peut vraiment écrire un travail impératif totalement mauvais, même dans le langage C moderne, mais il est assez facile d'organiser le code dans des langages de niveau supérieur.

  2. Programmation structurée et modulaire - Le plus souvent, nous devrions être capables d'utiliser le terme de manière interchangeable mais avec des différences subtiles. Lorsque les langages de niveau supérieur ont commencé à s'enrichir, on s'est rendu compte que toutes les unités de travail devaient être divisées en parties plus petites exploitables - c'est-à-dire lorsque les fonctions ont vu le jour et que la programmation est devenue une hiérarchie de fonctions et que beaucoup de niveaux inférieurs pourraient être réutilisés.

    • Programmation structurée est toute programmation lorsque la fonctionnalité est divisée en unités comme for loop, while loop, if... then etc structure du bloc.
    • Ici aussi, un morceau de code (fonction) peut être réutilisé.
    • Dans programmation modulaire , on peut créer une forme physique de package - c'est-à-dire un morceau de code qui peut être expédié; qui sont assez polyvalents et réutilisables. Cela s'appelle modules d'éléments compilés ensemble.
    • On voit donc à peine des programmes modulaires qui ne sont pas structurés et vice versa; la définition technique est subtilement différente mais le code principalement structuré peut être rendu modulaire et autre.
  3. Puis vint la "programmation orientée objet" qui est bien définie dans la littérature. Comprenez que la programmation orientée objet est une forme de programmation structurée par définition. Le nouveau nom de tout le code basé sur une fonction qui est du code structuré mais [~ # ~] pas [~ # ~] orienté objet est souvent appelé programmation procédurale.

    • Ainsi, le code fondamentalement structuré où les fonctions (ou procédures) dominent les données est appelé procédural tandis que la représentation basée sur les classes et les objets est appelée orientée objet. Par définition, les deux sont également modulaires.

Beaucoup de gens pensent - toute la programmation structurée (peut-être en ignorant les objets) comme une programmation impérative; Je suppose que cela est uniquement dû au manque de définition claire de la programmation impérative - mais c'est faux. Vous faites de la programmation structurée quand vous ne faites pas beaucoup d'impératifs! Mais je peux encore écrire beaucoup de fonctions ainsi que beaucoup d'instructions goto dans le programme C ou FORTRAN à mélanger.

Pour être spécifique à vos questions:

Première question : le langage d'assemblage pur est un langage impératif qui n'est PAS structuré ni procédural. (Avoir un flux de contrôle interprétatif étape par étape ne signifie pas procédural - mais la division des fonctionnalités en fonctions est ce qui rend un langage procédural).

  • correction * La plupart des formes d'assemblage modernes prennent en charge l'utilisation des fonctions. En fait, tout ce qui est possible dans le code de haut niveau DOIT exister de bas niveau pour fonctionner. Bien qu'il soit bien préférable de créer du code procédural, il est possible d'écrire du code procédural et impératif. Contrairement à ce dernier, il est plus facile à gérer et à comprendre (en évitant l'horrible code de spaghetti). Je pense qu'il existe des scripts Shell/bash qui correspondent mieux à la distinction d'être purement impératif, mais même dans ce cas, la plupart ont des fonctions, les développeurs comprennent certainement combien ils ont de valeur.

Deuxième question : La programmation procédurale est une forme [~ # ~] [~ # ~] de programmation structurée.


Bonus [~ # ~] [~ # ~]

  • Selon certaines taxonomies, la classification principale est déclarative (ou langage fonctionnel) vs impérative. Les langages déclaratifs permettent le calcul sans décrire son flux de contrôle alors que l'impératif est l'endroit où le flux de contrôle explicite (étape par étape) est défini. Sur la base de cette classification, la programmation impérative, pour certains, peut être un super-ensemble de programmation structurée, modulaire et OO. Voir ceci: Programmation fonctionnelle vs OOP

  • Après orienté objet, d'autres paradigmes de programmation ont été inventés: voir ici pour plus de détails: Quelles sont les différences entre une programmation orientée aspect, orientée sujet et orientée rôle?

54
Dipan Mehta

Première question: Oui, de nombreux langages orientés objet purs sont éligibles. Bien qu'ils aient des méthodes, qui sont très proches des fonctions, ils voient ces méthodes en termes de messages et ne leur donnent pas assez de poids pour appeler le langage procédural.

Deuxième question: la différence a souvent une portée différente. Vous pouvez avoir une fonction avec des instructions goto partout, qui seront de style procédural, mais pas de programmation structurée. D'un autre côté, la plupart des langages OO supportent et encouragent la programmation structurée, mais pas la programmation procédurale.

La programmation procédurale décrit l'ordre global du programme. Les programmes procéduraux sont ceux qui sont le mieux compris en regardant leurs graphiques d'appels. La programmation structurelle est une propriété locale, elle s'applique à l'utilisation de if et while par opposition à goto.

En tant que telles, ces deux propriétés sont disjointes, vous pouvez avoir l'une sans l'autre.

5
thiton

Je crains qu'aucune des réponses données jusqu'à présent ne capture très bien le cœur des concepts.

Impératif, procédural et structuré ne sont pas des propriétés mutuellement exclusives, ils se concentrent uniquement sur un seul aspect de la logique de modélisation.

L'impératif est la contrepartie du déclaratif. L'impératif signifie essentiellement que vous dites à l'ordinateur que faire en lui faisant exécuter une série d'instructions que vous fournissez. En revanche, un programme déclaratif indique que réaliser. En d'autres termes, définissez les étapes par rapport à définir un résultat.

La programmation procédurale fait référence à la capacité du processeur (matériel ou interprète) à encapsuler des instructions dans des composés, à sauter vers un tel composé et à revenir au point après le saut une fois le composé exécuté. Cela peut sembler trivial et selon les normes d'aujourd'hui, mais vous avez besoin d'une assistance de base dans la machine avant de pouvoir le faire: la capacité de sauter, une sorte de pile pour pousser une adresse sur laquelle peut être sautée et sautée plus tard et un pointeur de pile. Les microprocesseurs ont bientôt offert cette fonctionnalité, mais vous pouvez imaginer un processeur primitif qui n'est capable d'exécuter des instructions qui lui sont transmises séquentiellement, comme un processeur de bande perforée ou de carte perforée.

La programmation structurée est la prochaine étape de la capacité de passer à une autre instruction. En fin de compte, tout se résume à des sauts, mais si vous pouvez avoir des sauts conditionnels, vous pouvez créer des instructions de flux de contrôle de base comme if-then, for, while, repeat-until et switch. Leur application est appelée programmation structurée.

Dans n'importe quel environnement de programmation moderne, vous aurez tout ce qui précède à votre disposition et les prendre pour acquis afin que nous ne parlons plus d'eux comme tels. Les propriétés de différenciation entre les langages se sont longtemps déplacées vers des paradigmes de niveau supérieur comme la programmation orientée objet et fonctionnelle.

La programmation déclarative n'est pas encore courante, principalement parce qu'elle sera toujours spécifique au domaine, au moins dans une certaine mesure. Vous ne pouvez pas avoir un langage déclaratif à usage général. C'est pourquoi nous sommes toujours coincés avec les langages dits de 3ème génération, où la programmation déclarative ou "modélisation" serait considérée comme la 4ème génération.

3
Martin Maat

la plupart des langages populaires des 50 dernières années ont été conçus autour de l'architecture informatique courante, appelée architecture Von Neumann , d'après l'un de ses auteurs, John von Neumann.

Ces langues sont appelées langues impératives.

Dans un ordinateur von Neumaan, les données et les programmes sont stockés dans la même mémoire. Le CPU qui exécute les instructions est séparé de la mémoire. Par conséquent, les instructions et les données doivent être transmises de la mémoire au CPU. Les résultats des opérations dans la CPU doivent être remis en mémoire. Presque tous les ordinateurs numériques construits depuis les années 40 sont basés sur l'architecture von Neumaan.

3
anandmon