Некоторые причины, по которым объектно-ориентированное программирование (ООП) критикуют за сложность и медленную компиляцию:
Сложность:
- Переусложнение архитектуры приложения. 3 Разработчики могут создавать слишком сложные иерархии классов и избыточные абстракции, что делает код трудным для понимания и поддержки. 3
- Проблема хрупкости базового класса. 1 На поздних этапах разработки, когда иерархия классов построена и на её основе разработано большое количество кода, трудно или даже невозможно внести какие-либо изменения в код базовых классов иерархии. 1
- Недетерминированный код. 4 Нет гарантий в получении одинакового вывода при одинаковых входных данных. 4 Это делает анализ программы очень сложным. 4
Медленная компиляция:
- Динамическое связывание методов. 1 Определять, какой конкретно метод будет вызываться, приходится не на этапе компиляции, а в процессе исполнения программы, на что тратится дополнительное время. 1
- Значительная глубина абстракции. 1 ООП-разработка часто приводит к созданию «многослойных» приложений, где выполнение объектом требуемого действия сводится к множеству обращений к объектам более низкого уровня. 1 В таком приложении происходит очень много вызовов методов и возвратов из методов, что сказывается на производительности. 1
- Инкапсуляция снижает скорость доступа к данным. 1 Запрет на прямой доступ к полям класса извне приводит к необходимости создания и использования методов доступа. 1 И написание, и компиляция, и исполнение методов доступа сопряжены с дополнительными расходами. 1
Однако стоит отметить, что многие эффекты снижения производительности могут сглаживаться или даже полностью устраняться за счёт качественной оптимизации кода компилятором. 1