Podam przykład oparty na doświadczeniu. Większość bibliotek, z których korzystam na co dzień, korzysta w pewien sposób z OOP. OOP jest w stanie ukryć złożoność wymaganą dla wielu domen, nie jest to mechanizm, który naprawdę pomaga w wydajności. Może się zdarzyć, że biblioteka będzie w stanie wykorzystywać określone optymalizacje oparte na hierarchii obiektów, ale w większości chodzi o ukrywanie złożoności przed użytkownikiem. Spójrz w górę Wzory projektowe, są to mechanizmy często stosowane w celu ukrycia tej złożoności.
Weźmy PETSc jako przykład. PETSc wykorzystuje model inspektora / modułu wykonawczego OOP, w którym dowolny z jego algorytmów analizuje dostępne procedury w danym obiekcie i wybiera, które wykonać, aby wykonać procedurę. Pozwala to użytkownikowi rozdzielić problemy, na przykład działanie matrycy może obejmować dowolny rodzaj zablokowanej lub zoptymalizowanej procedury i może być skutecznie wykorzystywane przez wiele iteracyjnych solverów. Dając użytkownikowi możliwość określania własnych typów danych i ocen, przyspiesza kilka ważnych procedur, a także udostępnia całą funkcjonalność biblioteki.
Innym przykładem, który podam, jest FEniCS i deal.II. Obie biblioteki używają OOP do uogólnienia na dużą liczbę metod elementów skończonych. Zarówno wszystko, od typu elementu, kolejności elementów, reprezentacji kwadratury itp. Jest wymienne. Chociaż obie te biblioteki są „wolniejsze” niż niektóre kody FEM o specjalnej strukturze, są w stanie rozwiązać wiele różnych problemów przy dużej złożoności MES nieznanej użytkownikowi.
Mój ostatni przykład to Żywiołak. Elemental to nowa gęsta biblioteka algebry liniowej, która podniosła trudność zarządzania komunikatorami MPI i lokalizacją danych w bardzo prostej konstrukcji językowej. W rezultacie, jeśli masz kod szeregowy FLAME, zmieniając typy danych, możesz również mieć kod równoległy za pośrednictwem elementu. Jeszcze bardziej interesujące możesz grać z dystrybucją danych, ustawiając dystrybucję równą innej.
OOP należy traktować jako sposób zarządzania złożonością, a nie paradygmat konkurowania z ręcznym walcowaniem. Również robienie tego źle spowoduje dużo narzutu, dlatego należy stale mierzyć czas i aktualizować mechanizmy, z których korzystają.