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 :

Imbriquer une méthode dans une autre façon php


Sujet :

Langage Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2003
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 46
    Points : 38
    Points
    38
    Par défaut Imbriquer une méthode dans une autre façon php
    Bonjour,
    Après avoir essentiellement fait du php, je me lance au java (pauvre client....).
    J'ai un bout de code qui revient constamment dans mes classes, avec juste quatre parties qui changent.
    Je souhaiterait donc faire une fonction générique avec en entrée quatre paramètres : valeur 1, valeur 2, action1, action2.
    En php assez facile, mais en java, comment faire en sorte que le code contenu dans une variable soit exécuté ?

    Voici un exemple de code actuel :
    Première situation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     for(int i=0; i<n; i++){valeur=lf.lire(); ass.setPremier(ix,   iy++, valeur);    System.out.println("2C : " +ix+";" + iy+ " ; " + valeur);  ++iy;} // --> h
    Deuxième situation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     for(int i=0; i<n; i++){valeur=lf.ecrire(); ass.setEcrire(ix,   iy++, valeur);    System.out.println("2C : " +ix+";" + iy+ " ; " + valeur);  ++iy;} // --> h
    Ce que j'aimerai faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Fonction générique (les +[ ont été mis pour mieux visualiser la partie constante de la partie variable)
    "for(int i=0; i<n; i++){"+[valeur1]+ ; +[Action1]+ix,   iy++, valeur);    System.out.println("2C : " +ix+";" + iy+ " ; " + valeur);  ++iy;} // --> h
     
    Appel de la fonction première situation : 
    Valeur1 = "lf.lire()"; 
    Action1 = "ass.setPremier(";
    Genérique (valeur1, valeur 2, Action1, Action2)    
    Appel de la fonction deuxième situation : 
    Valeur1 = "lf.ecrire()"; 
    Action1 = "ass.setEcrire(";
    Genérique (valeur1, valeur 2, Action1, Action2)
    Mais la grosse question : ce genre de bidouillage se fait-il en java, ou existe-t-il des manières plus élégantes de procéder ?
    Merci d'avance pour les réponses

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 31
    Points : 33
    Points
    33
    Par défaut
    Je pense que tu dois pouvoir résoudre ton problème en utilisant la reflexivité, ça peut correspondre à un équivalent du pointeur de fonction en C (sans se limiter à cela).
    Jette un oeil à la FAQ, tout est expliqué : http://java.developpez.com/faq/java/...langage_reflex et plus particulièrement : http://java.developpez.com/faq/java/...onmethodinvoke

  3. #3
    Nouveau membre du Club
    Inscrit en
    Août 2003
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 46
    Points : 38
    Points
    38
    Par défaut
    Merci loic,
    tes informations me seront probablement fort utiles, par la suite, mais pour le moment je bute sur le fait de générer une méthode à partir d'une autre sachant que dans l'exemple que j'ai donné plus haut, je construit une méthode en collant bout à bout un ensemble de variables et de méthodes.
    Et le résultat que j'ai pour le moment n'est pas une exécution à l'appel de ma méthode générique (débutant inside)

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    365
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Janvier 2006
    Messages : 365
    Points : 495
    Points
    495
    Par défaut
    Bonjour
    C'est un peu difficile de t'aider à partir du code que tu as posté. Déjà je pense que tu fais du Java mais tout en continuant à concevoir en PHP. Il est difficile par la suite de faire une transcription en Java. A mon avis il serait mieux de revoir la conception de tes classes en termes orienté objet, sinon on s'en sort pas. Donc si tu peux nous donner quelques détails sur les classes que tu veux créer et quelles relations il y a entre elles, ça pourrait permettre de revenir sur la conception que tu as faite.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Août 2003
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 46
    Points : 38
    Points
    38
    Par défaut
    Bonjour
    C'est effectivement mon problème, penser en java et pas en php....
    Pour le moment, les classes que j'ai faite sont séparées, mais si on compare les corps des différentes méthodes, il y a beaucoup de redondance.
    En fait tout tourne autour d'un algorithme qui me permet de tracer une grille de polygones, et de définir ou utiliser les caractéristiques de chaque polygone
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     int ix = nx/2,
          iy = ny/2;          setCase(ix,   iy, nom);     
      for(int n=1;n<nc;n++) {
       iy = iy - 2;
     for(int i=0; i<n; i++){fixer nom , Lire(ix++, iy++, nom);      } // --> dh 
       for(int i=0; i<n; i++){fixer nom, Lire(ix,   iy++, nom); ++iy;} // --> h
       for(int i=0; i<n; i++){fixer nom, Lire(ix--, iy++, nom);      } // --> hg 
       for(int i=0; i<n; i++){fixer nom, Lire(ix--, iy--, nom);      } // --> gb nom 
       for(int i=0; i<n; i++){fixer nom, Lire(ix,   iy--,  nom);--iy; } // --> b nom 
       for(int i=0; i<n; i++){fixer nom, Lire(ix++, iy--, nom);      } // --> bd nom   }
    La façon dont est géré le polygone est fixe, plusieurs action sont possibles : lire les éléments, les écrire, transformer etc. Les éléments constants sont indiqués dans mon premier post.
    Je peux etre amenée aussi à gérer des bouts de polygone, d'où la présence de deux actions et deux valeurs dans le résultat que je souhaite obtenir.
    Une grille est une collection de polygones contenue dans un vecteur

    Ce que je souhaiterais obtenir au final :
    une classe de fonctions contenant les méthodes élémentaires utilisées :
    Classe Elementaire
    - méthode setCouleur(polygone à créer)
    - méthode setEpaisseur(polygone)
    - méthode getCouleur(polygone)
    - méthode getEpaisseur(polygone)

    Classe générique me permettant de définir la méthode générique de gestion de ma grille (les parties constantes sont en gras)
    --> C'est là que je coince....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(int i=0; i<n; i++){fixer nom , Lire(ix++, iy++, nom);      }  
    Cette classe contiendra la définition des différents états que peut prendre ma grille : grille entière, moitié de grille etc....

    Classe utilisant la fonction générique pour gérer mes grilles
    Classe InitialiserPolygone
    - méthode lireCouleur(Grille à lire, action1, action2, valeur1, valeur2)
    - méthode lireEpaisseur(idem)
    - ecrireCouleur,
    - etc.....

    Voilà, j'espère que cela explique mieux ce vers quoi je tends

  6. #6
    Membre confirmé Avatar de spekal
    Inscrit en
    Mai 2005
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 502
    Points : 510
    Points
    510
    Par défaut
    Ahoulà quel pataques !

    Premièrement c'est bien de penser fonction, c'est bien aussi en plus de penser objet. Cela viendra, je présume. Rien de mieux que la pratique.

    J'ai l'impression que ce qui te poses problème c'est le Action de ton premier post. Pour se faire, je présume que ce qui ressemble le plus à la fonction générique du PHP (je connais pas le PHP) est une interface Java. Cela peut être aussi une classe. De toutes façons, c'est un objet. (d'où l'intérêt de penser aux objets...)

    Je tente un exemple.

    (autre chose... en java, il arrive que l'on fasse des retours à la ligne dans les codes sources... c'est tout de même plus lisible...)

    Voici ta boucle for :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public void laMéthodeGénérique(Truc ceci, Muche cela, ActionGenerique go)
    {
    for (int i = 0; i < MAX; i++)
    {
     valeur = ceci;
     valeur = cela;
     // et ici l'appel de l'action 
     go.declencheToi();
    }
    Tu vois qu'ici j'ai lancé mon action simplement en activant une méthode de la classe ActionGenerique sur l'objet go.

    Voici maintenant cette ActionGenerique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public interface ActionGenerique
    {
     public void declencheToi();
    }
    Tu vois que c'est une simple déclaration de méthode sans rien dedans. J'ai choisi une interface, j'aurais pu choisir autre chose, c'est juste parce que cela me semble le plus clair. (mais pour un débutant c'est pas forcément facile).

    Voici maintenant deux classes qui font cette interface :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    public class ActionHanHan implements ActionGenerique
    {
     public void declencheToi()
     {
      System.out.println("Han ! Han !");
     }
    }
     
    public class ActionHueHue implements ActionGenerique
    {
     public void declencheToi()
     {
      System.out.println("Hue ! Hue !");
     }
    }
    Tu vois qu'ici je détermine vraiment ce qui se passe dans la méthode declencheToi. Je peux y mettre absolument n'importe quoi, l'important est que la méthode s'appelle toujours declencheToi, comme il est écrit dans l'interface ActionGenerique.


    Et voici maintenant l'usage de tout çà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ActionHueHue hue;
    ActionHanHan han;
     
    hue = new ActionHueHue();
    han = new ActionHanHan();
    laMéthodeGénérique(leTruc, leMuche, hue);
    laMéthodeGénérique(leTruc, leMuche, han);
    Et voilà... c'est clair et facile, n'est-ce pas ?

  7. #7
    Membre éprouvé
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Points : 1 085
    Points
    1 085
    Par défaut
    1- Tout cela n'est tout de même pas trés clair et énormemment confus...

    2- Comme tout le monde te l'as dit, tu résonne en termes programmation fonctionnelle et non orientée objet. Alors enlève déjà de ton vocabulaire les notions de fonction... Secundo je crois que tu peux regarder du côté des interfaces, voir classes abstraites pour résoudre ton problème.

    3- Ca sert à rien de donner une tonne d'information, si elle est noyée dans un flou artistique.

    4- Il n'y a aucun intérêt en java d'imbriquer une méthode dans une autre ou de générer une méthode de façon dynamique.

    5- Ceci est impossible en java et dans 75% des cas l'utilisation de la reflexion sous-tend une grosse erreur dans la conception du modéle.

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. modifier un élément d'une form dans une méthode d'une autre form
    Par baldebaran dans le forum Windows Forms
    Réponses: 9
    Dernier message: 14/08/2009, 13h59
  2. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  3. Réponses: 3
    Dernier message: 29/04/2008, 14h14
  4. [POO] dans une classe, appeler une fonction dans une méthode
    Par arnaudperfect dans le forum Langage
    Réponses: 3
    Dernier message: 26/08/2007, 23h04
  5. "ajouter une méthode dans une méthode"
    Par Zorgloub dans le forum Langage
    Réponses: 1
    Dernier message: 09/04/2006, 12h53

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