En gros, une stratégie, c'est un moyen de spécifier, en composant des opérateurs élémentaires (All, One, Sequence...) et un opérateur de récursion, des traversées d'arbre.
On peut voir ça comme une version étendue du patron de conception "visiteur".
L'intéret ici est que contrairement au visiteur, qui impose soit de choisir une fois pour toutes la stratégie de parcours (des feuilles à la racine, de la racine aux feuilles), soit de coder dans chaque visiteur une stratégie de parcours, la méthode de parcours est séparée des actions à effectuer sur les noeuds.
De plus, Tom te donne une interface typée pour spécifier les transformations à appliquer aux noeuds, ce qui est moins évident dans le cas des visiteurs.
Les expressions de stratégie peuvent être bien plus compliquées que "des feuiiles à la racine" ou l'inverse. Par exemple, on peut coder facilement des points fixes poru les transformations. En plus, les stratégies étant réflexives, on peut changer le comportement de la stratégie en cours de route, pour "réagir" à une certaine configuration de l'arbre.
Tout ça mis bout à bouts donne des outils plutôt efficaces (en terme de temps passé à écrire du code, ainsi qu'a l'exécution), pour écrire par ex. des compilateurs, qui sont assez consmmateurs de transformations d'arbres, en général.
[^] # Re: Programmation par stratégies
Posté par Antoine Reilles . En réponse à la dépêche Sortie du langage de programmation Tom 2.4. Évalué à 6.
On peut voir ça comme une version étendue du patron de conception "visiteur".
L'intéret ici est que contrairement au visiteur, qui impose soit de choisir une fois pour toutes la stratégie de parcours (des feuilles à la racine, de la racine aux feuilles), soit de coder dans chaque visiteur une stratégie de parcours, la méthode de parcours est séparée des actions à effectuer sur les noeuds.
De plus, Tom te donne une interface typée pour spécifier les transformations à appliquer aux noeuds, ce qui est moins évident dans le cas des visiteurs.
Les expressions de stratégie peuvent être bien plus compliquées que "des feuiiles à la racine" ou l'inverse. Par exemple, on peut coder facilement des points fixes poru les transformations. En plus, les stratégies étant réflexives, on peut changer le comportement de la stratégie en cours de route, pour "réagir" à une certaine configuration de l'arbre.
Tout ça mis bout à bouts donne des outils plutôt efficaces (en terme de temps passé à écrire du code, ainsi qu'a l'exécution), pour écrire par ex. des compilateurs, qui sont assez consmmateurs de transformations d'arbres, en général.