Сам OOP мало змінився з моменту заснування. Досліджено декілька нових ракурсів, але основні принципи все одно ті ж. Якщо що, колективні знання, зібрані роками, полегшують життя програміста, а не важче. Шаблони дизайну не є перешкодою; вони надають набір інструментів для вирішення стандартних проблем, вигнаних з років і років досвіду.
То чому ж ви сьогодні сприймаєте OOP як складніший, ніж коли ви почали його використовувати?
Однією з причин може бути те, що код, якому ви піддаєтеся, стає складнішим - не тому, що OOP став складнішим, а тому, що ви просунулися на сходах для навчання, і отримаєте можливість читати більші та складні бази коду.
Ще одна причина може полягати в тому, що, хоча парадигма складності не змінилася, розмір і складність середнього програмного проекту, можливо, цілком є. Маючи потужність обробки на мобільних телефонах класу клієнтів, які були б мокрою мрією розробника на сервері менше двох десятиліть тому, широка громадськість, в основному, очікувала, що гладкі анімовані графічні інтерфейси користуються навіть найдешевшим додатком для викиду, а настільний ПК початкового рівня буде більш потужним ніж "суперкомп'ютер" 1980-х років, цілком природно, що планка була піднята з перших днів Smalltalk та C ++.
І тут є той факт, що в сучасних додатках паралельність і паралелізм - це норма, а не виняток, і програмам часто потрібно спілкуватися між різними машинами, виводячи і аналізуючи цілий зоопарк протоколів. Хоча OOP є чудовою організаційною парадигмою, вона має свої обмеження, як і будь-яка інша парадигма: наприклад, вона не дає великої абстракції для одночасності (більшість реалізацій є більш-менш задумливою або повністю передаються бібліотекам) , і це не найкращий підхід для створення аналізаторів та перетворення даних. Сучасне програмування часто стикається з обмеженнями парадигми OOP, а шаблони дизайну можуть зайняти вас лише поки. (Особисто, Я вважаю той факт, що нам потрібні шаблони дизайну як ознака цього - якби парадигма забезпечувала це рішення поза рамками, це було б більш виразним для цих проблем, а стандартні рішення були б очевидні. Не існує структури дизайну, яка б описувала успадкування методу, оскільки це основна особливість OOP; але є заводський зразок, оскільки OOP не забезпечує очевидний природний спосіб побудови об'єктів поліморфно та прозоро.)
Через це більшість сучасних мов OOP містять функції інших парадигм, що робить їх більш виразними та потужнішими, але й складнішими. C # - це головний приклад для цього: він має очевидні корені OOP, але такі функції, як делегати, події, умовиводи типу, варіанти типів даних, атрибути, анонімні функції, лямбда-вирази, дженерики тощо, походять з інших парадигм, особливо функціонального програмування .