Не везде и не всегда нужны классы. Прежде чем принять решение о том, что в конкретном месте кода класс только вредит, нужен профайлер или другие инструменты позволяющие принять такое решение. К примеру в Python словарь значительно выигрывает по скорости чем класс с методами.
Фишка ООП в том, что человек уже думает классами! Поднимаем голову к небу и видим «Птица летит», другими словами «У объекта «Птица» был вызван метод «Лететь»», но мы так сложно не думаем и для нас это просто «Летящая птица».
Вспомните детство и моменты когда родители посылали за хлебом. Как это происходило? Возможно это было так: «Объект сын в твое поле ложу объект «Задача» с полями «хлеб», «комод» и «100 рублей», в поле «результат» ложу «Хлеб». Объект сын вызываю метод «Купить»». Не думаю что это было так, мне кажется это было так: «Сын возьми 100 рублей и купи хлеба». В неявном виде обратились к объекту «Сын», вызвали метод «Взять» и передали аргумент «100 рублей» и ожидаем результат вызова в виде значения «Хлеб».
Попробуйте процедурный подход переложить в нашу естественную жизнь? 😉 Попробуйте так общаться, процедурно. Это очень сложно. Потому что человек привык думать объектами! Самолет, кошка, лошадь, дерево и др. Для нас вроде есть концепция «кошка», но конкретная кошка «Масяня» сильно отличается от другой конкретной кошки «Машка».
Изучая задачу мы прежде всего должны задать вопрос : «Что является условием завершения задачи?» и вторым не менее важным «Что используется при достижении результата?». Вот это «что используется» как правило и есть объекты.