На какие логические классы стоит разбить простой калькулятор с точки зрения ООП?
Ну, не зная, что ты там понаписал, так и не скажешь.

Если есть вычисление сложных выражений, логично выделить  Tokenizer(разбивает строку на токены) Parser(осуществляет синтаксический разбор выражения, представленного в виде списка токенов), Calculator (вычисляет разобранное синтаксически верное выражение, например, с помощью польской инверсной записи).

Если есть интерактив(ввод/вывод на консоль, окна), имеет смысл сделать MVP или MVC.
У вас всего 4 действия, поэтому можно сделать классы App (в нем метод main для запуска приложения и получения строки с консоли), Parser класс чтобы «разобрать» строку на аргументы и оператор (матем.действие), и последний класс Calculator (принимает аргументы и матем. оператор), выполняет действия и выводит результат.