La POO est-elle le modèle de programmation dominant dans le monde réel?

20

Objets Jamais? Eh bien, presque jamais

Dans la section VIEWPOINT des Communications de l'ACM, j'ai trouvé un article intéressant intitulé " Objets jamais? Eh bien, presque jamais ". C'est une perspective radicalement différente de celle des objets en premier ou des objets en retard. Il suggère "des objets jamais" ou peut-être "des études supérieures en objets".

L'auteur a parlé de la POO et a posé une question sur la façon dont la POO est utilisée dans des environnements de programmation réels. Il pense que la POO n'est pas le modèle de programmation dominant. Par exemple, affirme-t-il, 70% des programmations sont effectuées pour les systèmes embarqués où la POO n'est pas vraiment adaptée.

Lorsque certains professeurs d'université veulent parler des avantages de la POO, ils parlent de réutilisation de code. Comme autre exemple, encore une fois, affirme-t-il, ce n'est pas le cas réel dans le monde réel. la réutilisation de code est plus difficile que ce qui est revendiqué dans les universités:

Je prétends que l'utilisation de la POO n'est pas aussi répandue que la plupart des gens le croient, qu'elle ne réussit pas aussi bien que le prétendent ses partisans et que, par conséquent, sa place centrale dans le programme d'études CS n'est pas justifiée.

C'est intéressant pour moi de savoir comment les gens en débordement de pile pensent à ce sujet? La POO est-elle le modèle de programmation dominant du point de vue des programmeurs?

Si je dois choisir / apprendre / utiliser une seule approche, s'agit-il de POO ou non? Pourquoi?

Ehsan
la source
26
"70% des programmations sont faites pour les systèmes embarqués"? Est-ce par projet, par développeur ou par LOC? J'ai le sentiment que 70% de "tous les prorgammings" se font dans Excel. Même les tableurs de programme non programmeurs.
LennyProgrammers
1
@ Lenny222: Si vous voulez ma conjecture, c'est 70% des copies distribuées des programmes sont dans des logiciels embarqués, ou quelque chose comme ça. Maintenant, certaines choses imbriquées sont effectuées en C ++, et souvent une version piratée qui laisse C et des objets, il semble donc fallacieux de prétendre que l'embarqué n'est jamais orienté objet.
David Thornley
9
Je pense que le modèle de programmation dominant a longtemps été et sera la grosse boule de boue.
whatsisname
Cet article fait une distinction bizarre entre "classes" et "sous-systèmes" que je ne comprends même pas à distance. Il explique comment les DiskBrake extends Brakemoyens OOP ne sont pas bons pour une voiture, car dans «le monde réel», cette communication est mise en œuvre «par des signaux de réseau et des protocoles de bus» - quoi, comme DiskBrake implements BrakeInterface?! C'est peut-être ma propre << 43 ans d'expérience, mais les exemples pour moi ne soutiennent absolument pas la revendication de l'auteur.
OJFord
2
Le lien est maintenant derrière un mur payant. Quoi qu'il en soit, la POO est en quelque sorte sous-définie et surévaluée pour la plupart. Mais disons simplement que «la plupart» des nouveaux programmes sont probablement écrits d'une manière inspirée de la POO inspirée de Java avec des getters et des setters, et des classes nommées SessionManager
Charles Salvia

Réponses:

19

Dans la section VIEWPOINT des Communications de l'ACM

Si vous êtes intéressé par la programmation pratique , les actes d'ACM et autres sont la dernière source que vous souhaitez lire. Ce sont souvent des publications [pseudo] scientifiques sans application dans le monde réel. Ce sont souvent des opinions peu orthodoxes faites pour la publicité, pour que l'écrivain se différencie de la foule et fasse la promotion de sa propre personne.

Je prétends que l'utilisation de la POO n'est pas aussi répandue que la plupart des gens le croient, qu'elle ne réussit pas aussi bien que le prétendent ses partisans et que, par conséquent, sa place centrale dans le programme d'études CS n'est pas justifiée.

J'ai tendance à être en désaccord avec votre point. La POO est largement répandue et fonctionne très bien. En nombre, les projets basés sur la POO ont probablement dépassé les développements réalisés avec d'autres stratégies (parlons de l'époque moderne, 15-20 ans).

Cependant, la POO n'est pas une solution miracle. Cela fonctionne pour certains développements, ne fonctionne pas pour d'autres. Comme toute autre approche.

Mais une chose que je dois mentionner est qu'un programme devrait communiquer la connaissance des différentes approches. Si c'est basé sur la POO, c'est faux. Si c'est basé sur FP, c'est faux. Il devrait les couvrir tous ou ne pas toucher complètement à ce sujet.

PS Pourquoi se soucier de ce qui est dominant et de ce qui ne l'est pas? Prenez simplement ce qui convient au projet en cours et laissez les chiffres aux "chercheurs".


la source
3
Ce sont des articles de recherche dans des domaines de l'informatique qui ne sont pas encore devenus courants. Il faut de nombreuses années aux universités pour filtrer le monde réel, bien que ce soit le cas régulièrement.
Orbling
4
@DeveloperArt: Veuillez noter que l'auteur de l'article a 43 ans d'expérience dans le développement de logiciels!
Ehsan
6
Alan Kay ajoute un commentaire, à cacm.acm.org/magazines/2010/9/… - «En revanche, je n'ai jamais considéré que la plupart des systèmes qui se disent« orientés objet »sont même proches de ma signification lorsque j'ai inventé à l'origine le terme.' - qui est lié tangentiellement à mon message - "OO? Dont OO?"
Frank Shearar
9
@Developer Art: Ce qui me ronge (un peu) dans votre article, c'est la partie "chercheurs". Ces sacrés universitaires. Qu'ont-ils fait pour nous? Oh. Calcul lambda, fermetures, objets, programmation fonctionnelle, ... Mais à part ça, qu'ont fait les universitaires pour nous?
Frank Shearar
4
-1 Les chercheurs en informatique ont besoin de citations effrayantes? L'ACM publie de la pseudo-science? Sérieusement?
jprete
17

Si la POO est le seul paradigme que vous connaissez, vous devriez peut-être en savoir plus. Mais vraiment, qu'est-ce que la POO signifie réellement? Cela signifie-t-il Java ou C ++? Cela signifie-t-il Smalltalk? Cela signifie-t-il des plages de valeurs réglables et des fermetures? (Salut, Scheme!) Cela signifie-t-il l'envoi de messages? (Salut, Erlang!)

Bref, cela semble une question inintéressante à poser. "OO est-il utile ?" est une meilleure question. Et bien, cela semble ainsi. (C'est certainement pour moi.)

Frank Shearar
la source
6
+1 Je soupçonne qu'en pratique, la POO a cessé de signifier autre chose qu'une "bonne façon d'écrire du code qui utilise des choses appelées objets".
Larry Coleman
L'article référé ne pense pas que l'utilisation d'un langage OO soit une garantie d'utilisation oo et se demande s'il devrait y avoir des paradigmes du fait qu'ils n'existent pas dans d'autres disciplines de l'ingénierie.
JeffO
L'auteur devrait peut-être lire William Cook et Matthias Felleisen, qui passent beaucoup de temps à parler de ce qui est et n'est pas la même chose dans la programmation.
Frank Shearar
9

Où sont tous les développeurs qui font ces "70% de programmations"? sur tous les développeurs que je connais, moins de 1% travaillent sur des systèmes embarqués.

Nous avons donc 3 options:

  1. Je suis unique et tous vos amis font vraiment de la programmation embarquée
  2. Il y a des armées de développeurs enfermés dans un sous-sol quelque part qui font ces 70%
  3. cette statistique est composée et l'article est des conneries

sauf si je vois des preuves que les options 1 ou 2 sont réellement vraies, je vais avec l'option 3.

(BTW, je ne considère pas la programmation intégrée de développement mobile moderne, et le développement mobile est souvent OO, après tout Apple vous oblige à utiliser * Objective * C pour développer pour l'iPhone)

Nir
la source
FWIW, j'ai pris quelques secondes et j'ai trouvé une demi-douzaine de mesures possibles pour "70% des programmations". L'auteur a peut-être bien utilisé un septième. (De plus, les programmeurs intégrés sont là-bas, ils ont juste tendance à ne pas traîner aux mêmes endroits, et se considèrent souvent comme des ingénieurs électriciens ou quelque chose comme ça plutôt que des programmeurs.)
David Thornley
1
@David Thornley - mentir avec des statistiques ment toujours, l'auteur affirme clairement que la grande majorité de la programmation dans le monde aujourd'hui est pour les systèmes embarqués - et je dis que ce sont des taureaux totaux # @ $ t, je suis sûr que je peux inventer un mesure qui montre que la plupart des programmes dans le monde se font dans la pièce où je suis en ce moment (que je partage avec un seul autre développeur) - mais toute conclusion que je construis en plus de cette observation sera aussi sans valeur que la mesure inventée .
Nir
1
Je suis un gars intégré. J'ai vu plusieurs rapports selon lesquels environ 99% des processeurs produits / expédiés sont destinés à des systèmes embarqués (si c'est vraiment nécessaire, je peux revenir et citer le (s) rapport (s)). Cela dit, je suis sûr que près de 70% de toute la programmation est faite pour les systèmes embarqués. Je pense que quelque chose comme 50% de tous les processeurs livrés sont 4 bits et 8 bits, mais ceux-ci représentent probablement 0,1% (ou moins) de toute la programmation. Comme l'a dit David, il existe de nombreuses façons de proposer "70% des programmations". Je ne serais pas surpris si le nombre était de 20-25%.
Radian
+1 pour «mentir avec des statistiques, c'est encore mentir»; si vrai, si vrai…
Donal Fellows
8

Je n'ai pas de faits pour le suivre, mais la POO n'est pas le modèle de programmation dominant. Imaginez simplement toutes ces applications internes développées par quelqu'un qui a suivi un cours de base visuel ou fait de la programmation macro dans Excel.

De nombreuses applications ne font que la programmation impérative où toute la logique est empilée dans une seule classe ou vue. Il s'agit probablement de la grande majorité des applications simples internes exécutées dans toutes les entreprises.

Il n'y a rien de mal à cela, il existe plusieurs façons de résoudre le même problème. Certains mieux adaptés que d'autres.

De plus, comme vous l'avez souligné, la POO n'est pas utile pour tous les scénarios. Il existe également d'autres modèles.

Morten
la source
Là encore, il pourrait y avoir la question de ce qui doit être décrit comme le modèle dominant. Est-ce "la quantité d'applications développées avec le modèle X" ou est-ce "la quantité de code développé avec le modèle X"? Quoi qu'il en soit, je pense toujours que la POO ne sera pas le modèle dominant.
Morten
1
+1 Pour mettre en avant le fait que, bien que la POO puisse être presque omniprésente avec des professionnels formés, l'industrie du monde entier ne le reflète pas tout à fait et il y a beaucoup de code impératif direct.
Orbling
5

Que la POO soit ou non le modèle de programmation dominant est sans importance, il suffit de mettre différents modèles pour différents cas.

Il n'y a pas de solution miracle.

Ce que Moti Ben Ari discute est une affirmation académique, qui n'a déjà aucun sens. Cependant, il déclare qu'il n'a jamais trouvé la POO "sensée", c'est clairement le cas pour des milliers de développeurs et d'ingénieurs logiciels et a été utilisée dans de nombreux systèmes ...

Mais, vraiment, le point de ma réponse est le suivant: à quoi sert de dire qu'un modèle ou un autre est dominant ou non, est-ce donc une bonne raison de l'utiliser aveuglément? Bien sûr que non.

ocodo
la source
Si beaucoup de gens prétendent utiliser un modèle et ne le font pas, c'est un problème. La question est aussi répandue qu'il y paraît et non pas d'être dominante / meilleure.
JeffO
4

Il s'agit en fait d'une question difficile à répondre de manière fiable. La principale raison est que des gens comme moi travaillent dans des applications internes personnalisées, où le code ne quitte jamais notre bâtiment. Utilisons-nous OO ici? Je ne dis pas. Combien d'autres programmeurs ont des emplois similaires? Ils ne disent pas non plus. Nous avons des sites d'emplois, mais tous les emplois ne sont pas affichés et toutes les offres ne concernent pas de vrais emplois, contrairement aux recruteurs qui tentent de rassembler des listes de noms.

Même si je disais que nous utilisons OO là où je travaille, cela signifie-t-il la définition traditionnelle de l'article lié: Objets, classes, héritage? Ou cela signifie-t-il que j'utilise principalement des objets comme moyen d'organiser le code? Ou cela signifie-t-il que je programme uniquement des interfaces et que j'utilise à peine l'héritage? Je ne dis toujours pas, mais lequel de ceux-ci compte vraiment comme OO?

Il n'est même pas significatif de demander si l'OO est utile tant que les questions ci-dessus n'ont pas été répondues, et encore moins dominantes.

Larry Coleman
la source
2

Bien sûr, car c'est le dernier mot à la mode auquel la direction s'est accrochée. Il offre également une meilleure encapsulation et une meilleure abstraction que la programmation impérative, donc je pense que le saut de oop à ce qui vient ensuite pourrait prendre encore plus de temps que l'impératif de oop ne l'a pris.

PS2: Si je dois choisir / apprendre / utiliser une seule approche, est-ce que c'est la POO ou non? Pourquoi?

Si vous ne voulez en apprendre qu'un, vous devez choisir un domaine différent.

Vous devez en savoir plus sur les types et l'encapsulation et tous les autres avantages de la POO, puis apprendre à accomplir ces mêmes choses en utilisant un style de programmation fonctionnel.

Josh
la source
+1 pour le commentaire sur la sélection d'un champ différent si vous prévoyez d'apprendre une approche. C'est dingue.
Mat Nadrofsky
1

La POO est certainement l'un des modèles de programmation les plus dominants dans le monde réel.

Avouons-le, même les personnes qui conçoivent du matériel numérique, les concepteurs de puces eux-mêmes, font la transition vers le duo de SystemVerilog et SystemC. Ce sont des langages de programmation orientés objet.

Où la POO ne serait-elle pas utilisée? Eh bien, si vous codez des pilotes de périphérique, il est difficile d'imaginer pourquoi vous auriez besoin d'une programmation générique ou d'un héritage multiple OU si vous utilisez des techniques de programmation fonctionnelle de l'IA, cela est beaucoup plus facile pour vous. Il y a aussi beaucoup d'autres situations, il suffit de dire que la POO est un endroit assez puissant pour être dans un monde de programmation oligopolistique.

Fanatic23
la source
1

Je dirais non.

Je comprends qu'il y a une énorme quantité de code qui est écrit en utilisant un langage «orienté objet», mais généralement je trouve que le code est simplement procédural enveloppé dans des classes. (pas que ce soit nécessairement une mauvaise chose). Le code que j'ai vu qui est écrit pour être plus OO dans ces langages a tendance à être un horrible gâchis de dépendances entre les classes qui est généralement non maintenable.

OO est censé concerner le passage de messages entre des objets complètement autonomes, et nous le voyons dans le code d'aujourd'hui, mais à un niveau beaucoup plus large - c'est-à-dire que nous voyons ces objets implémentés sous forme de DLL ou d'assemblages ou d'objets COM. «Composants», je les ai entendus décrits comme.

donc, je pense que cela n'a pas vraiment d'importance si OO est utilisé ou non - si le code est maintenable pendant sa vie, réutilisable dans la mesure où il a été conçu et rapide à développer, alors je m'en fiche s'il est purement procédural ou semi-orienté objet ou entièrement OO. Je doute que quiconque puisse vous dire si le style prédominant est l'un de ceux-ci, mais je risquerais de deviner que le style procédural sera le plus courant, même s'il est découpé en classes plutôt qu'en fonctions.

gbjbaanb
la source
0

Je pense qu'il est important de différencier une solution obtenue en appliquant une approche orientée objet et une solution implémentée à l'aide du paradigme orienté objet. Mon avis sur un bon logiciel orienté objet est de combiner les deux solutions. Si vous pensez aux objets et que vous respectez les définitions d'objets et les interactions, et que votre problème pourrait être adapté pour utiliser cette structure, alors vous aurez un code flexible et robuste. Mais si vous utilisez des objets pour résoudre un code en utilisant un paradigme procédural, vous vous retrouverez avec un mélange désagréable qui ne profitera pas des pros des objets.

Je préfère vraiment que mon code soit orienté objet, et je me suis rendu compte qu'au début, il pourrait être un peu plus ennuyeux de créer une bonne structure, mais en ce qui concerne la flexibilité et les exigences de flash client d'aujourd'hui, je pense que ça vaut le coup effort.

guiman
la source
0

Je ne prétends pas connaître les chiffres exacts, ni même faire une estimation approximative, mais il existe de nombreux projets de programmation qui n'impliquent pas la POO. Je travaille avec des robots industriels. Les programmes ont tendance à être un code de procédure assez simple et direct. Le véritable système d'exploitation du robot l'est encore plus.

Beaucoup de nos "outils" que nous utilisons sont basés sur la POO, mais ils fonctionnent sur PC et non sur le contrôleur de robot. Il s'agit notamment des éditeurs, des simulations et des utilitaires.

Jim C
la source