Partage
  • Partager sur Facebook
  • Partager sur Twitter

Accès variable classe fille

    4 décembre 2016 à 19:46:29

    Bonjour, je me permets de solliciter votre aide car j'ai un problème sur la création d'un jeu en java pour un projet dans le cadres de mes études.

    Le jeu consiste en gros à faire intéragir des vaisseaux et des planètes, le tout stocker dans une "Galaxie" représentée pour une grille en 2D.

    J'ai donc mon tableau 2D que j'ai déclaré comme étant un tableau d'objets "Entity". Entity étant la classe mère dont héritent mes classes "Vaisseau" et "Planete".

    Le but de cet héritage était de pouvoir stocker à la fois des vaisseaux et des planètes dans un même tableau. En revanche, un problème arrive lorsqu'il faut interagir avec ces vaisseaux et ces planètes.

    En effet, je ne peux pas accéder aux variables de mes classes filles (integrite sur l'image) à travers mon tableau contenant des "Entity". Cela parait logique car on pourrait ne pas savoir si le tableau contient un vaisseau ou une planète. C'est pourquoi j'ai essayé en utilisant l'expression "instanceof" sans succès.

    La seule solution que j'ai trouvé actuellement serait de créer deux tableaux (un pour les vaisseaux et l'autre pour les planètes) et d'imaginer une 'superposition des deux'.

    J'espère que vous saurez m'aider, merci de prendre le temps de lire mon post

    (integrite étant une variable propre à la classe vaisseau et non à la classe 'Entity' ni 'Planete')

    • Partager sur Facebook
    • Partager sur Twitter
      4 décembre 2016 à 20:22:32

      Je ne suis pas sûr à 100%, mais essaies :

      ((Vaisseau)GalaxyWars.galaxie.tabGalaxie[x][y]).integrite = 0;

      En gardant le test avec instanceof.

      • Partager sur Facebook
      • Partager sur Twitter
        4 décembre 2016 à 23:40:05

        Bonsoir,

        Tu va éventuellement devoir faire un tour coté patron de conception car là, il y à un problème de conception. De plus le instanceof n'est pas très POO.

        Ce que tu peux tester dans un premier temps, si les classes Plante et Vaisseau n'ont besoin que d'un appel à une méthode pour qu'on puisse interagir avec, tu peux faire en sorte que ta classe mère propose un service (abstract) que tu redéfinis dans chacun des fils.

        Exepmle :

        abstract class Entity {
            // Des attributs, méthodes, etc.
        
            /**
             * Méthode à redéfinir dans les filles permettant d’interagir avec l'objet
             */
            abstract void interact();
        }
        
        class Planete extends Entity {
            // Des attributs, méthodes, etc.
        
            @Override
            public void interact() {
                System.out.println("Je suis une planète");
            }
        }
        
        class Vaisseau extends Entity {
            // Des attributs, méthodes, etc.
        
            @Override
            public void interact() {
                System.out.println("Je suis un vaisseau");
            }
        }



        -
        Edité par Heziode 4 décembre 2016 à 23:42:36

        • Partager sur Facebook
        • Partager sur Twitter
        Ensemble créons l'avenir !
          5 décembre 2016 à 0:09:31

          victorm951 a écrit:

          Je ne suis pas sûr à 100%, mais essaies :

          ((Vaisseau)GalaxyWars.galaxie.tabGalaxie[x][y]).integrite = 0;

          En gardant le test avec instanceof.


          Tout d'abord merci beaucoup pour vos réponses rapides.

          Alors je crois avoir déjà essayé cette technique mais ça n'avait pas fonctionné.

          Dans le doute je vais réessayer et vous tenir au courant.


          EDIT : Ca semble fonctionner, merci !!

          Heziode a écrit:

          Bonsoir,

          Tu va éventuellement devoir faire un tour coté patron de conception car là, il y à un problème de conception. De plus le instanceof n'est pas très POO.

          Ce que tu peux tester dans un premier temps, si les classes Plante et Vaisseau n'ont besoin que d'un appel à une méthode pour qu'on puisse interagir avec, tu peux faire en sorte que ta classe mère propose un service (abstract) que tu redéfinis dans chacun des fils.

          Exepmle :

          abstract class Entity {
              // Des attributs, méthodes, etc.
          
              /**
               * Méthode à redéfinir dans les filles permettant d’interagir avec l'objet
               */
              abstract void interact();
          }
          
          class Planete extends Entity {
              // Des attributs, méthodes, etc.
          
              @Override
              public void interact() {
                  System.out.println("Je suis une planète");
              }
          }
          
          class Vaisseau extends Entity {
              // Des attributs, méthodes, etc.
          
              @Override
              public void interact() {
                  System.out.println("Je suis un vaisseau");
              }
          }



          -
          Edité par Heziode il y a 24 minutes



          Malheureusement j'ai plusieurs interactions possible et totalement différentes donc ça semble compliqué de faire cette méthode :/

          Mais je retiens, ça peut servir si je ne trouve vraiment pas de solution.

          Merci encore et si vous avez d'autres idées, n'hésitez pas

          -
          Edité par Jurcs 5 décembre 2016 à 0:16:25

          • Partager sur Facebook
          • Partager sur Twitter

          Accès variable classe fille

          × 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