IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

[Conception] Design pattern Memento


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 103
    Points : 68
    Points
    68
    Par défaut [Conception] Design pattern Memento
    Bonjour,

    [Ce topic est relie a celui-ci http://www.developpez.net/forums/sho...d.php?t=403682 pour ceux qui ont suivi la discussion]

    Alors voila. J'ai un objet auquel j'applique des transformations, que, dans certains cas, je n'accepte pas. Cependant, je suis obligé de faire effectivement cette transformation pour savoir ou pas si ja la valide.

    Pour etre plus precis, j'applique des transformations geometriques (translations, rotations, dilatations, ...) a des formes geometriques. Devant de temps à autre revenir en arrière, c'est à dire retrouver l'état initial de ma forme, je me demandais si le pattern Memento était fait pour moi.

    En fait, je ne comprends pas bien en quoi il permet de ne pas exposer l'interface. Un petit coup de main ?

    D'avance merci

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 366
    Points : 444
    Points
    444
    Par défaut
    Le pattern permet de ne pas exposer l'interface des classes que tu manipules dans la mesure où ce sont les objets de ces classes qui restaurent leur état, tu n'as pas à fournir de méthodes supplémentaires pour gérer ça de l'extérieur et ainsi exposer des détails d'implémentation.

    Maintenant savoir si c'est le plus adapté, ça dépend de la manière dont sont implémentés tes objets et de ce que font réellement tes transformations. Tu as deux manières de gérer les annulations :

    - le memento, qui contient toutes les données correspondant à l'état que tu veux restaurer.
    - appliquer une transformation inverse pour revenir à l'état initial, cette méthode étant pas mal dans le cas où tu as beaucoup de variables de classes dépendantes à mettre à jour, où si ta transformation implique des appels à des méthodes d'autres objets.

    Perso je suis pas fan du Memento, ça oblige à écrire pas mal de code supplémentaire pour stocker des variables d'état, si tu veux garder un historique relativement important de tes commandes ça commence à consommer pas mal de mémoire, et dans le comportement polymorphique est pas évident à mettre en place dans le cas d'une hiérarchie de classes.

    Excepté dans le cas où les changements d'état sont très gourmandes en temps de calcul, je préfère stocker une paire de foncteur (fonction appliquée pour le redo, fonction inverse pour l'undo) avec les arguments à passer.

  3. #3
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 629
    Points : 30 692
    Points
    30 692
    Par défaut
    Salut,

    Ceci dit, dans le cadre que tu explique, une modification "complexe" (grossissement, déplacement et rotation) n'étant qu'une suite de modification "simple", il *devrait* effectivement te permettre de mettre au point quelque chose se rapprochant des "transaction" en SQL et de leur sytème de "rollback", avec leur sigle ACID(Atomique, Cohérente, Isolée et Durable), sans avoir besoin de retenir ni les états réels intermédiaires, ni même les états "finaux"

    Si cela entre dans l'idée générale, rien ne t'empêche d'assurer la "durabilité" en effaçant au fur et à mesure les modifications acceptées pour économiser ta mémoire

    Le tout étant que chaque modification "simple" dois pouvoir être inversée facilement

  4. #4
    Membre averti Avatar de Kujara
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 262
    Points : 358
    Points
    358
    Par défaut
    A noter que si tu travaille sur des objets 3D, comme j'en ai l'impression, tu peux te contenter de "sauvegarder" des matrices 4D, soit en tant qu"etat total de ton objet a un instant T avant la transformation, ce qui te permet de revenir a un etat 3 transformations avant en une fois, soit en tant que matrice 4x4 de transformation de ton objet, auquel cas pour revenir 3 fois en arriere, tu devras faire 3 fois les calculs.

  5. #5
    Membre éclairé Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Points : 790
    Points
    790
    Par défaut
    Je ne sais pas si c'est valable. Mais on pourrait aussi faire une copie de l'objet, y appliquer la transformation, le jeter si c'est pas bon, jeter l'ancien si c'est bon. Mais j'imagine que ce n'est pas optimal comme soluce.

Discussions similaires

  1. [Memento] Design Pattern Memento ou clonage d'objets ?
    Par SPQR dans le forum Design Patterns
    Réponses: 1
    Dernier message: 23/07/2007, 09h08
  2. [Conception] Design Pattern Observer Java
    Par jeb001 dans le forum Général Java
    Réponses: 4
    Dernier message: 02/05/2007, 23h43
  3. [Conception]Design Pattern Factory ?
    Par ®om dans le forum Logging
    Réponses: 8
    Dernier message: 13/09/2006, 10h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo