Partage
  • Partager sur Facebook
  • Partager sur Twitter

Multiples instances

Sujet résolu
    16 août 2017 à 10:05:32

    Bonjour à tous,
    Je débute en Java et en POO en général, et j'aurais besoin de vos lumières. Ma question est sans doute très simple pour les connaisseurs. Je prends volontairement un exemple fictif élémentaire.
    Imaginons qu'on souhaite développer une application avec deux classes, ObjA et ObjB. On souhaite établir une relation de type 1-N entre les deux, c'est à dire qu'un objet de classe ObjA peut contenir entre 0 et N instances de ObjB. On suppose qu'on stocke les données de l'application dans une base de données (via une connexion JDBC).
    Dans les cours que j'ai pu lire, je vois qu'on peut modéliser cela de la façon suivante :
    Classe ObjA :
       Attributs :
          listeObj : ArrayList<ObjB>
          ...
    Il peut être de plus nécessaire, lorsqu'on travaille sur une instance de ObjB, d'accéder à l'instance de ObjA à laquelle il appartient. J'imagine qu'on doit donc avoir un attribut dédié dans la classe ObjB :
    Classe ObjB :
       Attributs :
          pere : ObjA
          ...
    Imaginons maintenant que le nombre d'instances de ObjB contenues dans une instance de ObjA soit énorme. Lorsqu'on souhaite instanciée un objet ObjB donné, il va falloir instancier également l'objet ObjA auquel il appartient, et donc également instancier tous les objets ObjB qu'il contient. Par exemple, si on souhaite simplement afficher dans une IHM une instance de ObjB donnée, il faut instancier également toutes les autres instances ObjB appartenant à la même instance ObjA.
    Est-ce bien comme cela que l'on procède en pratique ? Sinon, y a-t-il d'autres façons de modéliser les choses afin d'optimiser les performances de l'application ?
    Désolé pour cette question sans doute bête, et merci par avance pour vos réponses !!
    Marc
    • Partager sur Facebook
    • Partager sur Twitter
      16 août 2017 à 10:37:45

      Salut. Non, ta question n'est pas du tout bête. Dans ce genre de situation on fera ce qu'on appelle "initialisation paresseuse" ou "lazy loading" en anglais.

      clas ObjA
      {
          private List<ObjB> fils;
      
          public ObjA()
          {
              //initialisation des autres attributs
          }
      
          public List<ObjB> getFils() //dans un environnement mono-thread
          {
              if(fils == null)
              {
                  //charger les fils
              }
      
              return fils;
          }
      }
      
      class ObjB
      {
          ObjB pere;
      }

      Donc on ne charge pas systématiquement les fils, mais on le fait au moment où on en a besoin(et une seule fois). De l'autre côté(ObjB) ce n'est pas grave car il n'y a q'un seul père.

      J'ai répondu à ta question?

      -
      Edité par kulturman 17 août 2017 à 10:30:31

      • Partager sur Facebook
      • Partager sur Twitter
        16 août 2017 à 10:55:37

        Salut kulturman,

        Merci beaucoup pour ton retour rapide ! Oui ça répond tout à fait à ma question. Je n'avais pas réalisé qu'on pouvait manipuler des objets sans que tous leurs attributs soient renseignés.

        Encore merci !!

        Marc

        • Partager sur Facebook
        • Partager sur Twitter
          16 août 2017 à 10:59:23

          Y a pas de quoi, bonne suite.
          • Partager sur Facebook
          • Partager sur Twitter
            17 août 2017 à 9:06:13

            Bonjour,

            Sinon, si c'est pour utiliser avec une base de donnée, au lieu de stocker une liste de ObjB dans ObjA, tu peux juste stocker un unique ObjA dans chaque ObjB (son parent). La liste des ObjB est inutile (information redondante) C'est totalement équivalent et ça résout ton problème.

            -
            Edité par brubru777 17 août 2017 à 9:10:37

            • Partager sur Facebook
            • Partager sur Twitter

            Multiples instances

            × 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