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.close
ce 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.punch
signifie que le fil en cours d'exécution frappe le sac.
Cela signifie que si vous voulez que le Boxer
poinçon puisse poinçonner, il doit s'agir d'une sous-classe d'un Thread
afin 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 punch
message, ce sont des threads lui-même vous renvoie alors le punch successful
message, mais ce n'est qu'un détail d'implémentation.