Kiedyś kiedyś miałem podobny problem, pomogło zapoznanie się z MVC. Ma to ogólnie bardzo duży sens, możesz łatwo wszystko sobie rozdzielić, przy złożonych systemach doceniłbyś to na pewno.
W każdym razie klasą może być jakieś zdarzenie, może być komenda, może być użytkownik, który ma się tworzyć, możesz mieć klasę połączenia z bazą danych, może to być kontroler. To jest problem uczenia programowania obiektowego - każdy tłumaczy to na przykładzie samochodzików, czy zwierzątek, ale gdy przychodzi zderzenie z realnym systemem, to taki biedny programista teraz zastanawia się... WTF?!
Załóżmy, że masz taki wytwór, jak klasa UsersController. Co nam mówi nazwa - no coś do kontrolowania użytkowników. Mniej więcej. W tej klasie masz metodę (funkcję) o nazwie register i taka metoda przyjmuje sobie dane użytkownika i tworzy go (abstrahując od konkretnej implementacji). Ale w tej klasie możesz mieć też metodę login, która weźmie dane usera i go zaloguje i pewnie utworzy sesję czy coś. Możesz mieć tam też metodę remove, czy update. Nazwy mówią same przez się.
Inną, bardziej techniczną sprawą jest np możliwość autoładowania klas, przestrzenie nazw itp. Nie przejmuj się, jeśli teraz nie do końca to rozumiesz. W pewnym momencie stanie się to wręcz naturalne.