Bien que certains objets que je crée modélisent des objets du monde réel, le code pré-POO ne ferait-il pas de même?
La principale différence entre le code OOP et le code pré-OOP réside dans le fait que l'ancien code modélise une situation réelle en tant que groupe d'entités distinctes qui interagissent les unes avec les autres, chacune avec un "pouvoir" limité sur ce qu'elle peut faire et aussi capable de "réagir" événements externes avec ses propres actions. Ce dernier modélise tout comme un gros bloc de données qui ne fait rien par lui-même, tandis que le calcul représente «des événements» et peut les affecter.
Que cela modélise mieux le monde réel ou non, cela dépend vraiment des facettes du monde que vous modélisez. Une simulation physique, par exemple, dans laquelle vous voulez décrire les effets qu'un feu allumé aurait, par exemple, sur les objets environnants, serait mieux représentée par une approche "traditionnelle", car la lumière et la chaleur sont bien processus définis qui affectent à la fois l'état externe et l'état interne d'autres objets et qui ne varient pas en fonction du comportement de chaque objet particulier, étant uniquement affectés par leurs propriétés.
D'autre part, si vous modélisez différents composants qui interagissent pour produire le comportement souhaité, les traiter comme des agents plutôt que comme des éléments passifs peut permettre de le faire plus facilement sans rien omettre. Si je veux allumer mon téléviseur, j'appuie simplement sur le bouton. Si le cordon d'alimentation est débranché, TV.turnOn
je vérifierai pour moi. Donc, il n'y a aucun risque de tourner un rouage et d'oublier de transformer l'autre qui le touche, car le rouage lui-même (s'il est programmé correctement) prendra en charge les interactions secondaires qui découlent de la première.
Mais OO concerne vraiment la manière de modéliser les choses, et cette méthode de modélisation ne me semble pas inspirée par le monde réel.
Je crois que cela a plus à voir avec la façon dont nous percevons le monde que de voir comment le monde l’est réellement. On pourrait dire que tout n’est qu’un groupe d’atomes (ou d’énergie, ou d’ondes, peu importe), mais cela ne nous aide pas à gérer les problèmes auxquels nous sommes confrontés, à comprendre l’environnement qui nous entoure et à prédire les événements futurs ( ou décrivant les passés). Nous créons donc des "modèles mentaux" du monde, et ces modèles mentaux trouvent souvent une meilleure correspondance avec OO que celle des processus data +, qui modélisent sans doute "mieux" le fonctionnement réel du monde réel.
Il est également intéressant de noter que la plupart des gens pensent que la POO est synonyme de "POO classique", où nous créons de manière taxonomique des ensembles et des sous-ensembles de choses et plaçons sans ambiguïté des objets dans un ensemble très spécifique. C'est très utile pour créer de nouveaux types réutilisables , mais pas si génial lorsque l'entité que vous modélisez est à peu près autonome, et même si elle initie des interactions avec d'autres objets, elle est rarement, sinon jamais, la cible d'une interaction. Ou pire, quand il y a peu (peut-être une seule) instance de cette entité, ou que les instances varient énormément dans la composition, le comportement ou les deux.
Cependant, il existe également une "POO prototypique", dans laquelle un objet est décrit en choisissant un objet similaire et en énumérant les aspects où ils diffèrent. Je suggérerais cet essai comme une explication bonne et pas trop technique du processus de réflexion (le post entier est trop gros, même pour les standards de Steve Yegge, alors je pointe vers la section pertinente: P). Encore une fois, cela correspond bien à nos modèles mentaux lorsque nous imaginons des instances inconnues par rapport à un exemple connu, mais pas nécessairement à la façon dont le monde réel "fonctionne" ... (deux vaches sont en réalité des entités complètement distinctes, même si nous les percevons) comme étant "semblables" à bien des égards)