ООП - это всего лишь надстройка над процедурным программированием, удешевляющая написание кода.
Разбиваем программу на независимые компоненты, каждый из которых имеет законченный замкнутый функционал. Для взаимодействия компонентов между собой в каждом компоненте создаём интерфейс: набор подпрограмм, которые можно вызывать из других компонентов.
Называем чертёж, по которому создаётся компонент, классом, сам компонент - объектом (экземпляром класса), а подпрограммы переименуем в методы и вместо процедурного "метод(объект, параметры)" будем записывать вызов в виде: "объект.метод(параметры)".
Смысл ООП в том, что каждый объект - независимый от остального кода программы "чёрный ящик", содержимое которого недоступно другим объектам. Мы можем как угодно менять код класса, но пока интерфейс остаётся неизменным, эти изменения никак не затрагивают код других классов.
Вместо сложного монолита с непредсказуемым связями между разными частями кода получаем код, собранный из независящих друг от друга простых кубиков - классов и объектов.