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 :

Parcourir une classe pour trouver l'appel à une autre classe


Sujet :

Java

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 40
    Points : 41
    Points
    41
    Par défaut Parcourir une classe pour trouver l'appel à une autre classe
    Bonjour à tous.

    Je me permets de venir vous demander un peu d'aide...

    Voici donc ma problématique :
    J'ai une classe que l'on va appeler Classe_1.
    Dans cette classe, la Classe_2 est appelée x fois, ce qui donne;

    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 Classe_1 {
        // le constructeur
     
        public void methode_1(){
            // du code
            Classe_2 classe_2 = new Classe_2();
            // du code
        }
     
        public void methode_2(){
            // du code
            Classe_2 classe_2 = new Classe_2();
            // du code
        }
    }
    J'aimerais donc parcourir la Classe_1 avec une méthode ou autre afin qu'à chaque appel de Classe_2, une action s'effectue.

    En espérant avoir été clair, je vous remercie par avance pour votre aide.

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 073
    Points : 7 978
    Points
    7 978
    Par défaut
    Citation Envoyé par BillGates62 Voir le message
    Dans cette classe, la Classe_2 est appelée x fois, ce qui donne;
    Je ne vois que 2 instanciations, pas d'appel nulle part en fait. Tu confonds les 2 ou je n'ai pas compris ?

    L'idée c'est quoi ? Effectuer une action lors de l'instantiation de Classe_2 ?
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 40
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par wax78 Voir le message
    Je ne vois que 2 instanciations, pas d'appel nulle part en fait. Tu confonds les 2 ou je n'ai pas compris ?

    L'idée c'est quoi ? Effectuer une action lors de l'instantiation de Classe_2 ?
    Désolé. Je me suis en effet mal exprimé, c'est bien lors de l'instanciation que je veux effectuer une action, sachant que Class_2 est déjà implémentée, c'est une autre action que je veux effectuer.

    Pour être plus précis, Classe_2 contient des paramètres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Classe_2 classe_2 = new Classe_2(param_1, param_2);
    A chaque instanciation de Classe_2, je passe ces paramètres dans un objet Log avec d'autres paramètres, notamment l'heure et la date et j'ajoute ce log à une arrayList de logs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    heure = new SimpleDateFormat("HH:mm").format(new Date());
    Log log = new Log(param_1, param_2, heure, date);
    logs.add(log);
    Ce sont ces trois actions que j'aimerais automatiser.

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hello,

    deux possibilités :

    #1 - C'est seulement quand tu instancies une Classe2 à partir de Classe1 que tu veux faire ces actions.

    Dans ce cas, il suffit que dans Classe1 tu définisses une méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    private Classe2 newClasse2(int param1, int param2) {
      Classe2 classe2 = new Classe2(param1, param2);
     
      String heure = new SimpleDateFormat("HH:mm").format(new Date());
      Log log = new Log(param_1, param_2, heure, date);
      logs.add(log);
      return classe2;
    }
    Et tu n'as plus qu'à appeler ça en lieu et place du constructeur.

    #2 - C'est dans tout ton programme, que tu veux que ça se fasse à chaque fois qu'une Classe2 est instanciée.

    Dans ce cas il vaut mieux utiliser une classe factory. Définir une classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class Classe2Factory {
     
      public static Classe2 newInstance(int param1, int param2) {
        // avec le même contenu qu'au-dessus
      }
     
    }
    Et appeler ça en lieu et place du constructeur. Éventuellement faire les constructeurs de Classe2 package-private au lieu de public, et mettre cette classe dans le même package, pour qu'elle seule ait le droit d'instancier la classe directement.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 40
    Points : 41
    Points
    41
    Par défaut
    Merci pour ta réponse thelvin mais j'ai trouvé une autre solution.

    Dans Classse_2, j'ai ajouté une variable static :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    private String variable_1;
    private int variable_2;
    ...
    public static final ArrayList<T> TOUSLESAPPELS = new ArrayList<T>();
    {
         Classe_2.TOUSLESAPPELS.add(this);
    }
    Avec cela, j'ai juste à appeler

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Classe_2.TOUSLESAPPELS;
    pour récupérer la liste de tous les objets Classe_2 créés.

    Par contre, il y a une dernière chose que j'aimerais faire :
    c'est de récupérer, un peu de la même manière que précédemment, le nom de la classe dans laquelle chaque Classe_2 a été appelée sans modifier les constructeurs de Classe_2 (mais je peux ajouter une méthode dans Classe_2).
    Est-ce possible et si oui, comment ?

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Il y a des moyens de faire mais tous sont déconseillés, le mieux est de faire du code propre dès le départ

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 40
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Il y a des moyens de faire mais tous sont déconseillés, le mieux est de faire du code propre dès le départ
    Je suis tout à fait d'accord avec toi mais quand le départ date d'il y a plusieurs années, tu ne peux pas forcément deviner toutes les modifications qu'il faudra apporter...

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par BillGates62 Voir le message
    Je suis tout à fait d'accord avec toi mais quand le départ date d'il y a plusieurs années, tu ne peux pas forcément deviner toutes les modifications qu'il faudra apporter...
    Je vois pas le rapport, tu peux reprendre un code d'il y a 5 an et changer la signature du constructeur ou d'une méthode. Je fais ça chaque semaine sur des grosses bases de code et ça prend pas plsu d'une heure en général. A moins que ton but soit de faire un test vite fait, toutes les autres méthodesp our avoir l'appelant sont foireuses. T'essaie de faire quoi au final? Parce que si l'idée c'est jsute de prendre une grosse base de code et de logger tous les appels à une méthode/constructeur X avec ses paramètre et contexte, l'AOP est plus approprié, c'est même un exemple classique d'utilisation d'AOP. Et au moins ce n'est pas intrusif dans le code et ça s'active uniquement quand tu en as besoin.

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

Discussions similaires

  1. appeler fonction d'une autre classe pour faire une opération
    Par AzraHell dans le forum Débuter avec Java
    Réponses: 13
    Dernier message: 31/03/2009, 20h32
  2. je recherche une fonction pour trouver le minimum
    Par laxe13 dans le forum Langage
    Réponses: 1
    Dernier message: 03/08/2008, 00h55
  3. Comparaison d'une valeur pour trouver la plus proche
    Par Falcdyr dans le forum VBA Access
    Réponses: 4
    Dernier message: 16/04/2008, 17h10
  4. Recherche d'une webservice pour tester un appel
    Par shaun_the_sheep dans le forum Services Web
    Réponses: 1
    Dernier message: 18/12/2006, 10h31
  5. Réponses: 5
    Dernier message: 18/07/2006, 12h10

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