Это вопрос больше философский и зависит от виденья структуры вашей программы.
Можно сделать например только каркас MVC, где будет два M,
- Где первый будет валидировать данные
- а второй производить базовые арифметические расчеты.
C будет осуществлять общую логику приложения а V итак понятно.
Итого 4 класса.
А можно например еще завернуть каждое вводимое число в класс, и напихать туда различных методов и свойств, где может быть все что угодно, от истории изменений, до количества разрядов числа.
И при этом, эти классы могут содержать другие классы, например история изменений может быть отдельным классом.
Добавить сюда также абстрактные классы.
Исходя со всего этого, выходит что классы могут встречаться на не ограничено малой величине логики, а классы отвечающие за "большие структуры", зависят от виденья структуры приложения самим программистом.