Esse é o problema que chamo de confusão "objeto / sujeito" e é bastante prevalente.
As frases geralmente têm um sujeito que faz o verbo em seu objeto de destino .
Agora, com relação à programação, a única coisa que realmente faz as coisas é o computador. Ou virtualmente um processo, fio ou fibra. Os objetos não são animados por padrão. Eles não têm seus próprios threads em execução, então não podem realmente fazer nada.
Isso significa que os métodos operam neles, eles são o alvo da ação e não quem a executa. É por isso que os chamamos de "objetos" e não de "sujeitos"!
Quando você diz File.closeque não é o arquivo que se fecha, é o thread em execução atual que fecha o arquivo. Se você disser Array.sort, o segmento em execução atual classifica a matriz. Se você diz HttpServer.sendRequest, o encadeamento em execução atual envia a solicitação ao servidor (não vice-versa!). Da mesma forma, dizer PunchingBag.punchsignifica que o fio de corrida atual perfura a bolsa.
Isso significa que, se você deseja Boxerperfurar, deve ser uma subclasse de um Threadpara que possa executar ações como sacos de perfuração em sua função de rosca.
No entanto, às vezes também faz sentido dizer que o saco de pancadas se perfura no caso em que cada objeto tem seu próprio encadeamento. Você pode evitar condições de corrida e implementar chamadas de método como passagem de mensagem: você perfura o saco enviando a punchmensagem, são perfurações no encadeamento ele envia a punch successfulmensagem de volta , mas isso é apenas um detalhe de implementação.