On entend souvent que la POO correspond naturellement à la façon dont les gens perçoivent le monde. Mais je suis tout à fait en désaccord avec cette affirmation: nous (ou du moins je) conceptualisons le monde en termes de relations entre les choses que nous rencontrons, mais l'objectif de la programmation orientée objet est de concevoir des classes individuelles et leurs hiérarchies.
Notez que, dans la vie quotidienne, les relations et les actions existent principalement entre des objets qui auraient été des instances de classes non liées dans la POO. Des exemples de telles relations sont: "mon écran est au-dessus de la table"; "Je (un être humain) est assis sur une chaise"; "une voiture est sur la route"; "Je tape sur le clavier"; "la machine à café fait bouillir de l'eau", "le texte est affiché dans la fenêtre du terminal."
Nous pensons en termes de verbes bivalents (parfois trivalents, comme par exemple dans "je vous ai donné des fleurs") où le verbe est l'action (relation) qui agit sur deux objets pour produire un résultat / action. L' accent est mis sur l'action et les deux (ou trois) objets [grammaticaux] ont la même importance.
Comparez cela à la POO où vous devez d’abord trouver un objet (nom) et lui dire d’exécuter une action sur un autre objet. La façon de penser passe des actions / verbes opérant sur les noms à des noms opérant sur des noms - c'est comme si tout était dit à la voix passive ou réfléchie, par exemple, "le texte est affiché par la fenêtre du terminal". Ou peut-être "le texte se dessine sur la fenêtre du terminal".
Non seulement l'attention est déplacée vers les noms, mais l'un des noms (appelons-le sujet grammatical) a une "importance" supérieure à l'autre (objet grammatical). Ainsi, il faut décider si on va dire terminalWindow.show (someText) ou someText.show (terminalWindow). Mais pourquoi encombrer les gens de décisions aussi triviales sans conséquences opérationnelles alors qu’on entend vraiment montrer (terminalWindow, someText)? [Les conséquences sont insignifiantes sur le plan opérationnel - dans les deux cas, le texte est affiché sur la fenêtre du terminal - mais peuvent être très sérieuses dans la conception des hiérarchies de classes et un "mauvais" choix peut conduire à un code compliqué et difficile à maintenir.]
Je dirais donc que la façon habituelle de faire de la programmation orientée objet (classe unique, envoi unique) est difficile car elle n’EST PAS NATURELLE et ne correspond pas à la façon dont les humains perçoivent le monde. Les méthodes génériques de CLOS sont plus proches de ma façon de penser, mais hélas, cette approche n’est pas généralisée.
Compte tenu de ces problèmes, comment et pourquoi est-il arrivé que la manière traditionnelle de faire de la programmation orientée objet soit devenue si populaire? Et que peut-on faire, le cas échéant, pour le détrôner?