Citation :sans le formaliser, j'en avais fait en stage de dernière année (sous la forme d'un réseau neuronal où chaque noeud est un objet, qui reçoit une copie de tous les messages des autres,le traite ou non et renvoie ou non un message à tous les autres)... Eh bien avec ce genre d'approche, le "je sais ce que je veux et je te fais confiance pour le faire" est vite devenu un "je sais ce que je veux mais mon truc fais n'importe quoi".
:roll:
C'était du pure-East (sans forcément avoir mis un nom dessus).
Je maintiens (mais t'as peut-être pas fais de C++ pour le voir?) que si tu utilises A dans B, tu te trouves obligé d'au moins déclarer que A est une classe (forward declaration) avant de déclarer B (et inversement).
C'est pas la mort, mais cela rajoutes du code.
Ce qui pose soucis, c'est que chaque objet ayant une demande à faire à une classe doit (au vu du UserAskedByMachin) implique de créer une nouvelle méthode... Ou alors, de passer par une interface (Machin), que chaque demandeur doit implémenter. C'est jouable, mais cela m'a l'air de juste transferer la signature de chaque méthode dans une interface dédiée.
C'est peut-être un rappel de la POO à l'origine, mais je trouve surtout que c'est "sur-fait" car le problème est plus dans l'interprétation d'un appel de méthode ("le getter renvoie la valeur de mon attribut") que dans son utilisation ("le getter me renvoie l'âge de l'utilisateur, 'm'en fous d'où il sort: c'est ce que je veux, son âge").
Pour faire de l'OO pur sans se briser les doigts, il suffit finalement de lire les
Class::appelant { $chose = $object->methodName($parameters) }
comme
l'envoie d'un message à $object composé de l'émetteur, la méthode, les paramètres, le conteneur de résultat: {$appelant, methodName, $parameters...} puis l'arrêt de l'exécution de l'appelant, après avoir sauvé son état courant
et
Class::methodName { return $result; }
comme
Je traite le message {$appelant, methodName, $parameters...} et une fois terminé, j'envoie un message spécial au $appelant, type {$object, null, $result}. Quand $appelant reçoit ce message, il se remet dans l'état qu'il avait sauvé et récupère $result..
Perso, cela me parait bien moins prise de tête...
C'est d'ailleurs ce que l'ordinateur fait (il me semble). Bref, je n'adhère pas (que ce soit du Alan Kay ou non), car cela émule ce que la machine fait déjà intrinsèquement. Mieux vaut se contenter de bien respecter les signatures des méthodes et de ne pas les casser lors des évolutions.