Dans l' une des nombreuses déclarations anti-OOP sur cat-v.org, j'ai trouvé un passage de Joe Armstrong soulevant plusieurs objections contre le modèle OOP, dont l'une était la suivante:
Objection 4 - Les objets ont un état privé
L'État est la racine de tout mal. En particulier, les fonctions ayant des effets secondaires doivent être évitées.
Alors que l'état dans les langages de programmation n'est pas souhaitable, dans le monde réel, l'état abonde. Je suis très intéressé par l'état de mon compte bancaire et lorsque je dépose ou retire de l'argent de ma banque, je m'attends à ce que l'état de mon compte bancaire soit correctement mis à jour.
Étant donné que l'État existe dans le monde réel, quelles installations le langage de programmation devrait-il prévoir pour traiter avec l'État?
Les OOPL disent «cacher l'état au programmeur». Les états sont masqués et visibles uniquement via les fonctions d'accès. Les langages de programmation conventionnels (C, Pascal) disent que la visibilité des variables d'état est contrôlée par les règles de portée du langage. Les langages déclaratifs purs disent qu'il n'y a pas d'État. L'état global du système est appliqué à toutes les fonctions et ressort de toutes les fonctions. Des mécanismes comme les monades (pour les FPL) et les DCG (langages logiques) sont utilisés pour cacher l'état au programmeur afin qu'ils puissent programmer «comme si l'état n'avait pas d'importance» mais avoir un accès complet à l'état du système si cela était nécessaire.
L'option «cacher l'état au programmeur» choisie par les OOPL est le pire choix possible. Au lieu de révéler l'État et d'essayer de trouver des moyens de minimiser les nuisances de l'État, ils le cachent.
Qu'entend-on exactement par cela? J'ai très peu d'expérience de bas niveau ou de procédure, principalement OOP, ce qui explique probablement à quel point je ne suis pas familier avec cela. Et d'un point de vue plus moderne, maintenant que la plupart de l'hystérie orientée objet est passée (du moins pour autant que je sache), à quel point pensez-vous que ce passage est précis / pertinent?
Merci de votre aide.