зачем, а главное - когда следует использовать классы, а когда достаточно будет написать несколько простых функций.
Зачем - здесь уже ответили, ради структурирования кода и упрощения поддержки, масштабируемости и автоматизированного тестирования.
Когда - если вы пилите свой проект, то тогда, когда почувствуете что вам это нужно. Когда поймете, что процедурный код не можете удержать в голове. Тогда вы полностью перепишите свой код в ООП стиле и у вас не будет больше возникать таких вопросов. Естественно, если у вас маленький проект, который умещается в несколько процедур, то вы к этому не прийдете, но так там оно и не нужно.
А вот если вы работаете в команде, то уже имеющаяся кодовая база вам всё покажет. Сложно писать процедурно часть проекта построенного на ООП.