Vous voudrez peut-être aller voir ce petit blog vidéo . Le résultat est que la différence entre la programmation structurée et la programmation OO est une question de ce qu'ils retirent de la programmation, pas de ce qu'ils ajoutent. Les disciplines logicielles telles que la programmation structurée et la programmation orientée objet sont contraignantes et non activantes. Voici quelques définitions. Attention: vous n'allez pas les aimer.
La programmation structurée est une discipline imposée à goto (transfert direct de contrôle)
La programmation OO est une discipline imposée aux pointeurs vers les fonctions (transfert indirect de contrôle)
La programmation fonctionnelle est une discipline imposée lors de l'affectation.
Le premier n'est pas trop difficile à comprendre. Dijkstra a constaté qu'il était impossible de créer des preuves générales de correction lorsque goto était autorisé dans les algorithmes. Cependant, si les structures de contrôle étaient limitées à la séquence, la sélection et l'itération, des preuves de correction étaient possibles. Bien sûr, nous n'essayons même pas de prouver que les choses sont correctes de nos jours, mais nous aimons la simplicité et l'élégance d'une programmation structurée.
C'est un peu plus difficile à comprendre OO. Nous définissons souvent OO comme l'encapsulation, l'héritage et le polymorphisme. Ce qui est moins connu, c'est que ces trois attributs sont réalisables, et ont souvent été obtenus en C. En effet, C ++ a commencé comme juste un préprocesseur qui s'est compilé en C. Ce n'est pas vraiment difficile à encapsuler en C. Ni difficile à construire structures de données qui sont des sous-ensembles les uns des autres, simulant l'héritage. Le polymorphisme, cependant, est un peu plus difficile. Elle nécessite des pointeurs vers des fonctions qui, en C, sont difficiles à bien gérer. Ce que les langages comme C ++ nous ont donné, c'est une discipline imposée à ces pointeurs de fonctions. Le compilateur C ++ a construit les vtables pour nous et a initialisé les pointeurs en leur sein selon un formalisme strict. Donc, dans un sens très réel, OO est simplement une discipline imposéetransfert indirect de contrôle, c'est-à-dire pointeurs vers des fonctions.
La programmation structurée consiste à savoir comment ne pas utiliser goto. OO consiste à ne pas utiliser de pointeurs vers des fonctions. Et la programmation fonctionnelle est aussi une question de ne pas faire. En programmation fonctionnelle, nous n'affectons pas de variables, sauf dans les cas les plus rigoureusement contrôlés.
Donc, au final, toutes ces «technologies» de programmation sont en fait des disciplines contraignantes plutôt que des technologies habilitantes. Ils nous disent ce pas faire plus que ce qu'ils nous disent ce à faire. Et cela signifie que le développement de logiciels n'a pas augmenté au cours des 40 dernières années. Il a plutôt diminué. Il est de plus en plus contraint car nous avons appris toutes les choses que nous ne devrions pas faire.
Apprendre ce qu'il ne faut pas faire est bien; mais voici la question troublante: quelles nouvelles choses avons-nous appris à faire?