Сам ООП не сильно изменился с момента его создания. Было исследовано несколько новых ракурсов, но основные принципы остались прежними. Во всяком случае, коллективные знания, собранные за эти годы, облегчают жизнь программиста, а не усложняют ее. Шаблоны дизайна не являются помехой; они предоставляют набор инструментов для решения стандартных проблем, основанный на многолетнем опыте.
Так почему же вы воспринимаете ООП сегодня как более сложное, чем когда вы начали его использовать?
Одной из причин может быть то, что код, которому вы подвергаетесь, становится более сложным - не потому, что ООП стал более сложным, а потому, что вы продвинулись по лестнице обучения и начали читать более крупные и более сложные базы кода.
Другая причина может заключаться в том, что хотя парадигма сложности не изменилась, размер и сложность среднего программного проекта вполне могут измениться. С вычислительной мощностью, доступной на мобильных телефонах потребительского уровня, которые были бы мечтой разработчика на сервере менее двух десятилетий назад, широкая публика в основном ожидала гладкого анимированного графического интерфейса даже для самого дешевого одноразового приложения, а настольный ПК начального уровня стал более мощным чем «суперкомпьютер» 1980-х годов, вполне естественно, что планка была поднята с первых дней Smalltalk и C ++.
И еще есть факт, что в современных приложениях параллелизм и параллелизм являются скорее нормой, чем исключением, и приложениям часто приходится обмениваться данными между различными машинами, выводя и анализируя целый набор протоколов. Хотя ООП великолепна как организационная парадигма, она имеет свои ограничения, как и любая другая парадигма: например, она не обеспечивает много абстракций для параллелизма (большинство реализаций являются более или менее запоздалой мыслью или полностью передаются библиотекам) и это не самый лучший подход для построения синтаксических анализаторов и преобразования данных. Современное программирование часто сталкивается с ограничениями парадигмы ООП, и шаблоны проектирования могут только пройти вас так далеко. (Лично, Я считаю тот факт, что нам нужны шаблоны проектирования, признаком этого - если бы парадигма предоставила эти решения «из коробки», это было бы более выразительным для этих проблем, и стандартные решения были бы очевидны. Не существует шаблона проектирования для описания наследования методов, потому что это основная особенность ООП; но существует фабричный шаблон, потому что ООП не обеспечивает очевидного естественного способа полиморфного и прозрачного построения объектов.)
Из-за этого большинство современных языков ООП включают в себя функции из других парадигм, что делает их более выразительными и более мощными, но также и более сложными. C # является основным примером для этого: он имеет очевидные корни ООП, но такие функции, как делегаты, события, вывод типов, различные типы данных, атрибуты, анонимные функции, лямбда-выражения, обобщения и т. Д., Происходят из других парадигм, в частности, функционального программирования. ,