На Хабре хорошая статья о недостатках ООП: Жизнь без объектов. Если резюмировать, то за надцать лет развития объектно-ориентированного программирования не были решены родовые проблемы казавшейся универсальной технологии, а именно:
- Бизнес-компоненты использовать повторно можно только в той же самой доменной области, т.е. использовать их может только разработчик, пока работает на своих процессах
- Паттерны не только не упрощают код, но даже усложняют его сверх меры и делают нечитаемым, если использовать неразумно
- Универсальные библиотеки классов избыточны и сложны в освоении
- Любое изменение в базовом классе может непредсказуемо повлиять на поведение дочерних классов, и даже сделать их неработоспособными. Чем глубже иерархия наследования, тем более хрупкий код получается
- Инкапсуляция почти всегда нарушается, так как нам нужно получать доступ ко всем данным объекта
- Непрерывное изменение состояние объекта влечет проблемы отладки