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 :

Refactoring Get/Set C++


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 17
    Points : 10
    Points
    10
    Par défaut Refactoring Get/Set C++
    Bonjour,

    Je suis à la recherche d'un outil me permettant une automatisation de tâche de refactoring de code C++.
    Je dispose de nombreuses variables accédées directement (en public) dans un projet.
    Je souhaite passer ces variables en private, et donc remplacer :
    • les accès en lecture par des appels aux nouvelles méthodes Get() correspondantes
    • les accès en écriture par des appels aux nouvelles méthodes Set() correspondantes (avec un argument qui est la valeur à donner, actuellement après le "=" de l'affectation)


    Je cherche donc un outil/script qui fasse :
    - recherche des occurrences de ma variable
    - distinction entre accès en lecture et en écriture
    - remplacement

    ça sent bien les expressions régulières.

    Mais je me dis qu'un tel outil existe certainement déjà...

    Merci d'avance pour vos réponses

    Nicolo

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Mon avis : si c'est pour rajouter Get/Set, pourquoi ne pas les laisser en public ?
    Sinon, beaucoup d'I.D.E ont des options de refactoring : avec lequel est ton projet ? Une solution intégrée est peut être possible.

  3. #3
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Mon avis : si c'est pour rajouter Get/Set, pourquoi ne pas les laisser en public ?
    Sinon, beaucoup d'I.D.E ont des options de refactoring : avec lequel est ton projet ? Une solution intégrée est peut être possible.
    Pareil x 2.
    1- Si c'est juste pour encapsuler, il ne faut pas se mentir, Déméter ne s'en portera pas mieux: le code que tu maintiens est pensé en données et non en services, et c'est déjà trop tard pour faire de l'OO joli/propre, véritable penseront certains.

    2- Au pire, remplace tes attributs dans la classe, fabrique toi deux macros pour transformer en get/set, et finalement compile+applique les macros jusqu'à ce que tu n'aies plus rien oublié.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  4. #4
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    C'est un refactoring particulier dont tu as besoin là. En fait, il vaut mieux casser ce refactoring en plusieurs étapes :

    * création de la méthode GetX
    * replacement de X par GetX là ou ça fait sens
    * création de la méthode SetX
    * remplacement des derniers X par SetX
    * passage de X en private

    Il y a un problème toutefois : si ton code contient des lignes du genre

    a = X = c;

    Alors tu ne peut remplacer X ni par un GetX, ni par un SetX (à moins que SetX ne renvoie la nouvelle valeur).

    Je te conseille d'utiliser Eclipse et ses refactoring tools - ils sont puissants, même en C++. Certes, il ne feront pas tout le travail, mais il t'en laisseront moins à faire toi même.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

Discussions similaires

  1. Problèmes sur Get Set d'une variable.
    Par Mattk dans le forum Windows Forms
    Réponses: 5
    Dernier message: 07/04/2007, 01h43
  2. get set modifier valeur
    Par jcaspar dans le forum Langage
    Réponses: 1
    Dernier message: 11/03/2007, 01h36
  3. fonction générique pour get set et change
    Par tretsois dans le forum C++
    Réponses: 9
    Dernier message: 18/02/2007, 18h28
  4. Réponses: 7
    Dernier message: 23/01/2007, 11h08
  5. [VB6]Property Get/Set avec groupe de contrôles
    Par jacma dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 24/01/2006, 12h09

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