Я думаю, что это требует много практики.
Некоторые люди здесь говорят: ООП моделирует объекты реального мира. Но это то, что они обычно говорят вам и в школе, и, как я понимаю из ОП, это действительно было не так полезно.
Когда я смотрю на свой код, я вижу, что он перегружен всеми видами объектов, которые абсолютно не имеют представлений реального мира: средства отображения баз данных, фабрики объектов, построители выражений и т. Д. Они могут звучать как объекты реального мира, но на самом деле они ничто лайк. Это просто абстракции, которые помогают нам управлять всей сложностью программы.
Я думаю, что главная сложная часть ООП - именно это. Вы не можете просто посмотреть на свою проблемную область, которая, например, имеет дело с автомобилями, и сказать: я знаю, мне нужен класс автомобилей! Даже если вам нужен класс автомобилей, это знание не поможет вам решить, что на самом деле в него положено. Очевидно, что вы не можете просто поместить все сто тысяч функций, которые имеют дело с автомобилями, в один класс. Так как тебе это удается? Как это нарезать? В чем должна быть ответственность класса автомобилей? Кто также должен знать о классе автомобилей? Это трудные вопросы, на которые никто, кроме самого автора программы, не может ответить. И даже самые опытные в первый раз редко отвечают на все вопросы.
Но я думаю, что есть несколько общих хороших принципов ООП, которым нужно следовать. Держите соединение между объектами как можно ниже. Следуйте закону Деметры . Следует помнить о принципах SOLID . Но самое главное: сохраняйте его СУХОЙ до конца.
Дополнительно: Не ограничивайте себя объектно-ориентированным подходом. Изучите функциональное программирование, регулярные выражения, конструкцию компилятора, язык ассемблера и столько разных языков более высокого уровня, сколько сможете управлять - знание только ООП не сделает вас хорошим программистом, но изучение всех этих различных подходов и инструментов позволит вам стоит взглянуть на ООП с более четкой точки зрения, что позволит глубже понять, о чем на самом деле эта ООП-вещь.