Выражение задачи через ООП требуют вдумчивости и основательности. При этом всякие экспериментальные итерации в виде кавалерийских наскоков имеют обыкновение разрастаться, ну а потом лень и сроки, и переписывать надо иерархию в целом а не отдельные куски. Либо интерфейс не выдерживает столкновения с реальностью, хорошо если достаточно просто дополнить, а если переделывать?. Ну и опять лень & сроки. ООП добавляет трудностей тем, что в целом.
Собственно как правило все как-то работает и ООП этому способствует, но выглядит так не идеально, что хочется переписать, а переписывать   много, а оно еще и  работает.
Вообщем как-то так.