126 votes

Quel est le point de la POO?

Aussi loin que je peux dire, malgré les innombrables millions ou des milliards dépensés sur la programmation orientée objet, l'éducation, les langues et les outils de la programmation orientée objet n'a pas amélioré la productivité du développeur de logiciel ou la fiabilité de, ni n'a réduit les coûts de développement. Peu de gens l'utilisation de la programmation orientée objet dans tous les sens rigoureux (peu de gens adhèrent ou de comprendre les principes tels que le LSP); il semble y avoir peu d'uniformité ou de la consistance aux approches que les gens prennent pour des problèmes de modélisation de domaines. Trop souvent, la classe est utilisée simplement pour son sucre syntaxique; il met les fonctions pour un type d'enregistrement dans leur petit espace de noms.

J'ai écrit une grande quantité de code pour une grande variété d'applications. Bien qu'il y a eu des endroits où la vraie substituables le sous-typage joué un rôle important dans l'application, celles-ci ont été assez exceptionnel. En général, bien que beaucoup de lip service est donnée de parler de "re-use" la réalité est que si un morceau de code qui fait exactement ce que vous voulez faire, il y a très peu coût-efficace "re-use". Il est extrêmement difficile de classes de conception pour être extensible dans le droit chemin, et donc le coût de l'extension est normalement si grande, que la "re-use" n'est tout simplement pas la peine.

À bien des égards, cela ne m'étonne pas. Le monde réel n'est pas "OO", et l'idée implicite dans OO--que l'on peut modéliser des choses avec une certaine classe de la taxonomie--me semble très viciée à la base (je peux m'asseoir sur une table, un tronc d'arbre, le capot d'une voiture, quelqu'un tour, mais pas un de ceux est-une chaise). Même si nous orienter davantage vers des domaines abstraits, OO modélisation est souvent difficile, contre-intuitif, et en fin de compte inutile (considérez les exemples classiques de cercles/ellipses ou des carrés/rectangles).

Donc ce qui me manque ici? Où est la valeur de la programmation orientée objet, et pourquoi tous les temps et de l'argent n'a pas à faire des logiciels mieux?

119voto

Konrad Rudolph Points 231505

Le monde réel n'est pas "OO", et l'idée implicite dans OO--que l'on peut modéliser des choses avec une certaine classe de la taxonomie--me semble très fondamentalement vicié

Ce qui est vrai et a été observé par d'autres personnes (prendre Stepanov, inventeur de la STL), le reste est un non-sens. La programmation orientée objet peut être imparfaite et ce n'est certainement pas la panacée, mais elle rend à grande échelle des applications beaucoup plus simple, car il est un excellent moyen de réduire les dépendances. Bien sûr, ceci n'est vrai que pour les "bons" de la programmation orientée objet design. Sloppy design ne donne aucun avantage. Mais bon, découplée de la conception peut être modélisé en utilisant la programmation orientée objet et n'est pas bien d'utiliser d'autres techniques.

Il y a beaucoup mieux, plus des modèles universels (Haskell type de modèle qui vient à l'esprit), mais ces derniers sont souvent plus complexes et/ou difficiles à mettre en œuvre efficacement. La programmation orientée objet est un bon compromis entre les deux extrêmes.

45voto

Brian Leahy Points 7840

La POO ne consiste pas à créer des classes réutilisables, mais à créer des classes utilisables.

42voto

Daniel Auger Points 8459

Trop souvent, la classe est utilisée tout simplement pour son sucre syntaxique; il met les fonctions pour un type d'enregistrement dans leur petit espace de noms.

Oui, je trouve cela trop répandue. Ce n'est pas de la Programmation Orientée Objet. C'est l'Objet de Base de la Programmation et des données centrées sur la programmation. Dans mes 10 années de travail avec les Langages à objets, je vois la plupart des gens faire de l'Objet en Fonction de la Programmation. OBP se décompose très rapidement à mon humble avis, puisque vous êtes essentiellement faire les pires de ces deux mots: 1) la Procédure de programmation sans avoir à respecter prouvé la programmation structurée méthodologie et 2) de la programmation orientée objet, sans avoir à respecter pour prouvé méthodologie de la programmation orientée objet.

OOP fait droit est une belle chose. Il rend très difficile les problèmes faciles à résoudre, et pour les non-initiés (ne cherche pas à son pompeux), il peut paraître presque comme par magie. Cela étant dit, la POO est qu'un outil dans la boîte à outils de méthodes de programmation. Ce n'est pas la fin à toutes méthodologie. Il arrive juste pour répondre à de grandes applications d'entreprise.

La plupart des développeurs qui travaillent en programmation orientée objet, les langues sont en utilisant des exemples de la programmation orientée objet fait droit dans les cadres et les types qu'ils utilisent au jour le jour, mais ils ne sont simplement pas au courant de ça. Voici quelques exemples très simples: ADO.NET, Hibernate/NHibernate, la Journalisation des Cadres, dans les différentes langues des types de collection, la ASP.NET pile, Les JSP de la pile, etc... ce sont toutes les choses qui s'appuient largement sur la programmation orientée objet dans leur code.

32voto

theschmitzer Points 3058

La réutilisation ne doit pas être un objectif de la programmation orientée objet - ou tout autre paradigme.

La réutilisation est un effet secondaire d'une bonne conception et le bon niveau d'abstraction. Code réalise la réutilisation par faire quelque chose d'utile, mais ne pas le faire de façon à la rendre rigide. Il n'est pas question de savoir si le code est OO ou pas - on réutiliser ce qui fonctionne et n'est pas trivial à faire nous-mêmes. C'est le pragmatisme.

La pensée de OO comme une nouvelle façon de se rendre à la réutilisation par l'héritage est fondamentalement vicié. Comme vous le notez le LSP violations abondent. Au lieu de cela, OO est pas pensée comme une méthode de gestion de la complexité d'un problème de domaine. L'objectif est de maintenabilité d'un système au cours du temps. Le principal outil pour atteindre cet objectif est la séparation de l'interface publique d'une mise en œuvre privée. Cela nous permet d'avoir des règles comme "Cela ne devrait être modifiée à l'aide de ..." appliquée par le compilateur, plutôt que de la revue de code.

Avec cela, je suis sûr que vous serez d'accord, nous permet de créer et de maintenir extrêmement complexe systèmes. Il y a beaucoup de valeur, et il n'est pas facile de le faire dans d'autres paradigmes.

28voto

James Devlin Points 6699

Presque religieux, mais je dirais que vous êtes en train de peindre une image trop sombre tableau de l'état moderne de la programmation orientée objet. Je dirais qu'en fait, il a réduit les coûts, fait grands projets de logiciel maniable, et ainsi de suite. Cela ne veut pas dire que c'est résolu le problème fondamental de logiciels de la médiocrité, et cela ne signifie pas que le développeur moyen est un expert de la programmation orientée objet. Mais la modularité de la fonction de l'objet des composants a certainement réduit la quantité de code spaghetti dans le monde.

Je ne peux penser à des dizaines de bibliothèques du haut de ma tête qui sont magnifiquement réutilisable et qui ont permis d'économiser du temps et de l'argent qui ne peut jamais être calculé.

Mais dans la mesure où la programmation orientée objet a été une perte de temps, je dirais que c'est à cause du manque de programmeur de formation, aggravée par la courbe d'apprentissage abrupte de l'apprentissage d'une langue spécifique de la programmation orientée objet de la cartographie. Certaines personnes "get" de la programmation orientée objet et d'autres ne le sera jamais.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X