Izinkan saya memberi contoh berdasarkan pengalaman. Sebagian besar perpustakaan yang saya gunakan dari hari ke hari menggunakan OOP dalam beberapa cara. OOP mampu menyembunyikan kompleksitas yang diperlukan untuk banyak domain, ini bukan mekanisme yang sangat membantu kinerja. Apa yang bisa terjadi adalah bahwa perpustakaan dapat menggunakan optimasi tertentu berdasarkan hirarki objek, tetapi sebagian besar adalah tentang menyembunyikan kompleksitas dari pengguna. Lihat Pola Desain, mereka adalah mekanisme yang sering digunakan untuk mencapai kompleksitas bersembunyi ini.
Ambil PETSc sebagai contoh. PETSc menggunakan model inspektur / pelaksana OOP di mana setiap algoritmanya melihat rutinitas yang tersedia di objek tertentu dan memilih yang akan dieksekusi untuk menyelesaikan rutin. Hal ini memungkinkan pengguna untuk memisahkan masalah, misalnya tindakan matriks dapat mencakup segala jenis rutin yang diblokir atau dioptimalkan dan secara efektif digunakan oleh banyak pemecah iteratif. Dengan memberikan pengguna kemampuan untuk menentukan tipe data dan evaluasi mereka sendiri, mereka mendapatkan beberapa rutinitas penting dan juga memiliki seluruh fungsi perpustakaan masih tersedia.
Contoh lain yang akan saya berikan adalah FEniCS dan deal.II. Kedua perpustakaan ini menggunakan OOP untuk menggeneralisasi sejumlah besar Metode Elemen Hingga. Dalam segala hal mulai dari jenis elemen, urutan elemen, representasi quadrature, dan sebagainya dapat dipertukarkan. Walaupun kedua pustaka ini "lebih lambat" daripada beberapa kode FEM terstruktur dengan tujuan khusus, mereka mampu menyelesaikan berbagai masalah dengan banyak kompleksitas FEM yang tidak diketahui pengguna.
Contoh terakhir saya adalah Elemental. Elemental adalah perpustakaan aljabar linear padat baru yang telah mengambil kesulitan mengelola komunikator MPI dan lokasi data ke konstruksi bahasa yang sangat sederhana. Hasilnya adalah bahwa jika Anda memiliki kode serial FLAME, dengan mengubah tipe data Anda juga dapat memiliki kode paralel melalui Elemental. Yang lebih menarik Anda bisa bermain dengan distribusi data dengan mengatur distribusi yang sama dengan yang lain.
OOP harus dianggap sebagai cara untuk mengelola kompleksitas, bukan paradigma untuk bersaing dengan perakitan linting tangan. Juga melakukannya dengan buruk akan menghasilkan banyak overhead sehingga seseorang harus menjaga waktu dan memperbarui mekanisme yang mereka gunakan.