Partage
  • Partager sur Facebook
  • Partager sur Twitter

Protection des variables

Langage objet

Sujet résolu
    4 janvier 2009 à 16:12:12

    Bonjour à tous,

    J'ai lu dans les cours que les variables membres doivent avoir l'attribut private ou protected. Cela est-il valable pour les variables membres de types objets ? Par exemple dans la programmation graphique quand j'utilise des variables(objet) bouton, libellé, champ textuel, etc.

    Par ailleurs dans le casting suivant:
    JButton bouton = (JButton)evenement.get.source()
    quels changements ont lieu avec le casting et sans le faire( par exemple en terme de représentation en mémoire)

    Merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      4 janvier 2009 à 17:30:40

      pour le cast :o suffit d'aller voir la doc et de voir quel type d'objet te renvois evenement.getsource()
      :o

      si c'est un JButton .... le cast ne sert a rien ...
      si ça n'est pas un JButton :p tu ne gagnera pas de place en mémoire .... c'est juste que ça sera un pointeur vers un JButton plustot qu'un autre type d'objet

      (imagine :p si le faite de faire un cast supprimait une partie de ton objet :p
      tu pourrais pas retransformer l'objet en son type d'origine :o
      • Partager sur Facebook
      • Partager sur Twitter
        5 janvier 2009 à 9:44:22

        Merci pour votre réponse très claire.
        Et concernant ma première question, avez-vous des explications à me donner.
        Encore merci
        • Partager sur Facebook
        • Partager sur Twitter
          5 janvier 2009 à 10:16:15

          Hum, il me semble bien que la méthode getSource() de Event retourne un Object, du coup le cast est indispensable, il faut faire un truc du style : if(evt.getSource() instanceof JButton) myBtn = (JButton) evt.getSource; else if( ... ) ..; else throw ...;

          Si tu n'as besoin que des méthodes de la classe JComponent tu peux déclarer un JComponent au début de ta méthode, puis caster vers un JComponent et traiter à la fin. instanceof retourne vrai si l'objet est du type demandé, ou une classe fille même loin dans la hiérarchie.
          • Partager sur Facebook
          • Partager sur Twitter
            5 janvier 2009 à 11:40:11

            pour ce qui est de ta première question :o déclarer private ou protected c'est pas obligatoire pour n'importe quel variable :o
            mais ce n'est pas safe =)
            en gros, le principe de faire ça c'est pour empecher les gens de faire ce qu'ils veulent avec les variable :o
            imagine que tu a la vie d'un personnage qui va entre 0% et 100%
            tu n'aimerais pas que suite a un soins tu arrive a 150% parce que c'est impossible :o
            donc tu dois "proteger" cette variable pour eviter que quelque part :o suite a une erreur tu la fasse passer a >100%
            pour faire ça tu déclare private et tu créés la fonction
            public void modifier_vie(int modificationdelavie){
                if(vie_actuelle+modificationdelavie<100 ||vie_actuelle+modificationdelavie>0){
                       vie_actuelle = vie_actuelle+modificationdelavie
                }
            }
            


            en faisant celà à partir de maintenant peut importe la fonction qui vas essayer de modifier la vie :) la vie sera toujours comprise entre 0 et 100 ^^

            c'est pareil pour un objet quelconque :o
            les déclarer private ou protected veux dire
            "je ne veux pas que tu fasses ce que tu veux avec cet objet : je dois m'assurer qu'ils reste conforme a l'usage que je veux en faire"

            en plus au final tu y gagnes parce que
            (je reprend mon exemple de la vie )
            avant encapsulation, à chaque fois que tu voulais modifer la vie pour un soins, pour une attaque tu devais a chaque fois vérifier que la vie restait bien entre 0 et 100 ^^

            maintenant tu dois juste faire
            [...]
            modifier_vie(0-Déga_Boule_DeFeux);
            modifier_vie(ValeurDesSoins);
            modifier_vie(0-Attaque_deLepee);
            [...]
            


            tu ne dois plus à chaque fois faire
            if(Personnage.vie-Déga_Boule_DeFeux>0){
            Personnage.vie = Personnage.vie-Déga_Boule_DeFeux
            }
            

            ça va quand même plus vite de n'écrire qu'une seul fois le if non ? et pas a chaque fois :o


            PS:
            je suis en train de me dire que je vais en vitesse faire un script qui fais automatiquement les "set" et les "get" pour chaque variable :p
            ç ferait gagner du temps :p
            • Partager sur Facebook
            • Partager sur Twitter
              5 janvier 2009 à 13:24:43

              Citation : Snooooopy


              je suis en train de me dire que je vais en vitesse faire un script qui fais automatiquement les "set" et les "get" pour chaque variable :p
              ç ferait gagner du temps :p



              si tu utilise éclipse c'est très simple : source>generate Getters and Setters
              • Partager sur Facebook
              • Partager sur Twitter
                5 janvier 2009 à 14:30:53

                hé hé j'utilise BlueJ ^^ j'arrive pas a passer sur un autre :p
                j'adore son interface :p
                • Partager sur Facebook
                • Partager sur Twitter

                Protection des variables

                × 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