Дозвольте навести приклад на основі досвіду. Більшість бібліотек, якими я користуюся щодня, користуються OOP певним чином. OOP здатний приховати складність, необхідну для багатьох доменів, це не механізм, який справді допомагає в продуктивності. Що може статися, це те, що бібліотека здатна використовувати конкретні оптимізації на основі ієрархії об'єктів, але здебільшого йдеться про приховування складності від користувача. Знайдіть шаблони дизайну, вони є механізмами, які часто використовуються для досягнення цієї складності.
Візьміть PETSc як приклад. PETSc використовує модель інспектора / виконавця OOP, де будь-який з його алгоритмів розглядає наявні підпрограми в заданому об'єкті і вибирає, який слід виконати для виконання розпорядок. Це дозволяє користувачеві відокремити проблеми, наприклад, дія матриці може включати будь-який тип заблокованої або оптимізованої програми та бути ефективно використаною численними ітераційними рішеннями. Надаючи користувачеві можливість вказувати власні типи даних та оцінки, вони отримують кілька важливих процедур, а також мають функціональність усієї бібліотеки.
Ще один приклад, який я наведу - це FEniCS і deal.II. Обидві ці бібліотеки використовують OOP для узагальнення за великою кількістю методів Кінцевих елементів. І в обох, і від типу елементів, і порядок елементів, і квадратура, і так далі є взаємозамінним. Незважаючи на те, що обидві ці бібліотеки "повільніші", ніж деякі спеціалізовані структуровані коди FEM, вони здатні вирішувати широкий спектр проблем із значною складністю FEM, невідомою користувачеві.
Мій останній приклад - «Елементаль». Elemental - це нова щільна лінійна бібліотека алгебри, яка сприйняла труднощі в управлінні комунікаторами MPI та розташуванням даних дуже простою мовною конструкцією. Результат полягає в тому, що якщо у вас є серійний код FLAME, змінюючи типи даних, ви також можете мати паралельний код через Elemental. Ще цікавіше ви можете пограти з розподілом даних, встановивши розподіл, рівний іншому.
OOP слід розглядати як спосіб управління складністю, а не парадигму конкуренції з ручним прокатом. Крім того, якщо це зробити погано, це призведе до великих витрат, тому потрібно тримати час та оновлювати механізми, якими вони користуються.