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

Java Discussion :

Récupération de méthodes


Sujet :

Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 5
    Par défaut Récupération de méthodes
    Bonjour,
    Le problème au quel je suis confronté est que: dans une classe JAVA on a des attributs et des méthodes,on a deux types de méthodes: les méthodes qui font que consulter et les méthodes qui peuvent transformer l'état de l'objet en manipulant un ou plusieurs des ses attributs.
    Ce que je voudrai savoir c'est comment récupérer les méthodes qui transforment un de ces attribut.

    ça fait un bon moment que j'essaye de régler ce problème mais sans succès.
    Besoin d'aide S.V.P.

    Cordialement Ylleria38

  2. #2
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 76
    Par défaut
    Bonjour,

    Je sais pas si j'ai bien compris ta question, mais si tes méthodes (communément appelées getter et setter ) sont publiques, il te suffit d'avoir une instance d'un objet puis d'apeller ta methode comme suit :


  3. #3
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    salut.

    Les Get et Set sont appelées les accesseurs qui permettent d'accéder et modifier les attributs protégées ou privées d'une classe.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 5
    Par défaut
    Je crois que vous m'avez pas compris.
    Or les accesseurs il y a d'autre méthodes qui peuvent changer les attribut aussi
    par exemple si on a F1 qui est une file dans nos attributs et que dans une méthodes M1 on fais F1.add() on va changer l'attribut F1. moi ce que je voudrai
    ces avoir la liste des méthodes qui peuvent changé l'attribut F1 par exemple.

  5. #5
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    Aucune chance... il faudrait analyser le bytecode de la méthode en question pour voir si (sous certaines conditions) elles peuvent faire muter l'objet.

    Mais théoriquement, toutes les méthodes qui ne renvoient pas de résultat font muter un objet. Car une méthode qui ne fait pas muter l'objet ni ne renvoie de résultat ne fait rien!

    Peut-être qu'en expliquant mieux le but, on pourrait trouver une solution, mais pour l'instant ta demande est juste impossible à réaliser...


  6. #6
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    Citation Envoyé par ylleria38 Voir le message
    ces avoir la liste des méthodes qui peuvent changé l'attribut F1 par exemple.
    si tu es dans une même classe ,tu peux chercher les méthodes ayant comme paramètre l'attribut en question par exemple

  7. #7
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 76
    Par défaut
    De quel type est ton objet F1?

    Il y a deux cas soit c'est toi qui a crée la classe, dans ce cas il n'existe que les méthodes que TU as crée.

    soit c'est une classe de l'API, si tu travailles avec eclipse tu prends une instance avec un point
    et tu fais Ctrl + espace et tu auras la liste des méthodes.

    mais que veut tu faire exactement?

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 5
    Par défaut
    Citation Envoyé par Pill_S Voir le message
    Aucune chance... il faudrait analyser le bytecode de la méthode en question pour voir si (sous certaines conditions) elles peuvent faire muter l'objet.

    Mais théoriquement, toutes les méthodes qui ne renvoient pas de résultat font muter un objet. Car une méthode qui ne fait pas muter l'objet ni ne renvoie de résultat ne fait rien!

    Peut-être qu'en expliquant mieux le but, on pourrait trouver une solution, mais pour l'instant ta demande est juste impossible à réaliser...

    Ok je vois mais tu pourrais m'expliquer un peut cette analyse du bytecode de la méthodes stp

  9. #9
    Membre expérimenté Avatar de jiddou
    Inscrit en
    Août 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 247
    Par défaut
    ça s'appelle de la reflection . Elle te permet d'avoir la structure d'une classe avec la signature de ses méthodes mais le problème dans ton cas est que la signature n'est pas suffisante pour savoir si la méthode modifie un attribut ou pas sauf si tu vas éliminer des hypothèses.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 5
    Par défaut
    Citation Envoyé par jiddou Voir le message
    ça s'appelle de la reflection . Elle te permet d'avoir la structure d'une classe avec la signature de ses méthodes mais le problème dans ton cas est que la signature n'est pas suffisante pour savoir si la méthode modifie un attribut ou pas sauf si tu vas éliminer des hypothèses.
    Oui mais le reflection ne suffi pas pour régler mon problème

  11. #11
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    Non ça ne suffit pas, mais c'est deja un début.

    Comme je l'ai dit, il faudrait analyser le code source / le byte code de la méthode (avec des outils "à la cglib") en question pour déterminer si il y a écriture de données. Cependant c'est une opération infiniment complexe et je crains que tu n'aie aucune chance d'y parvenir (c'est un travail titanesque qui n'est selon moi qu'à la portée des ingénieurs de chez sun, et même eux devraient réfléchir à 2 fois avant de se lancer dans une réalisation de ce type).

    Tu n'as cependant toujours pas répondu à ma question: à quoi cela va-t-il servir? car j'ai beaucoup de mal à voire une réelle utilité à cela

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 5
    Par défaut
    Citation Envoyé par Pill_S Voir le message
    Non ça ne suffit pas, mais c'est deja un début.

    Comme je l'ai dit, il faudrait analyser le code source / le byte code de la méthode (avec des outils "à la cglib") en question pour déterminer si il y a écriture de données. Cependant c'est une opération infiniment complexe et je crains que tu n'aie aucune chance d'y parvenir (c'est un travail titanesque qui n'est selon moi qu'à la portée des ingénieurs de chez sun, et même eux devraient réfléchir à 2 fois avant de se lancer dans une réalisation de ce type).

    Tu n'as cependant toujours pas répondu à ma question: à quoi cela va-t-il servir? car j'ai beaucoup de mal à voire une réelle utilité à cela
    Alors c'est pour ne tester que les méthodes susceptible de changé l'objet

  13. #13
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    Bin c'est vraiment pas une bonne idée... il faut TOUT tester, y compris les méthodes qui renvoient simplement des résultats calculés à partir des valeurs de l'objet/des paramètres.

    Prends cette simple méthode:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public static int somme(int i, int j) {
        return i * j;
    }
    bien qu'elle ne fasse pas muter l'objet, il faut la tester, car l'implémentation que je viens d'écrire est foireuse

  14. #14
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 338
    Par défaut
    Le debugueur eclipse affiche la valeur d'une variable en jaune quand cette variable change de valeur donc on peut le détecter au runtime.
    Ton problème est complexe et ça mérite une très très ..... très longue réflexion
    Sinon comme l'a bien dit Pill_S il faudrait analyser le bytecode et voir si on fait une affectation a un field ou appel d'une méthode qui change un field (utilisation de cglib, ASM...).
    A++

  15. #15
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    Citation Envoyé par hibour Voir le message
    Le debugueur eclipse affiche la valeur d'une variable en jaune quand cette variable change de valeur donc on peut le détecter au runtime.
    ouaip

    mais eclipse ne sait pas "prédire" que telle variable sera modifiée

  16. #16
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 338
    Par défaut
    Pill_S
    mais eclipse ne sait pas "prédire" que telle variable sera modifiée
    Peut être eclipse le sait, à moins que t'avais dejà travaillé chez eclipse ??!

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 248
    Par défaut
    Si t'as beaucoup de temps, je pense que une façon de faire serai d'utiliser JavaCC pour créer un parseur qui te permettera d'analyser le corps de tes méthodes et voir quels sont les attributs modifiés.
    Tu pourras probablement trouver beaucoup de parseurs et grammaire existants pour Java mais tu dois les adapter pour ton besoin.
    Ensuite tu pourras combiner l'utilisation de la réflexion et ton parseur pour trouver ce que tu veux.

    Bon la parler c'est facile, je ne suis pas expert dans ce domaine mais je suis sure que ca se fais avec ca (peut être après que tu aies lu un livre sur les compilateurs ).

  18. #18
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 248
    Par défaut
    Citation Envoyé par hibour Voir le message
    Peut être eclipse le sait, à moins que t'avais dejà travaillé chez eclipse ??!
    Eclipse sait probablement quelque chose de similaire, sinon il n'affichera pas un "warning" lorsqu'un attribut n'est jamais utilisé.

  19. #19
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Il y a un monde entre savoir que quelque chose n'est pas utilisé, et savoir que quelque chose est utilisé.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  20. #20
    Membre expérimenté Avatar de jiddou
    Inscrit en
    Août 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 247
    Par défaut
    Une petite idée. Tu pourras regarder si l'un des attributs de l'objet se trouve à gauche d'une expression ; Si oui alors la méthode modifie l'état de l'objet. Tout ça reste très théorique

Discussions similaires

  1. [MySQL] récupération id méthode get
    Par totot dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 04/06/2013, 19h18
  2. Méthode GET > Récupération avec des variables dynamiques
    Par arnaudperfect dans le forum Langage
    Réponses: 3
    Dernier message: 30/03/2007, 15h28
  3. Probleme de récupération méthode $POST
    Par cyberdevelopment dans le forum Langage
    Réponses: 8
    Dernier message: 18/07/2006, 16h08
  4. Réponses: 6
    Dernier message: 28/02/2006, 17h41
  5. Méthode récupération jeu de résultats en PHP
    Par Death83 dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 15/01/2006, 13h58

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