Ответ 1
Все зависит от проблемы, которую вы пытаетесь решить. Очевидно, что вы можете решить любую проблему в любом стиле (процедурный или OO), но обычно вы можете понять на этапах планирования, прежде чем начинать писать код, который подходит вам лучше.
Некоторым людям нравится писать примеры использования, и если они видят много одинаковых существительных, появляющихся снова и снова (например, человек снимает деньги с банка), то они идут по маршруту OO и используют существительные как их объектов. И наоборот, если вы не видите много существительных и там действительно больше глаголов, то процедурный или функциональный может быть способ пойти.
Стив Йегге имеет отличный, но длинный пост, как обычно, который затрагивает это с другой точки зрения, которая также может оказаться полезной.