Architectures algorithmique modulaire

En tant qu'ingénieur de recherche en intelligence computationelle, j'ai souvent besoin de développer des algorithmes de manière rapide. Cependant, un des problèmes récurrent dans le domaine de la recherche est qu'on ne sait jamais exactement à l'avance quel algorithme va être le plus efficace. Il est nécessaire de tester plusieurs méthodes.

Or, si vous découpez un algorithme en modules, vous avez généralement assez facilement plusieurs approches différentes pour chaque modules. La combinaison de toutes ces versions peut donc rapidement donner lieuu à un très grand nombre de versions différentes. Ce n'est pas forcément une malédiction, surtout si vous vous faites aider par un ordinateur pour tout tester automatiquement !

Framework

Cette manière de programmer un algorithme sous la forme d'une combinaison de module produit ce que l'on appelle des frameworks. Mais en pratique, comment peut-on programmer un framework de manière à se faciliter les tâches de découpage d'assemblage ? C'est la question à laquelle tente de répondre le projet « algo pattern », qui collectionne diverses architectures, dans divers langages de programmation.

Le projet montre comment assembler quatre algorithmes différents (de ceux que l'on étudie en d'ingénierie) à partir de deux versions de deux modules. Les algorithmes en questions importent peu, puisqu'on s'intéresse essentiellement à l'architecture, mais j'ai quand même fait un diagramme explicatif, qui montre que l'on a deux fonctions à remplir (les prises femelles), dans lesquelles on peut brancher des modules réalisant ces fonctions de manières différentes (les prises mâles).

Un diagramme figurant des prises électriques.

Architecture·s

Il existe, en informatique, une grammaire visuelle permettant de représenter — de manière non peu ambigue — des architectures logicielles : UML (Unified Modelling Language).

La réalisation de diagrammes UML lisibles est tout un art, plus délicat qu'il n'y parait. Ci-dessous, les principales architectures proposée dans le projet, sous cette forme. Les diagrammes sont conçus pour être les plus proches possibles, afin de faire ressortir leurs points communs et faciliter la recherche de leurs différences.

Chaque architecture a un vrai nom (plus ou moins) connu de la personne de l'art (que vous pouvez sans doute au moins chercher sur le Web).

Stratégie

Un diagramme UML du pattern « stratégie »

Politiques

Un diagramme UML du pattern « politiques »

Squelette curieusement récursif

Un diagramme UML du pattern « CRTP »

Fonctionnel

Un diagramme UML du pattern « fonctionnel »

Les sources des diagrammes sont à retrouver sur le projet algopattern.

2017-09-10