Dans le seul blog de développement que j'ai lu, par ce gars de Joel-On-Software-Founder-of-SO, j'ai lu il y a longtemps que l'OO ne conduit pas à des augmentations de productivité. La gestion automatique de la mémoire le fait. Cool. Qui peut nier les données?
Je crois toujours que OO est à non-OO ce que la programmation avec des fonctions est à tout programmer en ligne.
(Et je devrais savoir, comme j'ai commencé avec GWBasic.) Lorsque vous refactorisez le code pour utiliser des fonctions, cela
variable2654
devient
variable3
de la méthode dans laquelle vous êtes. Ou, mieux encore, il a un nom que vous pouvez comprendre,
et si la fonction est courte , ça s'appelle
value
et c'est suffisant pour une pleine compréhension.
Lorsque le code sans fonctions devient un code avec des méthodes, vous pouvez supprimer des kilomètres de code.
Lorsque vous codez refactoring pour être vraiment OO, b
, c
, q
et Z
devenir this
, this
, this
et this
. Et comme je ne crois pas à l'utilisation du this
mot - clé, vous pouvez supprimer des miles de code. En fait, vous pouvez le faire même si vous utilisez this
.
Je ne pense pas que OO soit une métaphore naturelle.
Je ne pense pas non plus que le langage soit une métaphore naturelle, et je ne pense pas non plus que les «odeurs» de Fowler valent mieux que de dire «ce code a mauvais goût». Cela dit, je pense que OO ne concerne pas les métaphores naturelles et les gens qui pensent que les
objets surgissent juste à vous manquent fondamentalement le point.
Vous définissez l'univers des objets, et de meilleurs univers d'objets aboutissent à un code plus court, plus facile à comprendre, qui fonctionne mieux, ou tous ces éléments (et certains critères que j'oublie). Je pense que les personnes qui utilisent les objets naturels du client / domaine comme objets de programmation n'ont pas le pouvoir de redéfinir l'univers.
Par exemple, lorsque vous effectuez un système de réservation aérienne, ce que vous appelez une réservation peut ne pas correspondre du tout à une réservation légale / commerciale.
Certains des concepts de base sont des outils vraiment sympas
Je pense que la plupart des gens exagèrent avec cette chose "quand vous avez un marteau, ce sont tous des clous". Je pense que l'autre côté de la pièce / du miroir est tout aussi vrai: lorsque vous avez un gadget comme le polymorphisme / l'héritage, vous commencez à trouver des utilisations où il tient comme un gant / une chaussette / une lentille de contact. Les outils d'OO sont très puissants. L'héritage unique est, je pense, absolument nécessaire pour que les gens ne s'emballent pas, mon propre
logiciel d'héritage multiple ne résiste pas.
Quel est l'intérêt de la POO?
Je pense que c'est un excellent moyen de gérer une base de code absolument massive. Je pense que cela vous permet d'organiser et de réorganiser votre code et de vous donner un langage pour le faire (au-delà du langage de programmation dans lequel vous travaillez), et de modulariser le code d'une manière assez naturelle et facile à comprendre.
La POO est destinée à être mal comprise par la majorité des développeurs
C'est parce que c'est un processus révélateur comme la vie: vous comprenez de plus en plus OO avec l'expérience, et commencez à éviter certains modèles et à en utiliser d'autres à mesure que vous devenez plus sage. L'un des meilleurs exemples est que vous arrêtez d'utiliser l'héritage pour les classes que vous ne contrôlez pas et que vous préférez plutôt le modèle
Facade .
Concernant votre mini-essai / question
Je voulais mentionner que vous avez raison. La réutilisation est une chimère, pour la plupart. Voici une citation d'Anders Hejilsberg sur ce sujet (brillant) d'ici :
Si vous demandez aux programmeurs débutants d'écrire un contrôle de calendrier, ils se disent souvent: "Oh, je vais écrire le meilleur contrôle de calendrier au monde! Il va être polymorphe par rapport au type de calendrier. Il aura des afficheurs, et les mungers, et ceci, cela et l'autre. " Ils doivent expédier une application de calendrier dans deux mois. Ils mettent toute cette infrastructure en place dans le contrôle, puis passent deux jours à écrire une application de calendrier merdique en plus. Ils penseront: "Dans la prochaine version de l'application, je vais faire beaucoup plus."
Une fois qu'ils commencent à réfléchir à la façon dont ils vont réellement mettre en œuvre toutes ces autres concrétisations de leur conception abstraite, cependant, il s'avère que leur conception est complètement fausse. Et maintenant, ils se sont peints dans un coin, et ils doivent tout jeter. J'ai vu cela encore et encore. Je suis fermement convaincu d'être minimaliste. À moins que vous ne résolviez réellement le problème général, n'essayez pas de mettre en place un cadre pour résoudre un problème spécifique, car vous ne savez pas à quoi devrait ressembler ce cadre.