По-моему, вы должны меньше концентрироваться на ОО, чем на процедурных вещах. Если у вас есть возможность пойти процедурным в начале, то иди процедурным. Это самая простая вещь, которую вы можете сделать, чтобы начать. OO, с другой стороны, может также квалифицироваться как YAGNI (вам это не нужно).
Что вы должны сделать, это написать тесты , модульные тесты, а затем интеграционные тесты. И вы должны стремиться писать тесты в первую очередь. Таким образом, даже если вы начнете с процедурного приложения, вы можете позднее преобразовать его в полноценное ОО-приложение. Но только если вам нужны предметы. Эти тесты станут вашей надежной защитой при перемещении кода в вашем приложении.
Попытка представить ваши приложения в объекте с самого начала может привести вас к точке, в которой вы застряли в иерархиях и архитектуре классов.
Я не гений, поэтому я могу ошибаться, но по моему опыту лучше начинать с простых функций, а затем думать о группировании их в объекты или модулей лучше, чем начинать словами: "ОК У меня будет этот объект, который взаимодействует с этим объектом, который реализует шаблон X, поэтому таким образом я отделю интерфейс Y от реализации Z. Позже вы можете заметить, что ваша модель предметной области слаба. Выберите эволюционный путь проектирования и начните с небольших строительных блоков.