web-dev-qa-db-fra.com

Quels étaient les modèles de conception de l'ère de la programmation procédurale?

Similaire: Comment la programmation a-t-elle été effectuée il y a 20 ans?

OOP est assez à la mode de nos jours, avoir ses racines à Simula 67 dans les années 1960, et plus tard, rendue populaire par SmallTalk et C++ . Nous avons sèche, solide, beaucoup de livres sur les modèles de conception dans le monde orienté objet.

Mais quels étaient les principes principaux de la programmation avant le OOP paradigme paradigme largement adoption? Et quels étaient les principaux modèles de conception?

24
Vorac

J'étais un développeur de Cobol avant d'avoir appris Java. J'ai développé depuis plus de 35 ans.

De retour dans les journées de procédure, la majeure partie du traitement a été effectuée en lot. Restez assez loin dans l'histoire et même la compilation de programme a été effectuée avec un jeu de cartes de poinçon en lot.

Contrairement à Kilian Foth's Assertion , nous avons eu des modèles de conception dans les années 1970 et 1980. Il y avait une certaine manière pour coder un match multi-fichier/fusionné dans COBOL. Il y avait une certaine façon de coder ajouter des transactions au fichier maître (bande) dans COBOL. Il y avait une certaine manière pour coder la génération de rapports à Cobol. C'est pourquoi l'auteur du rapport d'IBM n'a jamais vraiment gagné de la traction dans de nombreux magasins Cobol.

Il y a eu une application anticipée du DRY. Créez beaucoup de paragraphes afin de ne pas vous répéter vous-même. Des techniques de codage structurées ont été développées dans les mots structurés de 1970 et COBOL (verbes) à la langue en 1985.

En règle générale, lorsque nous avons écrit un nouveau programme COBOL, nous avons copié un ancien programme COBOL et avons modifié les noms pour protéger les innocents. Nous n'avons presque jamais codé un programme COBOL à partir d'une feuille de papier vierge ou d'un écran vide. C'est un grand modèle de conception lorsque vous pouvez copier et coller des programmes entiers.

Il y avait tellement de modèles de conception de Cobol qu'il a fallu des années pour un programmeur COBOL pour tous les apprendre. C'est une raison pour laquelle les programmeurs Cobol sont aujourd'hui, pour la plupart, en utilisant la syntaxe de 1985.

31
Gilbert Le Blanc

"Les modèles de conception" dans les logiciels n'existaient pas à l'ère dont vous parlez, car le concept n'avait pas été inventé. Ce n'est pas moi d'être affiché - c'est en fait est la raison; être appelé un nom reconnaissable est ce qui fait un modèle de conception un "modèle de conception" plutôt que simplement que le code que vous continuez à utiliser sous une forme ou une autre (par exemple une "usine" plutôt que "le type de classe statique que j'aime utiliser plutôt que" le type de classe statique que j'aime utiliser plutôt que Un assortiment de constructeurs ") et le concept lui-même ne fait pas exception.

Cela dit, bien sûr, il y avait des choses qui remplissaient exactement le même rôle dans le travail des praticiens que les modèles de conception font maintenant. Mais vous serez déçu d'avoir entendu parler d'eux: "Trick of the Gurus" typique À cette époque, c'était des choses qui nous ennuyaient maintenant - par ex. Listes localisées, des boucles contrôlées par un indice incrémenté sur chaque itération, des méthodes "accessores" intelligentes qui ne semblent rien faire d'autre que vous donnez une marge de manœuvre dans la modification de votre esprit sur les détails de la mise en œuvre plus tard.

C'est vrai, des choses que nous prenons maintenant pour acquis - qui sont parfois même une partie des langues que nous utilisons - utilisées pour être avancées (et parfois gardées jalousement) connues uniquement par des codeurs plus expérimentés. Il y a probablement des chances, presque tout ce qui n'est pas trivial que vous appreniez dans un cours de programmation de base aujourd'hui a traversé une phase où elle était l'équivalent morale à un "modèle de conception" aux pratiquants de l'âge. La construction de logiciels n'est peut-être pas encore une discipline d'ingénierie rigoureuse, mais si vous étudiez l'état de l'art des années 50 et 60, vous ne pouvez pas nier qu'il est venu un énorme Bien que ses débuts.

25
Kilian Foth

Le grand paradigme précédent était programmation structurée . Au lieu d'UML, il y avait une variété de diagrammes différents (organigrammes, diagrammes de flux de données, graphiques de structure, etc.). Le développement était la plupart du temps de haut en bas, et a suivi un processus de décomposition fonctionnelle. L'une des idées de base était que votre structure de programme ressemblerait à un diamant: le module principal situé en haut, étanchéant dans des modules de contrôle de haut niveau, qui invoquent des routines dans des modules de niveau inférieur. Ces modules de niveau inférieur construits sur des modules de niveau inférieurs, tous (théoriquement) éventuellement convergés sur une poignée de routines d'E/S de base. Les modules de haut niveau étaient censés contenir la logique du programme, les niveaux inférieurs ont été plus préoccupés par l'intégrité des données et la gestion des erreurs.

Des concepts importants introduits au cours de cette période ont été de cacher des informations, une modularité et une cohésion élevée/basse couplage. Voir les œuvres de Dave Pernas pour des articles seminaux sur ces sujets. Consultez également le travail de Larry Constantine, Tom DeMarco et Ed Yourdon.

18
TMN

Je suppose qu'un grand (en plus de la programmation structurée elle-même) était le concept de transmission d'une poignée autour - In OO Vous avez un objet et contient l'état et la fonctionnalité. Retour devant OO, vous auriez Une charge de fonctions indépendantes, et vous passeriez une poignée à un état entre eux - un cookie si vous le souhaitez. Cela vous a donné OO Principes sans avoir réellement oo.

Vous pouvez voir cela beaucoup dans un ancien code Win32, vous passeriez dans une poignée qui serait un type opaque représentant un état alloué dans le noyau Windows. Vous pourriez vous-même en passant un pointeur à une structure que vous avez précédemment allouée en tant que premier paramètre aux fonctions qui fonctionnent sur ces données.

10
gbjbaanb

Une "machine d'état fini" peut compter en tant que motif, et les FSM ont été écrits (par exemple pour les protocoles de communication) en utilisant des langues de pré-OO.

Aussi "manipulateurs interrompre" et TSRS étaient populaires par exemple. sur DOS.

3
ChrisW

Les termes tels que "le code spaghetti" et "point unique de sortie" sont en réalité des retours à cette époque. De nos jours, nous appelons le code que nous n'aimons pas le "code spaghetti", mais c'est vraiment une référence au code attaché ensemble (mal) avec des gotos et des JMP.

(Aujourd'hui, nous souffrons "Code Ravioli", dans lequel le code ressemble à un groupe de classes sans rapport avec étroitement emballées, un peu comme une assiette de raviolis. Cependant, certains OO experts posent à juste titre, "mais N'est-ce pas ce que =OO est censé ressembler? ")

"Un point de sortie unique" est aujourd'hui une baisse de route frustrante de refactoring. Beaucoup de Devs que je ne parle pas ne m'en ont même pas entendu et sont forgés quand je l'explique. Mais dans les vieux jours, cela signifiait ne sauter pas d'un bloc de code soudainement et du code spaghetti. Sautez en avant jusqu'à la fin de la logique, puis quittez gracieusement.

Étirant ma mémoire, retour, je semble que l'idée de regrouper le code dans les procédures était un gros bond en avant. L'idée que vous pourriez emballer des procédures dans des modules interopérables et réutilisables était une sorte du Saint Graal de la programmation.

EDIT: "Code auto-modificateur" était également un motif utilisé notamment sur le destin d'origine. C'est là que le programme écraserait réellement ses instructions avec des instructions plus rapides basées sur son état. Quand j'étais un cours de programmation au musée de la science, mon instructeur nous a avertis sévèrement, "n'écrivez pas à l'auto-modification du code!"

Modifier Edit: Cependant, avant Internet, le mot parcourut beaucoup plus lentement. L'idée de mettre en œuvre des algorithmes et des structures de données utilisées pour être une affaire beaucoup plus grande. Aujourd'hui, je trie tout le temps sans même savoir quel genre j'utilise. Mais à l'époque, vous deviez le coder vous-même. Je me souviens d'un article qui parle de défis de programmation qui prenait des jours qui prenaient des jours où nous frappons aujourd'hui dans une demi-heure ou moins. Donc, très concous "algorithmique" et "structure de données" et "structure de données" serait probablement sur la liste, bien plus qu'aujourd'hui.

3
Rob