Questo è il problema che io chiamo "oggetto / soggetto" ed è piuttosto diffuso.
Le frasi generalmente hanno un soggetto che fa il verbo sul loro oggetto di destinazione.
Ora, per quanto riguarda la programmazione, l'unica cosa che fa realmente le cose è il computer. O praticamente un processo, un filo o una fibra.
Gli oggetti non sono animati per impostazione predefinita. Non hanno i loro thread in esecuzione, quindi non possono fare nulla.
Ciò significa che i metodi operano su di essi, sono il bersaglio dell'azione e non chi fa l'azione. Ecco perché li chiamiamo "oggetti" e non "soggetti"!
Quando dici File.close
non è il file che si chiude da solo, è il thread corrente che chiude il file.
Se dici Array.sort
, il corrente thread corrente ordina l'array.
Se dici HttpServer.sendRequest
, il thread corrente invia la richiesta al server (non viceversa!).
Allo stesso modo, PunchingBag.punch
significa che il thread corrente sta perforando il sacchetto.
Questo significa che se vuoi che Boxer
sia in grado di perforare, allora deve essere una sottoclasse di Thread
in modo che possa fare cose come la punzonatura delle borse nella sua funzione thread.
Tuttavia a volte è anche sensato dire che il sacco da pugni si presta da solo nel caso in cui ogni oggetto abbia il proprio filo, si potrebbe desiderare di evitare le condizioni di gara e implementare le chiamate di metodo come messaggio che passa: si colpisce il sacchetto inviandolo il punch
messaggio, è il thread punch in sé e poi ti rimanda il messaggio punch successful
, ma questo è solo un dettaglio di implementazione.