En faisant des recherches (livres, Wikipédia, questions similaires sur la SE, etc.), j'ai compris que la programmation impérative est l’un des paradigmes majeurs de la programmation, où vous décrivez une série de commandes beaucoup pour qu’il prenne des mesures spécifiques, d’où le nom "impératif"). Jusqu'ici tout va bien.
La programmation procédurale, en revanche, est un type spécifique (ou sous-ensemble) de la programmation impérative, dans laquelle 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?
Mise à jour : Cette première question semble avoir une réponse. Un langage PEUT être impératif sans être procédural ou structuré. 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 est apparue pour éliminer le recours à l’instruction GOTO.
Deuxième question : quelle est la différence entre programmation procédurale et programmation structurée? Pouvez-vous en avoir un sans l'autre et vice-versa? Pouvons-nous dire que la programmation procédurale est un sous-ensemble de programmation structurée, comme dans l'image?
la source
Première question: oui, beaucoup de langages purement orientés objet sont admissibles. Bien qu'ils aient des méthodes très proches des fonctions, ils les voient en termes de messages et ne leur donnent pas assez de poids pour appeler le langage procédural.
Deuxième question: la différence est souvent différente. Vous pouvez avoir une fonction avec des instructions goto partout, qui seront dans un style procédural, mais pas de programmation structurée. D'autre part, la plupart des langages orientés objet prennent en charge 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 plus efficacement compris en consultant leurs graphiques d'appel. 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 ou l'autre sans l'autre.
la source
unsafePerformIO
permet semant Havok). D'autres disent en plaisantant que Haskell est leur langage de programmation impératif préféré. Mais le fait est qu’une très grande partie du code Haskell vit distinctementIO
, n’utilise pas de failles non standard pour créer des effets secondaires, et est purement fonctionnelle.la plupart des langages populaires de ces 50 dernières années ont été conçus autour de l'architecture informatique répandue, appelée architecture Von Neumann , d'après l'un de ses concepteurs , 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. La CPU qui exécute les instructions est séparée de la mémoire. Par conséquent, les instructions et les données doivent être transmises de la mémoire à la 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 1940 sont basés sur l’architecture de von Neumaan.
la source
Je crains qu'aucune des réponses données jusqu'à présent ne rende très bien le noyau des concepts.
Impératif, procédural et structuré ne sont pas des propriétés mutuellement exclusives, elles se concentrent sur un seul aspect de la logique de modélisation.
Imperative est la contrepartie de l'impératif déclaratif. En d'autres termes, vous indiquez à l'ordinateur quoi faire en lui faisant exécuter une série d'instructions que vous fournissez. Un programme déclaratif, d'autre part, indique ce qu'il faut accomplir . En d'autres termes, définissez les étapes par rapport à un résultat.
La programmation procédurale fait référence à la capacité du processeur (matériel ou interprète) d’envelopper des instructions dans des composés, d’accéder à un tel composé et de revenir au point suivant le saut une fois que le composé a été exécuté. Cela peut sembler banal et aux normes actuelles, 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 envoyer une adresse sur laquelle il est possible de sauter et de passer plus tard, et pointeur de pile. Les microprocesseurs ont bientôt proposé cette fonctionnalité, mais vous pouvez imaginer un processeur primitif capable uniquement d'exécuter les instructions qui lui sont fournies séquentiellement, comme un processeur de bande perforée ou de carte perforée.
La programmation structurée est la prochaine étape de la possibilité 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 telles que if-then, for, while, repeat-Until et switch. Leur application s'appelle la programmation structurée.
Dans n'importe quel environnement de programmation moderne, vous aurez tout ce qui précède à votre disposition et vous le prendrez pour acquis afin que nous ne parlions plus d'eux comme tel. Les propriétés différenciantes entre les langues ont longtemps évolué vers des paradigmes de niveau supérieur, tels que la programmation orientée objet et fonctionnelle.
La programmation déclarative n’est pas encore banale cependant, principalement parce qu’elle sera toujours spécifique à un domaine, du moins dans une certaine mesure. Vous ne pouvez pas avoir un langage déclaratif à usage général. C'est pourquoi nous sommes toujours bloqués avec ce qu'on appelle les langages de 3ème génération, où la programmation déclarative ou la "modélisation" serait considérée comme une 4ème génération.
la source