Questo è il problema che chiamo confusione "oggetto / soggetto" ed è abbastanza diffuso.
Le frasi generalmente hanno un soggetto che fa il verbo sul loro oggetto target .
Ora, per quanto riguarda la programmazione, l'unica cosa che effettivamente fa le cose è il computer. O praticamente un processo, filo o fibra. Gli oggetti non sono animati per impostazione predefinita. Non hanno i loro thread in esecuzione, quindi non possono davvero fare nulla.
Questo significa che i metodi operano su di essi, sono il bersaglio dell'azione e non chi fa l'azione. Ecco perché li chiamiamo "oggetti" non "soggetti"!
Quando dici File.close
che non è il file a chiudersi da solo, è il thread attualmente in esecuzione a chiudere il file. Se dici Array.sort
, il thread corrente corrente ordina l'array. Se dici HttpServer.sendRequest
, l'attuale thread in esecuzione invia la richiesta al server (non viceversa!). Allo stesso modo dire che PunchingBag.punch
significa che il filo in esecuzione corrente perfora il sacco.
Questo significa che se vuoi Boxer
che sia in grado di dare un pugno, allora deve essere una sottoclasse di un Thread
modo che possa fare cose come i sacchi da boxe nella sua funzione thread.
Tuttavia a volte ha anche senso dire che il sacco da boxe si punzona nel caso in cui ogni oggetto abbia il proprio thread, potresti voler evitare le condizioni di gara e implementare le chiamate di metodo come passaggio del messaggio: dai un pugno al sacco inviandolo il punch
messaggio, è un punch al thread stesso quindi ti restituisce il punch successful
messaggio, ma questo è solo un dettaglio di implementazione.