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?
DiskBrake extends Brake
moyens 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, commeDiskBrake 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.Réponses:
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.
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
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.)
la source
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:
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)
la source
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.
la source
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.
la source
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.
la source
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.
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.
la source
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.
la source
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.
la source
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.
la source
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.
la source