Le pattern frigo.
Désolé pour le ton un peu con, ceci est un recyclage d'un mail auquel on ne m'a jamais répondu. :)
Imaginez deux programmeurs affamés, assoifés, luisant de sueur, ayant
fini leur dernier paquet de Duo Keks. Il est 2h30 du matin, ils
viennent de se réveiller, la nuit va être longue. Pour survivre à
cette épreuve, ils décident de lever une assemblée générale !
Ils ont un problème à résoudre, et ne peuvent le résoudre qu'ensemble.
L'un est expert en droites, l'autre en assemblage de traits. Ils se retrouvent donc
devant un frigo, armés de l'instrument le plus adéquat qui soit : un
marqueur, et ont besoin de dessiner un carré. Ils se retrouvent obligés de collaborer pour réussir, tout ça.
Ils viennent d'inventer le pattern frigo ! Dans la littérature ça
s'appelle une "blackboard architecture". Le principe est d'avoir un
certain nombre d'entités travailler sur un même espace de travaille.
La plupart des entités voient des demandes, regardent comment elles
peuvent découper le travail, puis écrivent d'autres demandes sur
l'espace de travail.
Par exemple, vous pouvez avoir dix soldats, deux chefs d'équipes, un
colonel. Chacune de ces entités est experte dans son domaine, et
résoud les problèmes qu'on lui donne efficacement (tuer, communiquer,
trouver une stratégie). Les chefs d'équipes vont suivre la stratégie
du colonel, et les soldats vont écouter leur chef d'équipe. Dans un
jeu vidéo, on a différents sous-systèmes, l'intelligence
artificielle, le système de navigation, le moteur physique, etc.
Chaque système va demander des choses sous formes d'assertions, et les
autres vont remplacer par d'autres assertions jusqu'à répondre.
Attention, ce n'est pas de la logique des prédicats avec résolution
SLD (enfin du prolog quoi) ! C'est beaucoup plus extensible et
permissif (et moins formel aussi). Les experts peuvent être des threads indépendants qui
vivent leur vie avant d'aller voir l'espace de travail, on peut aller
en avant, en arrière, et on peut avoir plusieurs stratégies possibles
en même temps. C'est suffisament intéressant et extensible pour jouer avec dans un certain nombre de situations.