Hãy để tôi đưa ra một ví dụ dựa trên kinh nghiệm. Hầu hết các thư viện tôi sử dụng hàng ngày đều sử dụng OOP theo một cách nào đó. OOP có thể che giấu sự phức tạp cần thiết cho nhiều tên miền, nó không phải là một cơ chế thực sự giúp ích cho hiệu suất. Điều có thể xảy ra là một thư viện có thể sử dụng các tối ưu hóa cụ thể dựa trên hệ thống phân cấp đối tượng, nhưng phần lớn là về việc che giấu sự phức tạp từ người dùng. Tra cứu các mẫu thiết kế, chúng là các cơ chế thường được sử dụng để thực hiện việc ẩn giấu phức tạp này.
Lấy PETSc làm ví dụ. PETSc sử dụng mô hình thanh tra / thực thi của OOP trong đó bất kỳ thuật toán nào của nó nhìn vào các thói quen có sẵn trong một đối tượng nhất định, sẽ chọn cách thực hiện để thực hiện thói quen. Điều này cho phép người dùng phân tách các mối quan tâm, ví dụ hành động ma trận có thể bao gồm bất kỳ loại thói quen bị chặn hoặc tối ưu hóa nào và được sử dụng hiệu quả bởi nhiều bộ giải lặp. Bằng cách cung cấp cho người dùng khả năng chỉ định các loại dữ liệu và đánh giá của riêng họ, họ có được một vài thói quen quan trọng được tăng tốc và cũng có sẵn toàn bộ chức năng của thư viện.
Một ví dụ khác tôi sẽ đưa ra là FEniCS và deal.II. Cả hai thư viện này đều sử dụng OOP để khái quát hóa qua một số lượng lớn Phương thức phần tử hữu hạn. Trong cả hai thứ từ loại phần tử, thứ tự phần tử, biểu diễn bậc hai, v.v đều có thể hoán đổi cho nhau. Mặc dù cả hai thư viện này đều "chậm" hơn một số mã FEM có cấu trúc đặc biệt, chúng có thể giải quyết nhiều vấn đề khác nhau với phần lớn sự phức tạp của FEM mà người dùng chưa biết.
Ví dụ cuối cùng của tôi là Elemental. Elemental là một thư viện đại số tuyến tính dày đặc mới gặp khó khăn trong việc quản lý các bộ truyền thông MPI và vị trí dữ liệu thành một cấu trúc ngôn ngữ rất đơn giản. Kết quả là nếu bạn có mã nối tiếp FLAME, bằng cách thay đổi kiểu dữ liệu, bạn cũng có thể có mã song song qua Elemental. Thậm chí thú vị hơn, bạn có thể chơi với phân phối dữ liệu bằng cách đặt phân phối bằng với phân phối khác.
OOP nên được coi là một cách để quản lý sự phức tạp, không phải là một mô hình để cạnh tranh với lắp ráp bằng tay. Ngoài ra, làm việc đó kém sẽ dẫn đến rất nhiều chi phí, do đó người ta phải giữ thời gian và cập nhật các cơ chế mà họ sử dụng.