Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Est-ce une grosse erreur de considérer la POO comme standard de l'industrie pour l'organisation des bases de code ?

Le , par Patrick Ruiz

172PARTAGES

43  2 
Des manières d’approcher la programmation informatique, il y en a une panoplie. Dans le jargon du milieu, on parle de paradigme de programmation. En incluant celui dit impératif, on en compte à minima trois grandes familles et leurs dérivés. Certaines de ces approches sont connues pour ceci qu’elles corrigent les tares introduites par d’autres. C’est par exemple le cas de la programmation orientée objet dont on a appris qu’elle permet d’améliorer l’organisation des bases de code procédurales.

Dans une publication parue il y a peu, Ilya Suzdalnitski – ingénieur en informatique chez Replicon – fait savoir qu’il n’en est rien en ce qui concerne le duo programmation procédurale – programmation orientée objet. De façon brossée, considérer la programmation orientée objet comme standard de l’industrie pour l’organisation des bases de code est, pour lui, une grosse erreur. Ilya Suzdalnitski va même plus loin : la programmation orientée objet est un « désastre à un billion de dollars », ce, pour plusieurs raisons.

Le développement de l’ingénieur de Replicon laisse filtrer que l’usage de la programmation orientée objet dévie l’attention des développeurs de ce qui doit la retenir : la résolution des problèmes. D’après ce dernier, cet état de choses résulte de la nécessité que l’approche orientée objet impose de se focaliser sur la notion d’abstraction et les nombreux modèles de conception. En sus, il y aurait que l’approche orientée objet introduit plus de complexité que l’inverse surtout pour des bases de code importantes – de gros projets. Ce dernier aspect prend, d’après lui, toute sa force avec la gestion des propriétés des objets.

« L’état en lui-même est assez inoffensif. La grosse difficulté naît avec ceux dits mutables surtout s’ils sont partagés. Le cerveau humain est la machine la plus puissante de l'univers. Cependant, nos cerveaux sont vraiment piètres au jeu de la gestion des états. Il est beaucoup plus facile de raisonner au sujet d'un morceau de code si vous pensez seulement à ce que celui-ci fait et non aux variables qu'il modifie au sein de la base de code. Programmer avec des objets mutables s'apparente à de la jonglerie mentale. Je ne sais pas ce qu'il en est de vous autres, mais moi je pourrais jongler avec deux balles. Donnez-moi trois balles ou plus et je les lâcherai toutes. Pourquoi donc essayons-nous d'accomplir cet acte tous les jours au travail ? Malheureusement, la gestion des objets mutables est au cœur même de la programmation orientée objet . Le seul but de l'existence de méthodes sur un objet est de pouvoir modifier ses propriétés », souligne-t-il.


À la suite de la gestion des objets mutables qui, selon Ilya Suzdalnitski, pose problème avec l’approche orientée objet, il dresse une liste d’autres tares qui apparaissent comme des conséquences de la première : il est difficile d’écrire du code orienté objet aisé à maintenir, les tests unitaires sont difficiles à appliquer à une base de code montée suivant l’approche orientée objet, le refactoring de code est une vraie galère sans des outils comme Resharper.

Au travers de sa publication, l’ingénieur de Replicon bat en brèche un certain nombre d’idées transmises à ceux et celles qui ont fait des études en programmation informatique. Il se veut clair : le monde réel n’est pas hiérarchisé ; la notion d’héritage telle qu’enseignée en POO n’est pas calquée sur le monde réel.

« La programmation orientée objet tente de tout modéliser comme une hiérarchie d'objets. Malheureusement, ce n'est pas ainsi que les choses fonctionnent dans le monde réel. Les objets du monde réel interagissent les uns avec les autres à l'aide de messages, mais ils sont généralement indépendants les uns des autres.

La notion d'héritage n'est pas calquée sur le monde réel. Au sein de ce dernier, l'objet parent est incapable de modifier le comportement des objets enfants lors de l'exécution. Même si vous héritez de votre ADN de vos parents, ils sont incapables d'apporter des changements à votre ADN comme bon leur semble. Vous n'héritez pas des "comportements" de vos parents, vous développez vos propres comportements », souligne-t-il.


L’ingénieur de Replicon insiste sur ceci que la racine des maux avec la POO telle que pratiquée via des langages comme Java ou C# est qu’elle n’est pas implémentée telle qu’Alan Kay l’a conçue. « On n’aurait jamais dû parler de concepts comme l’héritage, le polymorphisme ou avoir à traiter avec une myriade de patrons de conception », souligne-t-il. Ilya Suzdalnitski accuse les langages phares du moment de mettre en avant une POO qui ne s’aligne pas sur la définition originelle de l’encapsulation et sur la communication par messages entre programmes indépendants.

« En Erlang, on pratique la programmation orientée objet sous sa forme la plus pure. À l’inverse des langages de programmation phares, Erlang s’appuie sur l’idée centrale de la POO – les messages. Dans ce langage, les objets communiquent via des messages immuables », indique-t-il.

Au travers de cet exemple, l’ingénieur de Replicon suggère que programmation fonctionnelle et programmation orientée objet « pure » sont une seule et même chose. En droite ligne avec ce détail, il met surtout en avant la supériorité de la programmation fonctionnelle vis-à-vis de la POO telle que pratiquée avec Java, C#, C++ et autres. Ilya Suzdalnitski est d’avis qu’en matière de développement informatique, la simplicité doit rester de mise et la programmation fonctionnelle est la voie par excellence pour rester sur ces rails.

« Le but ultime de tout développeur de logiciel devrait être d'écrire du code fiable. Rien d'autre n'a d'importance si le code est bogué et peu fiable. Et quelle est la meilleure façon d'écrire un code fiable ? Simplicité. La simplicité est le contraire de la complexité. Erlang est probablement le langage le plus fiable au monde. La majeure partie de l'infrastructure mondiale des télécommunications (et donc de l'Internet) s'appuie sur ce dernier. Certains des systèmes écrits en Erlang ont une fiabilité de 99.999999999 % », indique-t-il.

Source : billet Ilya Suzdalnitski

Et vous ?

Partagez-vous l’avis selon lequel la POO introduit plus de complexité que l’inverse pour des bases de code importantes ?

Votre expérience des tests unitaires et du refactoring de code a-t-elle souvent été pénible sur des bases de code montées en s’appuyant sur l’approche orientée objet ? Si oui, pourquoi ?

Que pensez-vous de la programmation fonctionnelle ? Peut-elle faire office d’alternative valable à la programmation orientée objet ?

Quelle est votre expérience avec Erlang ? Serait-ce la solution ultime aux problèmes que l’auteur met sur la table ?

Voir aussi :

La programmation orientée-objet est-elle dépassée ? Une école en sciences informatiques l'élimine de son programme d'introduction

Faut-il éviter de distraire les débutants avec l'orientée objet ?

Comment pourriez-vous expliquer l'orienté objet ? Steve Jobs a essayé d'expliquer ce concept

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de Golgotha
Membre expert https://www.developpez.com
Le 23/07/2019 à 12:17
J'adhère pas à tout le discourt mais j'ai toujours pensé que la programmation devait rester simple et compréhensive.

Je ne pense pas qu'il faille jeter le bébé avec l'eau du bain, la POO est un bon concept qui peux être vraiment très utile. Cependant j'approuve le fait qu'il est toujours préférable de faire simple, et j'ai parfois été confronté à des aberrations, notamment en Java et en J2EE qui mélangeais un tas de concept abstrait et complexe pour, au final, effectuer des choses très simple..

En web c'est particulièrement visible, certains vous sortent des stacks de dingue (SASS, typescript, angular, gulp, webpack..) pour accoucher d'un site web qui aurait pu être réalisé avec beaucoup moins d'outils.

Au final je pense que ce n'est pas la POO le problème mais le fait de vouloir toujours prendre de gros outils pour effectuer des tâches simple. J'ai 15 ans d'expériences dans la programmation, si j'ai bien retenu quelques choses c'est qu'il faut toujours essayer de faire au plus simple si c'est possible. La simplicité est gage de contrôle (vous comprenez ce que vous faite) et de robustesse. Plus vous empilez les couches et les abstractions, plus vous prenez le risque de ne plus rien contrôler de ce qui se passe ni même comprendre ce qui ce passe.

Il n'y a aucune gloire à créer des objets ou des programmes que personne sauf vous maîtrisez.
30  0 
Avatar de Pierre Louis Chevalier
Expert éminent sénior https://www.developpez.com
Le 23/07/2019 à 16:45
Depuis toujours le club developpez a lancé des débats en se basant sur des blogs post et je ne voie pas le soucis.
Même en 2001 il y avais déjà des débats lancé sur des articles originaux, voir classés douteux ou clairement partisans pour certains, mais c'est souvent ce genre d'articles qui fait débat justement.
Ici en particulier l’intérêt de ce billet blog c'est qu'il va à l'encontre des idées reçues, c'est ce qui fait tout son intérêt, et donc son utilité pour lancer un débat.

Ici le blogueur n'est pas membre du club mais ça arrive souvent qu'un débat naisse aussi d'une publication d'un membre du club, exemple récent : Découvrez les dangers de MySQL et MariaDB, par Frédéric BROUARD (SQLpro) avec déjà 88 commentaires croustillants

Contrairement à ce qui à été écrits plus haut il y a bien des débats qui ont été lancés sur un simple message posté sur le forum par un membre ou par un billet blog posté ici, il suffit de cliquer sur le bouton "proposer en actualité", après je suppose que pour que cela soit accepté par les validateurs il faut que l'auteur ait fait un minimum d'efforts pour poster un texte bien argumenté qui ait un sens, et surtout trouver un sujet un peu original, ou qui prête à débat, comme ici.

Vous pourriez par exemple lancer : "la Blockchain c'est bidon", "les startups IA c'est du flan", 'La pénurie de développeurs est un mythe", etc. Pas de bol ça a déjà été fait pleins de fois

Par exemple lancer un débat sur : "MySQL et MariaDB c'est de la M.. juste bien pour les amateurs, les micros sites, et les clochards" c'est bien trouvé

Pour en revenir au débat je rappelle que sur l'index Tobe le C est encore en 2eme position, l'assembleur en position 12, et que il y a pas beaucoup de développeurs C ou assembleur qui font de la POO et que donc il y a encore des développeurs qui font du procédural et pas de la POO.
15  0 
Avatar de mh-cbon
Membre extrêmement actif https://www.developpez.com
Le 23/07/2019 à 16:22
Citation Envoyé par Neckara Voir le message
Sauf qu'en l’occurrence mon message est un post de forum, pas une actualité.

Et que je saches, à chaque fois qu'un membre poste un message sur un forum, on ne publie pas une actualité "d'après un ingénieur en informatique", "d'après un chercheur en informatique", ou autre.
Vu la masse d'ingénieur en informatique dans le monde, on pourra toujours en trouver deux qui diront deux choses totalement opposé, cela n'a donc guère de sens.
D'autant plus qu'on peut y ressentir un léger argument d'autorité, alors même qu'une bonne parti du publique a le même statu d'ingénieur informatique...

C'est tout aussi ridicule que de dire "les vaccins causent l'autisme, d'après un médecin". On s'en fout de ce que ce médecin particulier peut penser, et il ne va certainement pas faire autorité en la matière, d'autant plus si cela est posté sur un forum de médecins. Qu'on me dise "d'après une étude", "d'après l'académie des sciences de médecine", "d'après l'OMS", pourquoi pas. Ou alors de lancer un débat, mais partir au prétexte qu'une personne random a fait un billet de blog où il exprime son avis subjectif, c'est tout de même un peu osé.

C'est quand même assez culotté d'essayer d'user d'un pseudo argument d'autorité auprès d'un publique qui a tout autant de légitimité que lui, et peut-être même plus pour certains membres.

???

vous reprochez à l'auteur de l’article de s'être fait publier ici, alors que ce n'était pas de son fait.
vous réduisez la recherche en théorie de programmation à un mec qui poste un blog, alors que bon, y'en à quand même un plus sous le tapis. A commencer par toute la communauté FP. Ou juste l'autre mec qui a fait une vidéo sur le même sujet que j'ai moi même posté. Dans tous les cas ce n'est pas réduit à cette personne.
vous semblez vous prétendre d'un droit supérieur à commenter.
vous prétextez à des arguments d'autorité tout en proclamant qu'il faudrait attendre qu'une 'autorité compétente' donne son aval pour que nous puissions débattre.
Soit dit en passant, c'est un fait, que le calcul lambda à plusieurs dizaines d'années de recherches d'avance sur la POO.
Par ailleurs, lorsque vous dite "une étude", voilà une recherche qui a changé le monde, publié par un seul homme http://www-m3.ma.tum.de/foswiki/pub/...e/dijkstra.pdf

parce qu'en fait votre propos consiste à dire "si ça ne vient pas d'une autorité 'compétente' et 'collégiale', alors ce n'est même pas la peine d'en discuter".

c'est la blague de lire ça de la part de quelqu'un qui fait des billets pour "bien débattre".
Car non content de promouvoir une vision étriqué d'un monde qui serait faits d'autorités de penser et de suiveurs, vous prétendez même apprendre aux gens à réfléchir par eux mêmes, puisque c'est l'activité principal d'un débat bien ordonné.

Je nage en plein délire ; )

Pour finir, au sujet de votre diatribe sur la médecine, j'invite le lecteur à se renseigner sur l'histoire de la pénicilline. Un exemple parmit d'autres hein.

Finalement, je maintiens mon propos, en vous contentant d'attaque ad hominem au sujet de l'auteur initial (même si bon je m'interroge à savoir si c'est à lui ou à Patrick Riuz que vous en voulez), vous empêchez le débat. C'est de l'obscurantisme.
16  2 
Avatar de rheracles
Membre du Club https://www.developpez.com
Le 23/07/2019 à 15:44
Vaste sujet, qui concerne une bonne partie ma vie, ayant appris seul à programmer sans objets à l'adolescence, puis ayant été obligé de me mettre à l'objet au début de ma vie pro.

C'est aussi un sujet quasi philosophique. L'orienté objet ressemble beaucoup à l'ontologie d'Aristote (philosophe réaliste, de "res", mot latin signifiant objet): substance et accidents, genre et espèce, ...

Je relève déjà deux erreurs dans l'article, ou disons deux arguments traités un peu trop rapidement...

1) "la programmation orientée objet dévie l’attention des développeurs de ce qui doit la retenir : la résolution des problèmes"

Encore faut-il que le problème soit posé, et bien posé, et bien intégré par le développeur. Le fait de bien définir les concepts et leur propriétés est crucial pour bien poser un problème. Avant de voir les fonctions, les actions, les opérations, etc... il faut poser les choses qui sont, décrire le réel statique. Et pour ça l'objet est fort !
Rien ne sert de décrire une recette de cuisine sans recenser précisément les ingrédients et ustensiles avant...
Un problème bien posé est déjà à moitié résolu. Un problème mal posé ne sera jamais résolu.

2) "Vous n'héritez pas des comportements de vos parents"

L'héritage génétique et l'héritage en orienté objet sont deux choses bien différentes, qu'il n'est pas du tout pertinent de comparer, bien au contraire. Dans l'orienté objet, il vaut mieux employer le terme de spécialisation / généralisation, beaucoup moins trompeur.
13  0 
Avatar de Anselme45
Membre extrêmement actif https://www.developpez.com
Le 23/07/2019 à 12:39
Citation Envoyé par Golgotha Voir le message
Au final je pense que ce n'est pas la POO le problème mais le fait de vouloir toujours prendre de gros outils pour effectuer des tâches simple. J'ai 15 ans d'expériences dans la programmation, si j'ai bien retenu quelques choses c'est qu'il faut toujours essayer de faire au plus simple si c'est possible. La simplicité est gage de contrôle (vous comprenez ce que vous faite) et de robustesse. Plus vous empilez les couches et les abstractions, plus vous prenez le risque de ne plus rien contrôler de ce qui se passe ni même comprendre ce qui ce passe.
On a beau multiplier les outils, les méthodes et autres procédures X ou Y, les statistiques restent les mêmes depuis le début du développement informatique: 1/3 des projets répondent aux objectifs, 1/3 des projets finissent à plus ou moins fonctionner avec plein d'objectifs non-tenus et 1/3 des projets sont tout simplement abandonnés car trop malades!

Quand tu fais dans l'usine à gaz avec ou sans Agile, avec ou sans POO, avec ou sans n'importe quoi, l'usine à gaz reste une usine à gaz!!!
12  0 
Avatar de Rizzen
Membre habitué https://www.developpez.com
Le 25/07/2019 à 11:37
De mon point de vue, je pense pas que la POO soit le problème. Je suis de l'avis de beaucoup que le problème vient en amont et mon expérience me conforte dans l'idée

Je bosse depuis plus de 10 ans dans le dev. En France, les projets sont gérés par des personnes qui n'ont aucune connaissance même de la "technique" et qui ne veulent rien savoir, pilotent uniquement au coût, fond de "l'agile" un prétexte pour changer tout et tout le temps sans compensation, et considèrent les techniques comme des ressources interchangeable comme une barrette de RAM.

Et enfin on balance sur le projet des devs qui ne se posent même pas la question du pourquoi de la demande, donc dev sans comprendre. On leur met une pression monstre pour être dans les temps, n'ont aucune vision globale du projet et ne sont pas encadré par l'archi car il est toujours en mode pompier pour sauver le projet ou le précédent.

Si ça marche c'est la direction qui se jettent des fleurs, si ça marche pas on descend l'équipe technique.

Ca c'est pour du dev interne, quand c'est du progiciel, pour être rentable ça développe la demande bêtement mais sans aucune vision de maintenabilité car faut faire le truc le plus rapidement possible du moment que ça fait ce qu'on demande on s'en fou, le client paiera derrière pour le refaire. Car le commerciale, il vent son produit comme si il vendait des tapis et se contre fou que la réduction pour que le client accepte rend le projet infaisable, il aura sa prime sur ses objectif de ventes.
12  0 
Avatar de mh-cbon
Membre extrêmement actif https://www.developpez.com
Le 23/07/2019 à 12:11


L'article ne présente pas suffisamment d'exemples compréhensible, factuels et avec lesquels nous pourrions commencer une discussion.
Il est possible que la complexité engendrer par la poo empêche toute tentative comparative simple de déboucher, ce qui serait cocasse.

Il présente de bons arguments, mais c'est encore trop théorique pour convaincre.

Par exemple, j'ai une petite app web qui doit exécuter des actions pour lesquelles je ne souhaites pas que différents utilisateurs puissent démarrer la même action plusieurs fois en même temps. Je ne veux jamais qu'une instance à la fois.
Ça nécessite un state, ça nécessite un pointeur qui se balade, ou une globale.
Je n'arrives pas à imaginer comment le concevoir sans ces outils.

Un programmeur FP peut il éclairer sur ce genre de cas ? Est ce un mauvais exemple, une mauvaise compréhension de ma part ?

De manière plus obtus, pour forcer le trait, toute bases de données est une état global partagé pleins de mutex, d'accès concurrent etc.
bon, faut le bannir aussi ?
10  0 
Avatar de walfrat
Membre actif https://www.developpez.com
Le 23/07/2019 à 16:50
On en revient toujours au même :
  • On lâche des développeurs dans la nature et on leur dit "la seule tâche productive c'est le code"
  • Pas d'architecte qui maîtrise un minimum les principes et outils pour cadrer techniquement le projet
  • On pars dans quelque chose de "générique".
  • On fait de l'"agile"


Et après on balance sur les outils ?

J'approuve le fait que faire de la POO à l'aveugle n'est pas une bonne idée, mais le problème reste que la majorité des projets informatiques et organisations évoluant autours d'elle ne savent pas gérés un projet informatique où ne s'en donne pas les moyens.

Les problèmes liés à une développeur pas assez compétent, un imprévu technique sa se gère, à condition... de gérer et de donner les moyens au chef de projet de le faire.

Quand on pourra dire que les projets sont au global correctement gérés, je m'inquiéterais des outils. Mais peu importe les outils, si l'organisation ne fonctionne pas, ils sont quasiment inutiles.
10  0 
Avatar de Pierre Louis Chevalier
Expert éminent sénior https://www.developpez.com
Le 23/07/2019 à 18:01
Citation Envoyé par Neckara Voir le message
On peut faire de la POO en C.
Oui je sais, ça c’est la théorie, article de 2005 : Programmation orientée objet en C.

Dans la pratique combien de développeurs C font de la POO ? à ma connaissance pratiquement personne. Et c'est pourquoi j'ai écris à juste titre "Il y a pas beaucoup de développeurs C ou assembleur qui font de la POO" et non "Il y a aucun développeur C qui fait de la POO".
Mais tu as pas lu ce que j'ai écris, tu ne l'a pas compris, ton but est pas de lire les autres pour apprendre quelque chose, mais juste de les contredire même à tord pour faire ton intéressant

Et pour Tiobe aussi on sais, tout cela a été dit et redit, c'est d'une telle banalité, c’est fatiguant ta façon de faire, mais il faut bien partir de quelque chose, et c'est pas le débat.
A te lire, comme quelqu'un l'à écrit plus haut et a fait remarquer apparemment à juste titre, on dirais que tu te prends pour le seul compétent sur ce forum, et en plus tu te prends pour un "juge", et c'est hautement pénible, et de ton point de vue tous les autres intervenants sont des crétins ignares, et que tu as besoin de contredire les autres à tord à tout bout de champs, et c'est vrai que c’est globalement non seulement polluant mais insupportable. Je te signale aussi que tu es totalement HS depuis le début, et que tu es le seul en plus... ...
Les autres propos sont au contraire très intéressants car basés sur une expérience réelle, et c'est ce qui fait tous l’intérêt du débat, de lire ces avis et témoignages, le fait que ça ait été lancé par le billet de Pierre/Paul/Jacques n'a absolument aucune importance, puisque au pire si le billet c'est un ramassis de conneries au contraire ça fera de quoi débattre...

Pour le reste tu as rien compris, tu te refuses à voir les faits, le débat intéresse les lecteurs c'est un fait, donc le chroniqueur à parfaitement bien fait de lancer le débat, et tu as totalement tord en tout point, mais tu ne le reconnaîtra jamais

Citation Envoyé par Neckara Voir le message
Que la POO ajoute de nouveaux concepts, i.e. de faire plus de choses (pas au sens fonctionnel, mais au sens de nombres d'outils disponibles), et donc bien sûr de faire plus de bêtises si on n'y fait pas gaffe.
En revanche, bien utilisé, cela peut se révéler être un outil assez puissant.
Que la POO induit aussi, par ses mécanismes des surcoûts, pas nécessairement adaptés dans certains environnements très contraints.
Certaines des critiques n'ont rien à voir, ou ne sont pas spécifiques à la POO. D'autres n'en sont pas, et d'autres sont liés à une misconception de la POO.
En gros, la POO c'est bien tant qu'on ne fait pas n'importe quoi... comme n'importe quel outil... c'est sûr qu'on était loin de s'en douter...
Enfin un message de ta part qui est pas HS ou une agression, ou un dénigrement, ou une pollution.

C'est bien c'est un aveux de ta part, puisque toi même (votre infinie grandeur ! ) tu participes au débat c'est que ce débat est bon, utile, intéressant, et que donc le chroniqueur avait parfaitement raison de le lancer, et que donc par conséquent tu avais 100% tord avec tous tes HS, CQFD.

Comme on dit : "il y a que les C.. qui changent pas d'avis"
13  3 
Avatar de PomFritz
Membre du Club https://www.developpez.com
Le 23/07/2019 à 16:03
Ces discussions devraient faire réléchir ceux qui pensent qu'il s'agit juste de "pisser" du code pour faire ci-ou-ça. Quand je vois comment l'expérience et la formation continue sont mal récompensés dans la branche. Il faut savoir choisir ses outils pour chaque tâche, mais quand on bricole on prend ce qu'on a sous la main.
9  0