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

Langage Java Discussion :

Récupérer et/ou créer dynamique la signature publique d'une classe


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut Récupérer et/ou créer dynamique la signature publique d'une classe
    Bonjour,

    Je me suis posé une question à laquelle je ne suis pas arrivé à répondre malgrès de multiples recherches infructueuses.

    Est-il possible, à partir d'une classe, de récupérer une interface correspondante à sa signature publique ?

    Prenons l'exemple de JFrame qui possède une signature publique assez importante. Est-il possible de récupérer cette signature sous forme d'interface, dans le but plus tard d'appliquer une implémentation dynamique ?


  2. #2
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Je ne connais pas la notion de signature pour une classe. En java cela existe pour une méthode, mais à ma connaissance pas pour une classe.

    Peut être entends-tu par là l'ensemble des méthodes ou choses publiques d'une classe, et chercherais-tu à les extraire pour former une interface, interface que tu mettrais en oeuvre dynamiquement.

    Je m'interroge sur la pratiquabilité d'une telle démarche, mais si tu confirmes, et si jamais elle est possible, ce serait par le biais d'outils de manipulation du bytecode, tels asm.

    Une autre voie sera peut être de passer par les notions d'aspects, capables de coller un comportement nouveaux à n'importe quel entité d'une classe, et qui utilisent beaucoup les outils de manipulation du bytecode pour y parvenir.

  3. #3
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut
    La signature publique d'une classe est en effet la partie visible d'une classe de l'exterieur.

    A partir d'une interface il est tout à fait possible d'implémenter dynamiquement ces méthodes sans pour autant manipuler le bytecode (merci la reflexion de Java).

    Il peut être possible d'ajouter dynamiquement des responsabilitées à des classes suivant certains modèles de conceptions (Decorator), ou d'initialiser leurs état (Builder), mais je cherchais ici bel et bien, à reimplémenter une partie d'un type, et pour celà il faut récupérer sa signature sous forme d'interface, chose que je ne suis pas parvenu a faire .

    Je ne cherche pas à rendre cette implémentation permanante, ni à générer du code véritablement (sinon en effet, ASM semblerait être parfait pour cela).

    Merci en tous cas pour cette idée .

  4. #4
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Je ne vois pas comment, par la reflexion, tu peux implémenter du code à partir d'une classe telle que JFrame.

    Certes à partir d'une interface tu le peux avec le Proxy.

    J'ai l'impression que la notion d'aspect est ce qui se rapproche le plus de ce que tu cherches à faire. Regarde Spring et ses aspects(ici et ), ou directement AspectJ, par exemple ?

  5. #5
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut
    Ce que je cherche à faire c'est récupérer une interface correspondante à une classe (par exemple JFrame), pour pouvoir l'implémenter par la suite avec le Proxy.

  6. #6
    Rédacteur
    Avatar de benwit
    Profil pro
    dev
    Inscrit en
    Septembre 2004
    Messages
    1 676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 676
    Par défaut
    Je n'arrive pas trop à comprendre ce que tu veux faire et surtout à quel moment (en développement ou dynamiquement à l'execution) ?

    A l'execution, tu peux connaître par reflexion l'ensemble des méthodes publiques.
    Mais après, pour quoi faire ?

    Si c'est pour modifier une implémentation existante, l'AOP est une technique.

    Sinon, si tu veux créer une interface à partir des infos précédemment extraites par réflexion, que vas tu en faire ensuite ?

    Si j'ai bien compris, tu ne veux pas modifier ta classe d'origine (JFrame) pour lui faire implémenter ton interface mais créer un autre objet (un proxy ?) qui implémenterai cette interface ?
    Le problème dans cette démarche, c'est le client de JFrame ? Comment tu vas lui faire appeler les méthodes de ton interface ? Il ne connait que JFrame et ce n'est pas parce que tu lui passe un objet avec les mêmes méthodes que ça va lui plaire !

    Si tu veux une indépendance sans bidouiller le bytecode, c'est à la conception qu'il faut le prévoir :
    Créer l'interface qui sera utilisée par la classe cliente (Cette interface reprend les méthodes de ta classe (JFrame dans l'exemple) Il y a des outils de dev pour le faire si tu trouves ça long à saisir)
    Créer un adapter de ta JFrame qui implémente l'interface.
    Quand, tu veux une autre implémentation, tu implémentes l'interface.
    Si tu veux que partiellement, une autre implémentation, tu fais un proxy qui implémente ton interface (et tu redéfinie juste où tu as besoin)

Discussions similaires

  1. Récupérer des champs créer dynamiquement
    Par dam28800 dans le forum jQuery
    Réponses: 6
    Dernier message: 19/08/2010, 10h36
  2. [PDO] [PHP 5] fetchObject et les champs publiques d'une classe
    Par djo938 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 22/07/2010, 21h22
  3. différence entre variable locale et attribut publique d'une classe
    Par TaymouWan dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 23/03/2010, 19h04
  4. Récupérer le nombre et le type d'attribut d'une class
    Par adurandet dans le forum Langage
    Réponses: 5
    Dernier message: 27/11/2009, 18h19
  5. [DOM]Créer dynamiquement du HTML à partir d'une chaîne
    Par jothi35 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 11/08/2006, 20h01

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