Permettez-moi de donner un exemple basé sur l'expérience. La plupart des bibliothèques que j'utilise quotidiennement utilisent la POO d'une manière ou d'une autre. La POO est capable de masquer la complexité requise pour de nombreux domaines, ce n'est pas un mécanisme qui contribue vraiment aux performances. Ce qui peut arriver, c'est qu'une bibliothèque est capable d'utiliser des optimisations spécifiques basées sur la hiérarchie des objets, mais pour l'essentiel, il s'agit de cacher la complexité à l'utilisateur. Recherchez les modèles de conception, ce sont les mécanismes souvent utilisés pour accomplir cette complexité.
Prenons l'exemple de PETSc. PETSc utilise un modèle inspecteur / exécuteur de POO dans lequel l'un de ses algorithmes examine les routines disponibles dans un objet donné et choisit celui à exécuter pour accomplir la routine. Cela permet à un utilisateur de séparer les préoccupations, par exemple l'action de la matrice peut inclure n'importe quel type de routine bloquée ou optimisée et être efficacement utilisée par de nombreux solveurs itératifs. En donnant à l'utilisateur la possibilité de spécifier ses propres types de données et évaluations, il obtient quelques routines importantes accélérées et dispose également de toutes les fonctionnalités de la bibliothèque.
Un autre exemple que je vais vous donner est FEniCS et deal.II. Ces deux bibliothèques utilisent la POO pour généraliser sur un grand nombre de méthodes par éléments finis. Dans les deux cas, le type d'élément, l'ordre des éléments, la représentation en quadrature, etc. sont interchangeables. Bien que ces deux bibliothèques soient "plus lentes" que certains codes FEM structurés à des fins spéciales, elles sont capables de résoudre une grande variété de problèmes avec une grande partie de la complexité de FEM inconnue de l'utilisateur.
Mon dernier exemple est Elemental. Elemental est une nouvelle bibliothèque d'algèbre linéaire dense qui a pris la difficulté de gérer les communicateurs MPI et l'emplacement des données dans une construction de langage très simple. Le résultat est que si vous avez un code série FLAME, en changeant les types de données, vous pouvez également avoir un code parallèle via Elemental. Encore plus intéressant, vous pouvez jouer avec la distribution des données en définissant une distribution égale à une autre.
La POO doit être considérée comme un moyen de gérer la complexité, et non comme un paradigme pour concurrencer l'assemblage roulé à la main. Le fait de le faire mal entraînera également beaucoup de frais généraux, il faut donc continuer à synchroniser et à mettre à jour les mécanismes avec lesquels il l'utilise.