C'est le problème que j'appelle la confusion "objet / sujet" et il est assez répandu.
Les phrases ont généralement un sujet qui fait le verbe sur leur objet cible .
Maintenant, en ce qui concerne la programmation, la seule chose qui fait vraiment les choses est l'ordinateur. Ou pratiquement un processus, un fil ou une fibre. Les objets ne sont pas animés par défaut. Ils n'ont pas leurs propres threads en cours d'exécution, ils ne peuvent donc vraiment rien faire.
Cela signifie que les méthodes opèrent sur elles, elles sont la cible de l'action et non pas qui fait l'action. C'est pourquoi nous les appelons «objets» et non «sujets»!
Lorsque vous dites que File.closece n'est pas le fichier qui se ferme, c'est le thread en cours d'exécution qui ferme le fichier. Si vous dites Array.sort, le thread en cours d'exécution trie le tableau. Si vous dites HttpServer.sendRequest, le thread en cours d'exécution envoie la requête au serveur (et non l'inverse!). Dire de la même façon PunchingBag.punchsignifie que le fil en cours d'exécution frappe le sac.
Cela signifie que si vous voulez que le Boxerpoinçon puisse poinçonner, il doit s'agir d'une sous-classe d'un Threadafin qu'il puisse faire des choses comme des sacs de boxe dans sa fonction de fil.
Cependant, parfois, il est également logique de dire que le sac de boxe se frappe lui-même dans le cas où chaque objet a son propre thread, vous souhaiterez peut-être éviter les conditions de concurrence et implémenter des appels de méthode lors du passage du message: vous perforez le sac en lui envoyant le punchmessage, ce sont des threads lui-même vous renvoie alors le punch successfulmessage, mais ce n'est qu'un détail d'implémentation.