Partage
  • Partager sur Facebook
  • Partager sur Twitter

Pourquoi instancier la classe principale ?

Sujet résolu
    7 février 2021 à 10:04:07

    Bonjour.

    Bon voilà ça fait maintenant 3 mois que j'utilise Java et je n'ai toujours pas compris l'utilité évidente d'instancier la classe principale.

    Pourquoi ne pas tout simplement mettre le code dans main() ?

    • Partager sur Facebook
    • Partager sur Twitter
      7 février 2021 à 10:08:40

      Bonjour,

      Ce que tu dis n'a pas de sens. Peux-tu donner un exemple concret, stp ? (simple, de préférence)

      • Partager sur Facebook
      • Partager sur Twitter
        7 février 2021 à 10:14:22

        Il n' y a pas de classe principale, il peut y avoir une classe (ou plusieurs) contenant la méthode main qui est le point d'entrée de l'application.

        Tu peux tout mettre dans la méthode main, rien ne t'en empêche, mais ton application sera difficile à tester, moins maintenable, moins réutilisable, moins lisible et tu seras maudit sur 7 générations par les membres du Saint OO.

        • Partager sur Facebook
        • Partager sur Twitter
          10 février 2021 à 14:47:19

          Ok :D donc si j'ai bien compris, on a l'habitude de faire
          class MainClass
          {
              public MainClass ()
              {
                 System.out.println("banane");
              }
          
              public static void main (String[] args)
              {
                  MainClass mc = new MainClass()
              }
          }
          par convention et pour donner moins d'importance à la fonction public static void main (String[] args) par ce que c'est pas très Orienté objet sinon.

          -
          Edité par VictorCurie-Ismard 10 février 2021 à 14:48:16

          • Partager sur Facebook
          • Partager sur Twitter
            10 février 2021 à 15:32:56

            Euh non... E ne sais pas d'où tu as sorti cette façon de faire mais personne ne programme comme ça. En tout cas, personne de sensé. :p

            L'intanciation de MainClass ne sert strictement à rien. Ce programme n'a rien d'orienté objet.  En voici une version "corrigée".

            class MainClass
            {
                public static void main (String[] args)
                {
                   System.out.println("banane");
                }
            }



            • Partager sur Facebook
            • Partager sur Twitter
              10 février 2021 à 17:06:23

              Et bien la dernière personne que j'ai vu faire new MainClass(),

              c'est lui -> https://www.youtube.com/watch?v=WHwu4Z-kots

              Sinon il y a lui -> https://www.youtube.com/watch?v=SQae_yJBK1c&t=413s

              lui -> https://www.youtube.com/watch?v=Cxp_HvXZh6g

              lui -> https://www.youtube.com/watch?v=noFj3yo6X7s&t=165

              et quelques centaines autres encore, je pense...

              C'est sûr que ça sert surtout à rajouter des fonctions en plus... :lol:

              • Partager sur Facebook
              • Partager sur Twitter
                10 février 2021 à 22:03:32

                Il y a une différence entre la première vidéo qui introduit un constructeur inutile et les suivantes qui instancient des objets (comme des fenêtres).

                Un constructeur sert à initialiser un objet.


                Dans la vidéo 1, MainClass n'a ni attributs ni méthodes. Cette classe ne crée pas d'objet.

                Dans la vidéo 2, le constructeur instancie une fenêtre (qui hérite de JFrame) et le constructeur initialise son titre. Idem pour les vidéos suivantes.

                • Partager sur Facebook
                • Partager sur Twitter
                  11 février 2021 à 8:11:17

                  C'est une façon de faire qu'on retrouve dans les petits exemples, et qui n'a rien d'obligatoire. Il y a plusieurs raisons à cette pratique (douteuse, en fait).

                  Historique : on la retrouve dans les premiers bouquins  faits par Sun pour évangéliser. Ca dérive d'exemples ou on fait des trucs lançables comme applets (sous contrôle d'un navigateur) et en standalone. Vous savez ce que c'est, quand on produit un cours, on repompe bêtement sans se demander pourquoi on faisait comme ça.

                  Pedagogique : si vous enseignez java comme premier langage, et que vous avez l'intention d'orienter sur les objets, il y a une difficulté, la methode main est statique. Et vous etes confronté à public static void, qui font beaucoup de choses a raconter a des gens qui n'y connaissent rien, et ne savent même pas ce qu'est une variable.

                  La solution  crado, c'est ce new qui crée une instance, et hop, le code de l'exercice  dans le constructeur.

                  C'est ça ou (je prefere)  utiliser des méthodes statiques. Ce qui est pertinent pour des exercices genre afficher la table de multiplication.

                  Bref dans les deux cas, on en est à "Faut écrire ça, on vous expliquera quand vous serez grand". Sauf que le truc de créer une instance est pourri (techniquement c'est un singleton, parce qu'on n'a qu'un System.out....)

                  -
                  Edité par michelbillaud 11 février 2021 à 8:14:36

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Pourquoi instancier la classe principale ?

                  × 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