Однак останнім часом світ програмного забезпечення, схоже, нахиляється на користь інших парадигм, таких як функціональне програмування.
Це дискусійно. По-перше, я не бачу жодних інших парадигм, крім OOP та функціонального програмування, які обговорюються в цілому, тому, мабуть, ми можемо забути фразу "інші парадигми на зразок" , давайте поговоримо про FP, нічого іншого.
Причини, через які функціональне програмування стало настільки популярним протягом останніх років, були обговорені в інших питаннях тут глибоко, я не збираюсь повторювати це (див. , Наприклад, тут чи тут ). Але, на мою думку, це не тому, що "OOP була великою помилкою", або "Функціональна проти OOP взаємно виключають", це більше схоже на те, що люди розширюють свою панель інструментів і намагаються отримати найкраще з обох світів. Гаразд, є напевно експерти, які є хардлайнерами, які віддають перевагу один одному, але ви знайдете цих хлопців з обох сторін.
Мене змушує задуматися, що з інкапсуляцією та іншими принципами OOP? Вони помиляються?
Інкапсуляція має багато різних ароматів. Мови функціонального програмування та мовні конструкції забезпечують певні форми інкапсуляції, об'єктно-орієнтовані інші. Якщо ви шукаєте приклади інкапсуляції з функціональними засобами, почніть з закриття .
Щодо "інших принципів": ні, вони не помиляються, але для певних сценаріїв, таких як паралелізація високих масштабів, функціональні підходи, ймовірно, краще масштабуються. Для інших сценаріїв, таких як створення добре розроблених фреймворків інтерфейсу, OOP наближається до шкали кращого (YMMV, я не просто маю кращого прикладу під рукою). Більше того, я впевнений, що для більшості реальних сценаріїв від того, наскільки добре буде масштабуватися певна система, залежить знання та досвід команди та її улюблена парадигма програмування.
Хіба що OOP застосовується неправильно? Наприклад, Алан Кей відзначається тим, що говорить в основній записці OOPSLA'97: "Я винайшов термін, орієнтований на об'єкт, і можу сказати вам, що я не мав на увазі C ++".
Безумовно, OOP часто застосовується неправильно багатьма людьми, але я впевнений, що це стосується і FP. І я був би здивований, якби Джон Мак Керті (дизайнер Lisp) мав на увазі щось на кшталт Javascript, коли він думав про функціональне програмування (пощади мені, не плач мені занадто сильно для цього порівняння ;-)
Джо Армстронг - "Об'єкти пов'язують функції та структури даних разом у нероздільних одиницях. Я думаю, що це принципова помилка, оскільки функції та структури даних належать до абсолютно різних світів".
Я думаю, що у винахідника Ерланга є хороші аргументи, але він також має свою власну точку зору, тому дозвольте йому свою думку і побудуйте свою власну. Є багато інших експертів, які мають інше уявлення про це.