Bonsoir, je voudrais vous soumettre le problème auquel je me heurte ayant
atteint la limite de mes maigres compétences.
Voila, imaginons une entité (Character) ayant un but (classe Goal), le
but étant constitué d'actions (classe Action).
Le problème c'est que j'ai aussi besoin de gérer des opérateurs
d'actions, ce qui donne ActionOperator_AND et ActionOperator_OR.
L'actionOperator permet de combiner deux actions, voire deux autres
actionOperator.
J'ai donc crée une hiérarchie de classe comme suit :
// Ancêtre d'action et d'opérateur
class BaseAction
// Défini les membres spécifiques à toute action
class Action : BaseAction
// Véritable action (spécialisation)
class Action_Walk : Action
// Défini les membres spécifiques à un opérateur
class BaseOperator : BaseAction
// Le ET
class BaseOperator_AND : BaseOperator
// Le OU
class BaseOperator_OR : BaseOperator
Avec un constructeur pour BaseOperator
BaseOperator(BaseAction left,BaseAction right)
Pour pouvoir écrire (c'est du pseudo code c'est pas du C++ ;-)).
BaseAction défini une méthode purement virtuelle
void run();
Et donc, comme j'ai
Goal.addAction(BaseAction action);
Tout devient "exécutable", soit une action, soit une combinaison
d'actions (ActionOperator) et l'un et l'autre retourne SUCCESS ou FAIL.
Voila, j'ai tenté d'expliquer au mieux...
Donc, ce qui me turlupine c'est que je me demande si j'ai pas mis dans le
même panier des torchons et des boulons (des actions et des opérateurs).
Mon problème étant de pouvoir gérer l'un ou l'autre sans distinction.
A moins que ce soit juste un problème de terminologie et que mon erreur
soit d'avoir utilisé BaseAction comme nom de classe au lieu de quelque
chose de plus abstrait.
Ca vous semble logique tout ça ??
Merci de me donner votre avis si vous avez compris quelque chose à ce
bazar !!
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Jean-Marc Bourguet
Zouplaz writes:
Donc, ce qui me turlupine c'est que je me demande si j'ai pas mis dans le même panier des torchons et des boulons (des actions et des opérateurs). Mon problème étant de pouvoir gérer l'un ou l'autre sans distinction.
Je ne comprends pas bien ton problème. Si ça peut te rassurer, c'est une structure classique que d'avoir une classe de base dont un certain nombre de dérivées agissent par elles-même (tes actions) et d'autres par composition (tes opérateurs). Donc ta structure générale ne me choque pas. Dans les détails il y a des choses qui me gènent un peu mais ça résulte vraissemblablement du fait que c'est du pseudo-code.
A moins que ce soit juste un problème de terminologie et que mon erreur soit d'avoir utilisé BaseAction comme nom de classe au lieu de quelque chose de plus abstrait.
J'aurais appelé BaseOperator CompositeAction ou quelque chose du genre.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Zouplaz <pouet@pouet.com> writes:
Donc, ce qui me turlupine c'est que je me demande si j'ai pas mis
dans le même panier des torchons et des boulons (des actions et des
opérateurs). Mon problème étant de pouvoir gérer l'un ou l'autre
sans distinction.
Je ne comprends pas bien ton problème. Si ça peut te rassurer, c'est
une structure classique que d'avoir une classe de base dont un certain
nombre de dérivées agissent par elles-même (tes actions) et d'autres
par composition (tes opérateurs). Donc ta structure générale ne me
choque pas. Dans les détails il y a des choses qui me gènent un peu
mais ça résulte vraissemblablement du fait que c'est du pseudo-code.
A moins que ce soit juste un problème de terminologie et que mon
erreur soit d'avoir utilisé BaseAction comme nom de classe au lieu
de quelque chose de plus abstrait.
J'aurais appelé BaseOperator CompositeAction ou quelque chose du
genre.
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Donc, ce qui me turlupine c'est que je me demande si j'ai pas mis dans le même panier des torchons et des boulons (des actions et des opérateurs). Mon problème étant de pouvoir gérer l'un ou l'autre sans distinction.
Je ne comprends pas bien ton problème. Si ça peut te rassurer, c'est une structure classique que d'avoir une classe de base dont un certain nombre de dérivées agissent par elles-même (tes actions) et d'autres par composition (tes opérateurs). Donc ta structure générale ne me choque pas. Dans les détails il y a des choses qui me gènent un peu mais ça résulte vraissemblablement du fait que c'est du pseudo-code.
A moins que ce soit juste un problème de terminologie et que mon erreur soit d'avoir utilisé BaseAction comme nom de classe au lieu de quelque chose de plus abstrait.
J'aurais appelé BaseOperator CompositeAction ou quelque chose du genre.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Christophe Lephay
Zouplaz wrote:
Donc, ce qui me turlupine c'est que je me demande si j'ai pas mis dans le même panier des torchons et des boulons (des actions et des opérateurs). Mon problème étant de pouvoir gérer l'un ou l'autre sans distinction.
Dans la mesure où tu veux gérer les deux de la même manière, tu as fait le bon choix...
Ca vous semble logique tout ça ?? Merci de me donner votre avis si vous avez compris quelque chose à ce bazar !!
Celà me semble tout à fait logique. J'ai assez souvent adopté la même approche. Je ne sais pas si un DP y est plus spécialement consacré, mais celà ressemble à un mix des patterns composite et chaine de commande...
Chris
Zouplaz wrote:
Donc, ce qui me turlupine c'est que je me demande si j'ai pas mis
dans le même panier des torchons et des boulons (des actions et des
opérateurs). Mon problème étant de pouvoir gérer l'un ou l'autre sans
distinction.
Dans la mesure où tu veux gérer les deux de la même manière, tu as fait le
bon choix...
Ca vous semble logique tout ça ??
Merci de me donner votre avis si vous avez compris quelque chose à ce
bazar !!
Celà me semble tout à fait logique. J'ai assez souvent adopté la même
approche. Je ne sais pas si un DP y est plus spécialement consacré, mais
celà ressemble à un mix des patterns composite et chaine de commande...
Donc, ce qui me turlupine c'est que je me demande si j'ai pas mis dans le même panier des torchons et des boulons (des actions et des opérateurs). Mon problème étant de pouvoir gérer l'un ou l'autre sans distinction.
Dans la mesure où tu veux gérer les deux de la même manière, tu as fait le bon choix...
Ca vous semble logique tout ça ?? Merci de me donner votre avis si vous avez compris quelque chose à ce bazar !!
Celà me semble tout à fait logique. J'ai assez souvent adopté la même approche. Je ne sais pas si un DP y est plus spécialement consacré, mais celà ressemble à un mix des patterns composite et chaine de commande...
Chris
Jean-Marc Bourguet
[Il me semble avoir deja repondu hier mais je ne vois pas mon message]
Zouplaz writes:
Donc, ce qui me turlupine c'est que je me demande si j'ai pas mis dans le même panier des torchons et des boulons (des actions et des opérateurs). Mon problème étant de pouvoir gérer l'un ou l'autre sans distinction.
Je ne comprends pas bien ton probleme. Avoir une hierarchie de classes ou certaines fonctionnent par composition d'objet de la meme hierarchie est une structure courante (DP Composite). Ta structure globale ne me gene donc pas; il y a des details qui me genent un peu mais c'est vraissemblablement parce que tu as trop simplifier en faisant ton pseudo-code.
A moins que ce soit juste un problème de terminologie et que mon erreur soit d'avoir utilisé BaseAction comme nom de classe au lieu de quelque chose de plus abstrait.
Pour la nomemclature, c'est BaseOperator que j'appellerais plutot CompositeAction.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
[Il me semble avoir deja repondu hier mais je ne vois pas mon message]
Zouplaz <pouet@pouet.com> writes:
Donc, ce qui me turlupine c'est que je me demande si j'ai pas mis
dans le même panier des torchons et des boulons (des actions et des
opérateurs). Mon problème étant de pouvoir gérer l'un ou l'autre
sans distinction.
Je ne comprends pas bien ton probleme. Avoir une hierarchie de
classes ou certaines fonctionnent par composition d'objet de la meme
hierarchie est une structure courante (DP Composite). Ta structure
globale ne me gene donc pas; il y a des details qui me genent un peu
mais c'est vraissemblablement parce que tu as trop simplifier en
faisant ton pseudo-code.
A moins que ce soit juste un problème de terminologie et que mon
erreur soit d'avoir utilisé BaseAction comme nom de classe au lieu
de quelque chose de plus abstrait.
Pour la nomemclature, c'est BaseOperator que j'appellerais plutot
CompositeAction.
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
[Il me semble avoir deja repondu hier mais je ne vois pas mon message]
Zouplaz writes:
Donc, ce qui me turlupine c'est que je me demande si j'ai pas mis dans le même panier des torchons et des boulons (des actions et des opérateurs). Mon problème étant de pouvoir gérer l'un ou l'autre sans distinction.
Je ne comprends pas bien ton probleme. Avoir une hierarchie de classes ou certaines fonctionnent par composition d'objet de la meme hierarchie est une structure courante (DP Composite). Ta structure globale ne me gene donc pas; il y a des details qui me genent un peu mais c'est vraissemblablement parce que tu as trop simplifier en faisant ton pseudo-code.
A moins que ce soit juste un problème de terminologie et que mon erreur soit d'avoir utilisé BaseAction comme nom de classe au lieu de quelque chose de plus abstrait.
Pour la nomemclature, c'est BaseOperator que j'appellerais plutot CompositeAction.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org