Jest to problem, który nazywam zamieszaniem „obiekt / przedmiot” i jest dość powszechny.
Zdania na ogół mają podmiot, który wykonuje czasownik na swoim obiekcie docelowym .
Jeśli chodzi o programowanie, jedyną rzeczą, która faktycznie robi rzeczy, jest komputer. Lub praktycznie proces, nić lub włókno. Obiekty nie są domyślnie animowane. Nie mają własnych wątków, więc nie mogą nic zrobić.
Oznacza to, że działają na nich metody, są one celem akcji, a nie kto ją wykonuje. Dlatego nazywamy je „przedmiotami”, a nie „podmiotami”!
Kiedy mówisz, File.close
że to nie plik sam się zamyka, to bieżący działający wątek zamyka plik. Jeśli powiesz Array.sort
, bieżący działający wątek sortuje tablicę. Jeśli powiesz HttpServer.sendRequest
, bieżący działający wątek wysyła żądanie do serwera (nie odwrotnie!). Podobnie powiedzenie PunchingBag.punch
oznacza, że bieżący wątek przebija torbę.
Oznacza to, że jeśli chcesz Boxer
być w stanie dziurkować, musi to być podklasa Thread
tak, aby mogła robić rzeczy takie jak dziurkowanie worków w funkcji wątku.
Czasami jednak sensowne jest stwierdzenie, że worek bokserski przebija się sam w przypadku, gdy każdy obiekt ma swój własny wątek, możesz chcieć uniknąć warunków wyścigu i zaimplementować wywołania metod jako przekazywanie wiadomości: przebijasz torbę, wysyłając jej punch
wiadomość, to dziurkuje wątek następnie odsyła punch successful
wiadomość, ale to tylko szczegół implementacji.