Partage
  • Partager sur Facebook
  • Partager sur Twitter

Récupérer l'instance d'une classe (un objet)

    21 mai 2018 à 19:07:15

    Bonjour,

    J'ai un petit soucis que j'ai résolu en déclarant ma méthode static, mais ça ne répond pas à ma question, à savoir :

    J'ai une classe C1 qui contient des attributs dont un public ArrayList. Cette classe possède des méthodes. Cette classe s'instancie. Disons que j'ai l'instance C1_1.

    Dans une autre classe (C2), je ne connais que mon ArrayList (de l'instanciation de C1 : C1_1). Or j'aimerais depuis C2 avoir accès à C1_1 pour pouvoir utiliser ses méthodes (sans donc les déclarer en static).

    J'ai bien sûr fait un tour du côté de getClass etc. mais je n'ai rien vu.

    Quelqu'un sait-il, d'une façon claire et limpide et simple s'il existe une façon de faire ?

    Je vous remercie,

    Aldrik. 

    • Partager sur Facebook
    • Partager sur Twitter
      21 mai 2018 à 22:44:37

      Salut,

      Une petite question avant d'apporter une réponse définitive:

      Si je me retrouve avec deux instances de C2 (mettons C2_1 et C2_2), ces deux instances vont elles manipuler la même instance de C1 ou vont elles manipuler une instance de C1 qui leur est propre?

      Autrement dit: est-ce que le contenu du ArrayList auquel tu peux accéder au travers de C2_1 est le même que le contenu auquel tu peux accéder au travers de C2_2?

      En attendant ta réponse:

      Si tu pouvais choisir des noms de classes autres que C1 et C2, qui puissent nous permettre de comprendre l'utilisation que tu compte faire de ces deux classes, ce serait vraiment cool (cela m'aurait évité de te poser la question)

      L'exposition de données dans l'accessibilité publique est très rarement une bonne chose (surtout lorsque la donnée en question est une collection d'objets), car cela permet à l'utilisateur de la classe de faire "n'importe quoi" avec la donnée; y compris (vu qu'il s'agit d'une collection d'objets) y rajouter des éléments inconsistants, en supprimer des éléméents qui ne devraient pas l'être ou "purger" la collection alors qu'elle n'aurait pas du l'être.

      De manière générale : une classe est bien plus que la somme des données qui la compose car c'est un fournisseur de services. Les données membres (attributs) ne sont là que pour permettre à la classe de fournir les services que l'on est en droit d'attendre de sa part, et tous les services qu'elles proposent ont un objectif en commun: s'assurer que les données membres resteront cohérentes durant l'exécution.

      Un accesseur (getXXX) peut éventuellement(*) être considéré comme étant un service rendu par la classe dont on peut estimer avoir besoin, mais un mutateur (setXXX) n'entre généralement pas dans la liste des services attendus, ne serait-ce que parce qu'ils rendent l'utilisateur de la classe responsable du calcul et de la validation des valeurs qu'il va transmettre, ce qui va à l'encontre de l'objectif commun que je viens de citer

      (*) Et encore: Si tu as une classe Voiture, tout le monde s'attendra à ce qu'elle dispose d'un attribut de type Reservoir. Mais même un mécanicien ne devra pour ainsi dire jamais accéder directement à cet attribut: dans 99.99% des cas (je laisse 0.01% aux "cas particuliers" et je suis déjà bien généreux :D ) les manipulations auxquelles le réservoir sera soumis passera par... l'interface publique exposée par la voiture (la jauge à carburant, l'ordinateur de bord, l'orifice d'accès, ... ).  Si bien que l'on se rend souvent compte qu'un accesseur ne correspond à aucun service que l'on est en droit d'attendre de la part de notre classe :p

      • Partager sur Facebook
      • Partager sur Twitter
      Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
        22 mai 2018 à 1:03:57

        Bonsoir koala01

        Merci pour ta réponse, instructive.

        Mon instance de C2 (qui manipule des données de l'instance de C1, et éventuellement les données d'une autre instance de C1) est unique. En ce sens, je veux dire qu'une autre instance de C2 manipulera d'autres instances de C1 que celles utilisées par l'instance précédente de C2. Suis-je clair ? Entre C2 et C1 on a plus une relation 1->n et non n->p.

        Quant à la dénomination des classes, je suis d'accord avec toi, mais il m'a semblé que pour rendre mon post clair je ne devais pas entrer dans le détail de mon code.

        Merci encore à toi.

        A te lire,

        Aldrik.

        • Partager sur Facebook
        • Partager sur Twitter
          22 mai 2018 à 1:57:30

          AldrikKildra a écrit:

          Quant à la dénomination des classes, je suis d'accord avec toi, mais il m'a semblé que pour rendre mon post clair je ne devais pas entrer dans le détail de mon code.

          Heuu.... Oui, ... Mais non...

          Il est en effet préférable d'éviter de noyer celui qui pourrait t'aider sous des détails dont il n'a que faire. (c'est la raison de "oui").

          Mais, d'un autre coté, le contexte dans lequel tu te trouves risque très fort d'influencer énormément les réponses, parce que la "meilleure manière de faire" (ou, à tout le moins la "moins mauvaise manière de faire") en dépendra énormément.  Et c'est la raison de mon "mais ... non".

          Par exemple, avec les réponses que tu m'as données, je ne sais toujours pas trop si une instance de C2 peut être considéré comme le "propriétaire légitime" de l'instance de C1 dont elle dispose ou si l'instance de C2 doit d'avantage n'être considérée que comme "l'utilisateur d'une instance de C1 qui existe par ailleurs".

          Or, la "bonne manière de faire" dépendra de ce genre d'information. Et le contexte dans lequel tu te trouves et toute information quant à l'utilisation que tu prévois de faire de tes classes C1 et C2 aurait pu nous permettre de déterminer quelle était la meilleure solution bien plus facilement.

          De manière générale, le choix des identifiants est primordial dans n'importe quel projet, parce qu'un code est bien plus souvent lu ou modifié qu'il n'est compilé ou exécuté.  Si bien que le premier destinataire du code n'est pas le compilateur ou l'interpréteur, comme on pourrait le croire, mais... le premier clampin qui posera les yeux dessus.

          De même, la première règle sur un forum dédié au développement informatique est "aides nous à t'aider": plus nous serons en mesure de nous faire une idée précise de tes besoins, plus nous aurons facile à te fournir une solution qui les remplira. Et la meilleure manière de nous aider à t'aider, c'est encore de choisir des identifiants (pour tes classes, tes méthodes, tes attributs, tes variables locales et tes paramètres) qui nous indiquent clairement ... l'usage auquel tu les destines.

          Alors, bien sur,  on n'a pas *** forcément *** besoin d'avoir la liste exhaustive des méthodes et des attributs.  Pas plus que l'on a besoin d'avoir l'implémentation réelle de toutes les méthodes.  A la condition sine qua non que les identifiants utilisés nous permettent de nous faire une idée précise des informations que, par soucis de simplicité, tu as décidé de nous cacher.

          A bon entendeur :D

          • Partager sur Facebook
          • Partager sur Twitter
          Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
            22 mai 2018 à 2:14:01

            Bonsoir,

            Je suis absolument certain que mon code ne te servira pas. Ma question était et reste : y-a-t-il un moyen depuis une instance de connaître l'instance propriétaire d'un attribut (dans mon cas un ArrayList) d'une façon simple.

            Tes réponses (et tes questions) me permettent de penser qu'il n'y a pas de réponse simple. Tant pis. J'ai détourné le problème, mais pour ma culture j'aurais aimé savoir si c'était possible de façon simple.

            Merci pour ta patience, et bonne nuit.

            • Partager sur Facebook
            • Partager sur Twitter
              22 mai 2018 à 9:27:07

              AldrikKildra a écrit:

              Bonsoir,

              Je suis absolument certain que mon code ne te servira pas. Ma question était et reste : y-a-t-il un moyen depuis une instance de connaître l'instance propriétaire d'un attribut (dans mon cas un ArrayList) d'une façon simple.

              Tes réponses (et tes questions) me permettent de penser qu'il n'y a pas de réponse simple. Tant pis. J'ai détourné le problème, mais pour ma culture j'aurais aimé savoir si c'était possible de façon simple.

              Et je peux au contraire te certifier que j'aurais pu apporter une solution correcte dés ma première intervention si j'avais eu des identifiant correctement choisi ou si j'avais connu le  contexte dans lequel tu te trouves.

              Car les solutions sont simple, malgré tout, et parce que, bien que j'ai indiqué dans mon profile que je suis au niveau débutant en java, je suis un spécialiste reconnu du C++ et que la distinction entre le propriétaire et l'utilisateur d'une donnée se pose en C++ de manière récurrente mais encore plus complexe qu'en java.

              Si bien qu'il ne se passe pas une semaine sur le forum C++ sans que je fasse un petit laïus sur la nécessité de choisir correctement les identifiants, sans que je ne demande des précisions sur le contexte particulier dans lequel la question est posée, ou sans que je n'utilise justement les identifiants fournis pour m'aider à avoir une idée à peu près correcte du problème rencontré.

              Bien sur, cette idée du problème n'est jamais qu'un ensemble d'assertions sur lesquelles je base mon raisonnement.  La "validité" de ces assertions dépends essentiellement de la pertinence des identifiants choisis ;)

              De plus, en C++, on a l'habitude de demander ce que l'on appelle un code minimum compilable : C'est un code expurgé de tous les détails inutiles, mais qui permet néanmoins de reproduire le problème auquel on est confronté

              • en produisant la même erreur à la compilation (on demande alors d'indiquer l'erreur, par facilité) ou
              • en produisant le même résultat (on demande alors d'expliquer la différence avec le résultat souhaité).

              Enfin, je te l'ai dit plus haut : la règle primordiale dans un forum technique est de nous aider à t'aider.  Si quelqu'un qui est d'accord pour t'aider te pose des questions, il faut partir du principe qu'il a de très bonnes raisons de te les poser. 

              Qui es tu pour pouvoir décider unilatéralement qu'il est inutile de répondre à ces question? 

              Tu ne vois peut-être pas en quoi ces réponse pourront aider ton interlocuteur, mais c'est peut-être simplement parce que tu n'es pas aussi compétent que lui!!  Ce qui semble confirmé par le fait que, si tu étais aussi compétent que lui, tu n'aurais sans doute pas posé la question, parce que lui, il est capable d'y répondre.

              C'est le problème classique des débutants : leur ignorance les pousse à croire qu'ils ont tout compris, qu'il maitrisent quelque chose rien que parce qu'ils en ont à peine effleuré la surface alors que la somme de ce qu'ils ignorent est un nombre incalculable de fois supérieure à la somme de ce qu'il savent.

              Tu es persuadé que le choix d'identifiants corrects ou le fait de savoir dans quel contexte tu te trouves ne m'aidera pas? D'accord! Je ne peux pas t'obliger à me répondre.

              Mais, si j'accepte que tu refuses de me répondre, tu comprendras sans doute que je puisse refuser de te répondre si je n'ai pas ces informations ;)

              -
              Edité par koala01 22 mai 2018 à 9:28:26

              • Partager sur Facebook
              • Partager sur Twitter
              Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
                22 mai 2018 à 9:50:42

                Bonjour,

                Je ne voulais en aucun cas t'offenser. 

                Bonne continuation à toi. 

                PS : je le répète, mon code ne te servirait à rien. D'ailleurs, qui dit que j'en ai ?

                Aldrik.

                • Partager sur Facebook
                • Partager sur Twitter
                  22 mai 2018 à 9:58:17

                  AldrikKildra a écrit:

                  Bonjour,

                  Je ne voulais en aucun cas t'offenser.

                  Oh, ne t'en fais pas, tu ne m'as pas offensé le moins du monde ;)

                  AldrikKildra a écrit:

                  PS : je le répète, mon code ne te servirait à rien.

                  Tu n'as pas compris que je me fous pas mal de ton code? que ce que je demande c'est un contexte(es tu dans une optique de création d'IHM, de manipulation d'une base de données, sur une partie métier?) ou, à tout le moins des noms significatifsau lieu de C1 et C2, qui ne veule strictement rien dire???

                  AldrikKildra a écrit:

                  D'ailleurs, qui dit que j'en ai ?

                  Pas de bol, tu me l'as dit toi-même:

                  AldrikKildra a écrit:

                  J'ai détourné le problème

                  Et oui, il ne faut pas sous estimer la capacité des gens qui veulent t'aide à tirer des conclusions qui seront parfaitement logiques... Et le plus souvent correctes ;)

                  -
                  Edité par koala01 22 mai 2018 à 9:59:00

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
                    22 mai 2018 à 20:42:47

                    Bonsoir,

                    Je ne vois absolument pas en quoi le fait de poser une question en appelant mes classes C1 et C2 (uniquement dans mon post) à la place de Voiture ou Personne ou je ne sais quoi d'autres pose problème.

                    Je ne vois pas non plus dans le cas de ma question initiale purement théorique en quoi mon absence de code fait défaut. Certes, présent, il pourrait aider, mais la question est théorique.

                    Mais j'accepte que ça puisse te poser un problème.

                    Quant à moi, si on me demande si f(titi)=2titi+5 est une fonction linéaire, je répondrai oui, en expliquant sans en faire tout un plat que les conventions de nommage préfèrent x et y. Mais je resterai penché sur la question et ne me disperserai pas sur les conventions.  Sans doute est-ce le fruit de mes plus de 30 ans comme développeur, analyste/concepteur, formateur et chef de projet alliés à celle d'un père qui a vu grandir des enfants à qui il fallait expliquer les choses simplement.

                    Mais bon je ne vais pas ergoter sur tout ça. Et oui, je suis débutant en java, et Dieu merci je rencontre souvent ici des personnes pédagogues qui m'aident dans ma progression.

                    Bonne continuation. 

                    -
                    Edité par AldrikKildra 22 mai 2018 à 20:56:55

                    • Partager sur Facebook
                    • Partager sur Twitter
                      22 mai 2018 à 22:20:48

                      Bonjour,

                      Il y a plusieurs solutions possibles. Passer l'objet de la classe C1 à C2 via le constructeur ou un setter ou en paramètre d'une méthode. Il y a aussi le pattern Observer et sûrement quelques autres. La ou les bonnes solutions dépendent du "pourquoi".  Et pour comprendre le pourquoi, il faut donc savoir à quoi servent tes classes et pour quel genre de fonctionnalité C2 à besoin de C1.

                      Si tu voulais de la pédagogie, tu répondrais aux questions de koala01 qui sont pleines de bon sens au lieu de te vexer parce qu'il te demande des précisions sur ton code. Malheureusement, tu restes complètement bloqué sur le côté technique (qui n'a pas de sens sans contexte). Dommage.

                      • Partager sur Facebook
                      • Partager sur Twitter
                        22 mai 2018 à 22:35:04

                        Bonsoir brubru777

                        Comme je le dis dans mon 1er post, C2 a besoin de C1 juste pour pouvoir lancer des méthodes sans les déclarer en static. Mon code doit faire 30 lignes max puisque je ne l'ai pas totalement écrit (avec un échappatoire pour le pb que je me pose). Je pose des questions avant. Coder pour coder, puis résoudre les problèmes, ce n'est pas très intéressant, à mon goût. Ce que je sais c'est que C2 aura besoin à un moment donné, après avoir manipulé un attribut de C1, d'appeler une méthode de C1. Et donc je pose la question.

                        Donc dans ton post tu me donnes des pistes à explorer et je t'en remercie. Ainsi, j'en saurai plus et je coderai sans doute, je l'espère, plus finement. 

                        Disons que le ton péremptoire de koala01 m'a quelque peu exaspéré ("qui es tu pour décider...", "débutant" etc. - tout cela n'est guère pédagogue). Mais bon, je crois qu'il ne sert à rien de polémiquer là-dessus. 

                        Merci à toi,

                        Bonne soirée.

                        -
                        Edité par AldrikKildra 22 mai 2018 à 22:47:33

                        • Partager sur Facebook
                        • Partager sur Twitter
                          22 mai 2018 à 23:43:20

                          AldrikKildra a écrit:

                          Disons que le ton péremptoire de koala01 m'a quelque peu exaspéré ("qui es tu pour décider...", "débutant" etc. - tout cela n'est guère pédagogue). Mais bon, je crois qu'il ne sert à rien de polémiquer là-dessus. 

                          Eh!!! Ohhhh Faut quand même pas pousser, non plus!!!! Avant d'en arriver à cette extrémité, je t'ai demandé TROIS FOIS des explications.

                          Trois fois, je me suis "cassé le cul" à essayer de faire une réponse pédagogique!!!

                          Trois fois cela m'a pris près d'une demi-heure pour le faire!!!

                           Trois fois, je t'ai expliqué qu'un contexte et que des noms significatifs aideraient à apporter une réponse efficace à ton problème!!!

                          Et trois fois, tu m'as envoyé sur les roses!!!!

                          Et tu me reproches à moi par perdre patience (et encore, le temps d'une seule réponse) et par énoncer des évidences qui font mal et pour lesquelles il existe même une loi empirique  alors que tu es plus accroché à ton idée totalement fausse que cela ne servira à rien qu'une moule à son ponton ????

                          Allons!!!! Soyons un peu sérieux!!!!

                          -
                          Edité par koala01 23 mai 2018 à 0:02:15

                          • Partager sur Facebook
                          • Partager sur Twitter
                          Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
                            23 mai 2018 à 0:02:39

                            Bonsoir koala01
                            Je te propose que nous laissions ce post de côté. Point besoin que nous nous fâchions. J'ai compris que ma question simple entraînait de connaître un contexte et que la réponse n'était pas simple. Je n'ai jamais voulu - et si je l'ai fait je te prie de m'excuser - être désagréable.
                            Voilà. Je te souhaite une bonne nuit et enterrons ces échanges. La prochaine fois, lorsqu'on me le demandera, je donnerai mon code (mais là honnêtement j'en ai peu et ma question était plus d'ordre théorique puisque avec une méthode static ça devrait marcher).
                            Bien à toi,
                            Aldrik.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              23 mai 2018 à 1:02:34

                              koala01 a écrit:

                              AldrikKildra a écrit:

                              Quant à la dénomination des classes, je suis d'accord avec toi, mais il m'a semblé que pour rendre mon post clair je ne devais pas entrer dans le détail de mon code.

                              Heuu.... Oui, ... Mais non...

                              Il est en effet préférable d'éviter de noyer celui qui pourrait t'aider sous des détails dont il n'a que faire. (c'est la raison de "oui").

                              Mais, d'un autre coté, le contexte dans lequel tu te trouves risque très fort d'influencer énormément les réponses, parce que la "meilleure manière de faire" (ou, à tout le moins la "moins mauvaise manière de faire") en dépendra énormément.  Et c'est la raison de mon "mais ... non".

                              Par exemple, avec les réponses que tu m'as données, je ne sais toujours pas trop si une instance de C2 peut être considéré comme le "propriétaire légitime" de l'instance de C1 dont elle dispose ou si l'instance de C2 doit d'avantage n'être considérée que comme "l'utilisateur d'une instance de C1 qui existe par ailleurs".

                              Or, la "bonne manière de faire" dépendra de ce genre d'information. Et le contexte dans lequel tu te trouves et toute information quant à l'utilisation que tu prévois de faire de tes classes C1 et C2 aurait pu nous permettre de déterminer quelle était la meilleure solution bien plus facilement.

                              De manière générale, le choix des identifiants est primordial dans n'importe quel projet, parce qu'un code est bien plus souvent lu ou modifié qu'il n'est compilé ou exécuté.  Si bien que le premier destinataire du code n'est pas le compilateur ou l'interpréteur, comme on pourrait le croire, mais... le premier clampin qui posera les yeux dessus.

                              De même, la première règle sur un forum dédié au développement informatique est "aides nous à t'aider": plus nous serons en mesure de nous faire une idée précise de tes besoins, plus nous aurons facile à te fournir une solution qui les remplira. Et la meilleure manière de nous aider à t'aider, c'est encore de choisir des identifiants (pour tes classes, tes méthodes, tes attributs, tes variables locales et tes paramètres) qui nous indiquent clairement ... l'usage auquel tu les destines.

                              Alors, bien sur,  on n'a pas *** forcément *** besoin d'avoir la liste exhaustive des méthodes et des attributs.  Pas plus que l'on a besoin d'avoir l'implémentation réelle de toutes les méthodes.  A la condition sine qua non que les identifiants utilisés nous permettent de nous faire une idée précise des informations que, par soucis de simplicité, tu as décidé de nous cacher.

                              A bon entendeur :D

                              AldrikKildra a écrit:

                              Bonsoir koala01
                              Je te propose que nous laissions ce post de côté.

                              Si tu y tiens

                              AldrikKildra a écrit:

                              Point besoin que nous nous fâchions.

                              Oh, pour cela, tu as de la chance: je ne suis pas du genre rancunier ;)

                              AldrikKildra a écrit:

                              J'ai compris que ma question simple entraînait de connaître un contexte et que la réponse n'était pas simple.

                              Justement, c'est là que tu te trompes !!! La réponse est simple à condition de disposer du contexte.

                              C'est l'absence de contexte qui nous oblige à essayer d'envisager toutes les possibilités (au risque d'en oublier!!!), et qui  rend la réponse forcément beaucoup plus complexe qu'elle ne pourrait l'être

                              AldrikKildra a écrit:

                              Je n'ai jamais voulu - et si je l'ai fait je te prie de m'excuser - être désagréable.

                              Tu es tout excusé ;)

                              AldrikKildra a écrit:

                              La prochaine fois, lorsqu'on me le demandera, je donnerai mon code

                              C'est une sage décision

                              AldrikKildra a écrit:

                              je donnerai mon code (mais là honnêtement j'en ai peu<snip>

                              Décidément, tu n'as pas encre compris, hein???

                              Relis mes intervention!!!

                              Les deux seules fois ou j'ai parlé de code, c'était

                              • pour dire une généralité au sujet du code "<snip>parce qu'un code est bien plus souvent lu ou modifié qu'il n'est compilé ou exécuté."
                              • pour introduire la notion de "code minimum compilable" pour essayer de te faire comprendre que, si on pose une question, que QUAND on demande le code, c'est qu'on a une bonne raison de le faire

                              En dehors de ces deux situations, mes demandes étaient:

                              koala01 a écrit:

                              Si tu pouvais choisir des noms de classes autres que C1 et C2, qui puissent nous permettre de comprendre l'utilisation que tu compte faire de ces deux classes, ce serait vraiment cool (cela m'aurait évité de te poser la question)

                              Traduction : pourrais tu donner des noms significatifs à tes classes?

                              koala01 a écrit:

                              Mais, d'un autre coté, le contexte dans lequel tu te trouves risque très fort d'influencer énormément les réponses, parce que la "meilleure manière de faire" (ou, à tout le moins la "moins mauvaise manière de faire") en dépendra énormément.  Et c'est la raison de mon "mais ... non".

                              koala01 a écrit:

                              Tu n'as pas compris que je me fous pas mal de ton code?

                              Comment être plus explicite sur l'intérêt que je porte au code dans cette discussion ...

                              koala01 a écrit:

                               que ce que je demande c'est un contexte(es tu dans une optique de création d'IHM, de manipulation d'une base de données, sur une partie métier?) ou, à tout le moins des noms significatifs au lieu de C1 et C2, qui ne veule strictement rien dire???

                              Et sur ce qui m'aiderait à t'aider???

                              AldrikKildra a écrit:

                              Quant à moi, si on me demande si f(titi)=2titi+5 est une fonction linéaire, je répondrai oui, en expliquant sans en faire tout un plat que les conventions de nommage préfèrent x et y.

                              AldrikKildra a écrit:

                               ma question était plus d'ordre théorique

                              Oh, les maths, quel plaisir!!!  Voilà au moins un domaine où la théorie et la pratique sont intimement liées :D

                              Malheureusement, bien que l'informatique soit (souvent) considéré comme étant un domaine des mathématique, c'est surtout un domaine ou la réponse à la question

                              Quelle est la différence entre la théorie et la pratique?

                              ressemble surtout à

                              En théorie, il n'y a pas de différence, en pratique, il y a une différence

                              D'autant plus que... hehe... Ce n'est pas une question théorique!!! En tout cas, ce n'est pas une question théorique en java (ce n'est plus une question théorique, dés le moment où tu fais intervenir n'importe quel langage de programmation

                              Parce que dés que tu fais intervenir un langage de programmation, ca devient... une question purement pratique...

                              Or, la pratique, ca dépend... du contexte dans lequel on se trouve:

                              Il n'y a qu'en période de conception que cette question puisse être considérée comme  "purement théorique. 

                              Et encore!!! A partir du moment où la conception a quand même pour but de nous amener tout doucement vers une solution qui sera implémentée sous une forme ou une autre, dans un langage où un autre, et, surtout, d'arriver à répondre à un besoin (qui est tout à fait réel), on est clairement en droit de se demander si cette question est... si théorique que cela :p

                              Peut-être pourrait-on la considérer sous son aspect purement théorique dans le cadre d'une étude approfondie?

                              AldrikKildra a écrit:

                              Je pose des questions avant. Coder pour coder, puis résoudre les problèmes, ce n'est pas très intéressant, à mon goût.

                              Et tu as tout à fait raison!

                              Maintenant, réfléchissons un peu: Comme je viens de le dire, la conception nous permet de nous diriger "en douceur" vers l'objectif à atteindre.

                              Mais, à partir du moment où il y a "un objectif à  atteindre", cela signifie qu'il y a "un point de départ". Car pour atteindre un point B il faut bien que l'on quitte un point A.

                              Et la connaissance des deux points est primordiale:  Si tu ne sais pas d'où tu pars, comment veux tu être en mesure d'évaluer le trajet à  suivre pour atteindre ton objectif?

                              Dans l'autre sens : si tu ne sais pas où tu dois te rendre, tu n'as aucun moyen de savoir... quand tu es arrivé.

                              Des gars bien plus doués que moi pourraient sûrement exprimer les choses de manière plus juste ou plus "mathématique".  Mais, même si elle est mal exprimée, même si elle est simplifiée au maximum, tu avoueras que cette logique est sans faille.

                              Dans ta première intervention, tu m'as dit, en gros : j'ai un objectif "qui se situe en Europe", et je ne veux pas te dire d'où je parts.  Merci!!!

                              Mais l'Europe, c'est vaste! heu... tu ne pourrais pas être un peu plus précis???

                              Après ma première réponse, tu as précisé "ah, au fait, je pars d'Asie".  Chouette!!!  Mais l'Asie est au moins aussi étendue que l'Europe, t'ai-je fais remarquer... Tu ne peux vraiment pas être un peu plus précis???

                              Et la seule réponse que tu aies bien voulu me donner, c'est "non, tu n'as pas besoin d'en savoir plus"...

                              Alors, dis moi: Vu sous cet angle:

                              • Comment veux tu que je puisse t'aider, même avec la meilleur volonté du monde?
                              • Tu t'étonnes que je tape le poing sur la table pour réclamer des indications plus précises après les avoir demandées trois fois?
                              • Comment aurais-tu réagi à ma place?
                              • Partager sur Facebook
                              • Partager sur Twitter
                              Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
                                23 mai 2018 à 1:34:54

                                Son ton ne t'a peut-être pas plu mais je dois admettre qu'il a malheureusement raison. Tu n'es d'ailleurs pas très humble toi non plus pour un "débutant" avec tes "ça ne sert à rien".

                                Tu penses qu'expliquer ton code ne servirait à rien, c'est faux. Ta question est typique d'un débutant qui n'a pas compris que la POO, c'est autre chose que créer des classes avec des attributs. Malgré tes 30 ans d'expérience en C++, SQL et autre, je trouve ton jugement complètement à côté de la plaque concernant Java. Le fait-même que tu ne le vois pas montre que tu n'as pas les bases. Je dis ça sans méchanceté, c'est juste mon opinion d'habitué de Java.

                                Erreur n°1 : tu penses ton code en terme d'attributs au lieu de service/fonctionnalité. C'est un raisonnement typique des personnes apprenant Java après un langage procédural ou ayant suivi un tutoriel focalisé sur la syntaxe, comme celui du site (malgré tout le respect que j'ai pour Cyrille Herby qui m'a fait découvrir et aimer Java). En Java, il faut placer son raisonnement à un niveau plus haut en se demandant non pas "de quel attribut j'ai besoin" mais "de quel service j'ai besoin" (service = méthode).

                                Erreur n°2 : au vu de tes questions/réponses, on dirait que tu essayes de reproduire en Java ce que tu connais en C++. Quand on fait ça, en général, on va droit dans le mur. La syntaxe a beau ressembler à C++, on ne programme pas de la même manière dans les deux langages. Même si ça "fonctionne" au final, la plupart du temps, ça donne du code imbuvable et mal fichu.

                                Le but n'est pas de coder pour coder mais de comprendre l'essence de la programmation objet afin de faire du code plus modulable, maintenable, réutilisable. Là, tu ne vas pas coder plus finement juste parce que tu as un code "qui marche".

                                Après, je ne doute pas que tu y viendras un jour ou l'autre. Je trouve juste que tu loupes une bonne occasion d'appréhender les bonnes pratiques et la philosophie de la POO en Java dès le départ. Tu as quoi à perdre ? Au pire, on te donne un conseil inutile Au mieux, tu fais un bond dans la compréhension du langage. Mais ne pas vouloir en profiter parce que tu te sens supérieur et que d'après ton jugement, "ce n'est pas la peine", encore une fois, je trouve ça dommage.

                                Bonne soirée

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  23 mai 2018 à 1:58:58

                                  brubru777 a écrit:

                                  Malgré tes 30 ans d'expérience en C++, SQL et autre, je trouve ton jugement complètement à côté de la plaque concernant Java. Le fait-même que tu ne le vois pas montre que tu n'as pas les bases. Je dis ça sans méchanceté, c'est juste mon opinion d'habitué de Java.

                                  Oh tiens, j'avais pas vu cette partie de sa réponse

                                  Juste un truc, il n'a -- par chance -- cité aucune technologie.

                                  Mais j'espère pour lui (et surtout pour les gens qu'il a formé) que C++ n'en fait pas partie...

                                  Parce que ... bon, je vais devenir méchant et hargneux, il vaut mieux que je m'arrête là ;)

                                  AldrikKildra a écrit:

                                  Sans doute est-ce le fruit de mes plus de 30 ans comme développeur, analyste/concepteur, formateur et chef de projet alliés à celle d'un père qui a vu grandir des enfants à qui il fallait expliquer les choses simplement.

                                  Tu as, franchement, de la chance que cette partie de ta réponse soit "passée au bleu" lorsque j'y ai répondu, et que je ne veux pas, maintenant que ma réponse a été postée et que j'ai accepté tes excuses, remettre de l'huile sur le feu.

                                  Car si cela n'avait pas été le cas, j'aurais pu être très, que dis-je excessivement désagréable :p

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
                                    23 mai 2018 à 8:04:04

                                    koala01brubru777,

                                    Merci brubru777 pour ton message plein de bon sens. Tu as sans doute raison. Je le reconnais.

                                    Mais je n'ai jamais parlé de C++ que je ne connais pas. Avant Java (que j'apprends), je ne connaissais que des langages procéduraux et des ide tels que PowerBuilder, SqlWindows/Centura, NSDK, Forms/developer 2000 (et des SGBD R ou réseaux, intégrés ou non).  De l'objet, je ne connais que la conception, et plus particulièrement OOA de Shlaer et Mellor.

                                    Sinon, je ne me sens pas supérieur. Bien au contraire. Je suis humble et ne demande qu'à apprendre. On peut se tromper, mais ça ne mérite pas toutes ces foudres.

                                    kaola01 : je ne vais pas en dire plus car tous ces échanges sont totalement stériles. Une nouvelle fois, je te propose de nous serrer la main et d'oublier ces échanges. Quel est l'intérêt de se lâcher ? Sommes-nous ici pour échanger des insultes ou pour nous aider à progresser ? Sache que j'ai parfaitement conscience que tu as souhaité participer à ma progression mais ensuite tout a dérapé (je ne te rejette pas la faute). 

                                    Cela-dit, imagine une personne n'ayant pas encore codé te poser la question que j'ai posée en tout début. Il ne pourra pas te donner son code puisqu'il n'existe pas et donc que répondras-tu ? Enfin, cette question n'attend pas de réponse. Méditons-là !

                                    Une nouvelle fois, bien à vous. Cordialement.

                                    P.S. koala01, tu n'a jamais imaginé que si code complet il y a, il doit rester confidentiel ? Ce n'est pas le cas mais ça aurait pu l'être.

                                    -
                                    Edité par AldrikKildra 23 mai 2018 à 8:40:59

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      24 mai 2018 à 7:10:50

                                      Salut Aldrik,

                                      Désolé si mon ton t'as paru cinglant, il ne l'était pas. Je reconnais que l'expression "à côté de la plaque" n'est pas très gentille. "erroné" aurait été plus sympa. Comme je te l'ai dit, mon message était sans méchanceté.

                                      Pour le C++, je ne sais pas d'où ça m'est sorti. Sûrement le fait de ton raisonnement "procédural", je l'ai assumé un peu hâtivement par généralité, je le reconnais.

                                      Si j'ai pointé ce que je pensais être tes erreurs, ce n'est pas pour te critiquer, c'est ce que j'aurais voulu pouvoir t'expliquer si on avait su à quoi servait ton code. Si effectivement, tu n'avais aucun code, ma première réponse était probablement la bonne. Mais sache que suivant ta code, la réponse peut varier du tout au tout.

                                      Je n'ai rien contre les langages procéduraux. Ils ne sont ni meilleurs ni plus mauvais, C'est juste un autre paradigme. Le passage procédural -> POO est parfois un peu difficile. Ce que je décris, c'est juste ce que j'ai constaté chez de très nombreux débutants en POO, y compris moi-même quand j'ai commencé. En aucun cas, je ne te jette la pierre. Et c'est pour te mettre sur les bons rails que je t'en parle, pas pour dire du mal.

                                      Sur ce, je te souhaite un bon apprentissage de Java. C'est un super langage bien sympa. Si tu as à nouveau besoin d'aide, n'hésite pas. :)

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        24 mai 2018 à 11:02:07

                                        Merci brubru777 pour ce gentil message.

                                        Bien entendu je n'hésiterai pas à revenir vers toi si j'ai besoin d'aide.

                                        Bien à toi.

                                        :)

                                        • Partager sur Facebook
                                        • Partager sur Twitter

                                        Récupérer l'instance d'une classe (un objet)

                                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                        • Editeur
                                        • Markdown