Permítanme dar un ejemplo basado en la experiencia. La mayoría de las bibliotecas que uso a diario usan OOP de alguna manera. OOP puede ocultar la complejidad requerida para muchos dominios, no es un mecanismo que realmente ayude con el rendimiento. Lo que puede suceder es que una biblioteca pueda usar optimizaciones específicas basadas en la jerarquía de objetos, pero en su mayor parte se trata de ocultar la complejidad del usuario. Busque patrones de diseño, son los mecanismos a menudo empleados para lograr esta ocultación de complejidad.
Tome PETSc como ejemplo. PETSc utiliza un modelo de inspector / ejecutor de programación orientada a objetos, donde cualquiera de sus miradas algoritmos en las rutinas disponibles en un objeto dado un elige que desea ejecutar para llevar a cabo la rutina. Esto permite que un usuario separe las preocupaciones, por ejemplo, la acción de la matriz puede incluir cualquier tipo de rutina bloqueada u optimizada y puede ser utilizada efectivamente por numerosos solucionadores iterativos. Al darle al usuario la capacidad de especificar sus propios tipos de datos y evaluaciones, obtiene algunas rutinas importantes aceleradas y también tiene toda la funcionalidad de la biblioteca aún disponible.
Otro ejemplo que daré es FEniCS y deal.II. Ambas bibliotecas usan OOP para generalizar sobre una gran cantidad de métodos de elementos finitos. En ambos, todo, desde el tipo de elemento, el orden del elemento, la representación en cuadratura, etc., es intercambiable. Si bien estas dos bibliotecas son "más lento" que algunos códigos FEMENINO estructurado para propósitos especiales, que son capaces de resolver una amplia variedad de problemas con gran parte de la complejidad de FEM desconocido para el usuario.
Mi último ejemplo es elemental. Elemental es una nueva biblioteca de álgebra lineal densa que ha llevado la dificultad de administrar los comunicadores MPI y la ubicación de datos a una construcción de lenguaje muy simple. El resultado es que si tiene un código de serie FLAME, al cambiar los tipos de datos también puede tener un código paralelo a través de Elemental. Aún más interesante se puede jugar con la distribución de datos mediante el establecimiento de la distribución igual a otro.
Programación orientada a objetos debe ser considerado como una forma de gestionar la complejidad, no es un paradigma para competir con la mano laminado montaje. También lo hace mal dará lugar a un montón de gastos generales por lo tanto hay que tener tiempo y la actualización de los mecanismos que usan con.