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 :

Simplifier fonctions en Java


Sujet :

Java

  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    538
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 538
    Points : 262
    Points
    262
    Par défaut Simplifier fonctions en Java
    Bonjour,

    Voilà se que je souhaite faire : j'ai un objet en java 'mon_objet' et je souhaite le tester avec des fonctions :

    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
    17
    18
    19
    20
    21
    public class mainClass {
        public static void main() {
            mon_objet A = new mon_objet("X");
            test(A);
        }
     
        public Boolean test(mon_objet A) {
            Boolean res_of_test = false;
            if (test_001(A)) {
                if (test_002(A)) {
                    if (test_003(A)) {
                        [...]
                            if (test_00n(A)) {
                                res_of_test = true;
                            }
                    }
                }
            }
            return res_of_test;
        }
    }
    j'aimerais simplifier mon code avec un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class mainClass {
        public static void main() {
            mon_objet A = new mon_objet("X");
            test(A);
        }
     
        public Boolean test(mon_objet A) {
            list_of_test list_of_test = new list_of_test();
            while (list_of_test(A))
               list_of_test.next();
            return list_of_test.isFinished();
        }
    }
    comment faire svp ?
    Merci.

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 2
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Ce que tu cherches à faire me semble assez tordu... Tu voudrais faire une liste de fonction?
    À ma connaissance, ce n'est pas possible. En revanche, tu peux te tourner vers les tests unitaires avec JUnit qui feront ce que tu recherches, ensuite tu ne pourras plus t'en passer

    Je te conseil donc de te pencher sur divers tutos que tu pourras facilement trouver sur internet.

  3. #3
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    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 074
    Points : 7 978
    Points
    7 978
    Par défaut
    Peut être en utilisant l'API Reflection. Mais j'avoue ne pas avoir bien saisi l'idée de base.
    (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

  4. #4
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    538
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 538
    Points : 262
    Points
    262
    Par défaut
    L'idée c'est de faire passer une batterie de test à mon objet A.
    On doit s'arrête lorsqu'un test échoue.

    Je voulais juste faire ça de manière propre et évité de mettre des 'if' tout moche partout .

  5. #5
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    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 074
    Points : 7 978
    Points
    7 978
    Par défaut
    Alors JUnit comme proposé par monolulu.
    (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

  6. #6
    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
    Voui enfin, JUnit ne s'arrête pas quand un test est mauvais.

    Et en fait je comprends pas l'intérêt de s'arrêter quand on veut faire des tests unitaires. Du coup j'ai l'impression que le besoin est autre.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Si c'est réellement des tests unitaires, utiliser JUnit eviterai de réinventer la roue.

    Mais pour revenir au probleme de base, ce que tu cherches à faire ressemble beaucoup à quelque chose facilement réalisable avec du polymorphisme de base.

    Un truc du genre:
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    // Utiliser une classe ou une interface selon ce qui est le plus simple
    abstract class Test
    {
       // Dans les methodes de executeTest, tu mettrais ce que tu as mis dans test_XXX(A)
       abstract boolean executeTest(mon_objet A);
    }
     
    class Test1 extends Test
    {
       boolean executeTest(mon_objet A)
       {
          return A.getId() == 12;
       }
    }
     
     
    class Test2 extends Test
    {
       boolean executeTest(mon_objet A)
       {
          return A.getValue() == 42;
       }
    }
     
    // A mettre la ou tu veux faire tes tests
    boolean executeTests(mon_objet A)
    {
       // Creation de la batterie de tests
       ArrayList<Test> listTests = new ArrayList<Test>();
       listTests.add(new Test1());
       listTests.add(new Test2());
       for(Test test : listTests)
       {
          if(test.executeTest(A) == false)
             return false;
       }
       return true;
    }
    Note que je n'ai pas testé ce code donc il pourrait ne pas compiler. Mais l'idée est la...

  8. #8
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    538
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 538
    Points : 262
    Points
    262
    Par défaut
    Je précise que ça n'a rien a voir avec des test unitaires

  9. #9
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Pourtant ça ressemble pas mal à des tests unitaires. Maintenant de façon plus générale (donc pas obligé que ça soit des tests, ça pourrait être des transformations successives), ce que propose @hwoarang est une solution à ton problème (la méthode s'appelle executeTest, mais elle pourrait s'appeler n'importe comment d'ailleurs - ça pourrait même être une java.util.Function par exemple).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  10. #10
    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
    Sinon la solution polymorphique, depuis Java 1.8 ya pas vraiment besoin de créer une classe Test, il y a déjà la classe Predicate.

    Du coup définir un ensemble de tests ça ressemble à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public static final Predicate<MonObjet> tests =
      Arrays.<Predicate<MonObjet>>asList(
        // ici les tests, là j'en mets 3
        o -> o != null,
        o -> o.hashCode() != 0,
        o -> o.toString().length() < 10
     
      ).stream().reduce(o -> true, (p1, p2) -> p1.and(p2));
    et ça s'utilise comme ça (dans la même classe) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    MonObjet a = obtenirMonObjet();
    if(tests.test(a)) {
    	// ...
    } else {
    	// ...
    }
    Évidemment, une fois qu'on en arrive là, il faut savoir se demander pourquoi on a pas fait tout simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if(
      a != null &&
      a.hashCode() != 0 &&
      a.toString().lenght() < 10
    ) {
    	// ...
    } else {
    	// ...
    }
    ou pour reprendre l'exemple de la question initiale :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if(
      test_001(a) &&
      test_002(a) &&
      test_003(a) &&
      test_004(a)
    ) {
    	// ...
    } else {
    	// ...
    }
    Suivant les cas l'un ou l'autre peut être plus simple. Mais il faut pas trop chercher la complexité non plus.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Problem de Fonction en Java
    Par onjaranaivo dans le forum Langage
    Réponses: 1
    Dernier message: 26/07/2010, 10h18
  2. Peut-on faire une liste de fonctions en Java?
    Par stof dans le forum Général Java
    Réponses: 12
    Dernier message: 17/04/2010, 06h55
  3. fonction en java pour oracle
    Par miai85 dans le forum JDBC
    Réponses: 1
    Dernier message: 05/07/2007, 11h57
  4. [Tableaux] simplifier fonction str_replace
    Par nicerico dans le forum Langage
    Réponses: 7
    Dernier message: 04/12/2006, 15h45
  5. les procedures et les fonctions en java
    Par publicvoidmain dans le forum Langage
    Réponses: 2
    Dernier message: 27/01/2006, 14h24

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