JavaRush /Blog Java /Random-FR /Principes d'encapsulation en Java

Principes d'encapsulation en Java

Publié dans le groupe Random-FR
Bonjour! La conférence d'aujourd'hui sera consacrée à l'encapsulation et nous la commencerons tout de suite par des exemples :) Devant vous se trouve une machine à soda familière. J'ai une question à vous poser : comment ça marche ? Essayez de répondre en détail : d'où vient le verre, comment la température à l'intérieur est maintenue, où est stockée la glace, comment la machine comprend quel sirop ajouter, etc. Très probablement, vous n’avez pas de réponses à ces questions. Eh bien, peut-être que tout le monde n'utilise pas de telles machines ; elles ne sont pas si populaires de nos jours. Essayons de donner un autre exemple. Quelque chose que vous savez utiliser plusieurs fois par jour. Ah, j'ai une idée ! Principes d'encapsulation - 2 Dites-nous comment fonctionne le moteur de recherche Google . Comment recherche-t-il exactement les informations en fonction des mots que vous avez saisis ? Pourquoi ces résultats sont-ils en haut et pas d’autres ? Même si vous utilisez Google quotidiennement, vous ne le savez probablement pas. Mais ce n'est pas important. Après tout, vous n’avez pas besoin de le savoir. Vous pouvez saisir des requêtes dans un moteur de recherche sans penser à son fonctionnement exact. Vous pouvez acheter du soda dans un distributeur automatique sans savoir comment il fonctionne. Vous pouvez conduire une voiture sans vous plonger dans le fonctionnement du moteur à combustion interne et sans aucune connaissance en physique, même au niveau scolaire. Tout cela est possible grâce à l'un des grands principes de la programmation orientée objet - l'encapsulation . En lisant divers articles sur ce sujet, vous avez probablement découvert qu'il existe deux concepts communs en programmation : l'encapsulation et le masquage . Et par le mot « encapsulation », les auteurs entendent une chose ou une autre (en l'occurrence). Nous allons décomposer les deux termes afin que vous ayez une compréhension complète. Le sens original du mot « encapsulation » en programmation est la combinaison de données et de méthodes de travail avec ces données dans un seul package (« capsule »). En Java, la classe agit comme un package capsule . Une classe contient à la fois des données (champs de classe) et des méthodes permettant de travailler avec ces données. Principes d'encapsulation - 3 Cela vous semble évident, mais dans d’autres concepts de programmation, tout fonctionne différemment. Par exemple, en programmation fonctionnelle, les données sont strictement séparées des opérations sur celles-ci. En POO (programmation orientée objet), les programmes sont constitués de classes capsules, qui sont à la fois des données et des fonctions permettant de les utiliser. Parlons maintenant de se cacher . Comment se fait-il que nous utilisions toutes sortes de mécanismes complexes sans comprendre comment ils fonctionnent et sur quoi repose leur travail ? C'est simple : leurs créateurs ont fourni une interface simple et conviviale. Sur une machine à soda, l'interface est constituée de boutons sur un panneau. En appuyant sur un bouton, vous sélectionnez le volume du verre. En appuyant sur le deuxième, vous sélectionnez le sirop. Le troisième est responsable de l'ajout de glace. Et c'est tout ce que vous avez à faire. Peu importe la façon dont la machine est conçue à l'intérieur. L'essentiel est qu'il soit conçu de telle manière que pour obtenir du soda, l'utilisateur doit appuyer sur trois boutons . C'est la même chose avec une voiture. Peu importe ce qui se passe en lui. L'essentiel est que lorsque vous appuyez sur la pédale droite, la voiture avance et lorsque vous appuyez sur la pédale gauche, elle ralentit . C’est précisément l’essence de la dissimulation. Tous les « intérieurs » du programme sont cachés à l'utilisateur. Pour lui, cette information est superflue et inutile. L'utilisateur a besoin du résultat final, pas du processus interne. Prenons l'exemple de la classeAuto :
public class Auto {

   public void gas() {

       /*some complicated things are happening inside the car
       as a result of which it goes forward*/
   }

   public void brake() {

       /*some complicated things are happening inside the car
       as a result of which it slows down*/
   }

   public static void main(String[] args) {

       Auto auto = new Auto();

       // How everything looks to the user

       //pressed one pedal - went
       auto.gas();

       //pressed another pedal - braked
       auto.brake();
   }
}
Voici à quoi ressemble le masquage d’implémentation dans un programme Java. Tout est comme dans la vraie vie : l'utilisateur dispose d'une interface (méthodes). S'il a besoin de la voiture dans le programme pour effectuer une action, il lui suffit d'appeler la méthode souhaitée. Et ce qui se passe à l'intérieur de ces méthodes, ce sont des informations inutiles, l'essentiel est que tout fonctionne comme il se doit. Ici, nous avons parlé de cacher l'implémentation . En plus de cela, Java cache également des données . Nous en avons parlé dans la conférence sur les getters et les setters , mais cela ne ferait pas de mal de vous le rappeler. Par exemple, nous avons une classe Cat:
public class Cat {

   public String name;
   public int age;
   public int weight;

   public Cat(String name, int age, int weight) {
       this.name = name;
       this.age = age;
       this.weight = weight;
   }

   public Cat() {
   }

   public void sayMeow() {
       System.out.println("Meow!");
   }


}
Peut-être vous souvenez-vous du dernier cours quel est le problème de ce cours ? Sinon, rappelons-le. Le problème est que ses données (champs) sont ouvertes à tous, et un autre programmeur peut facilement créer dans le programme un chat sans nom avec un poids de 0 et un âge de -1000 ans :
public static void main(String[] args) {

   Cat cat = new Cat();
   cat.name = "";
   cat.age = -1000;
   cat.weight = 0;

}
Dans une telle situation, vous pouvez surveiller de près si l'un de vos collègues crée des objets avec le mauvais état, mais il serait bien préférable d'exclure la possibilité même de créer de tels « mauvais objets ». Principes d'encapsulation - 4 Ils nous aident à cacher les données :
  1. modificateurs d'accès ( privé , protégé , package par défaut ) ;
  2. getters et setters.
Nous pouvons, par exemple, vérifier si quelqu'un essaie d'attribuer au chat un numéro négatif en fonction de son âge. Comme nous l'avons dit plus tôt, les auteurs de divers articles sur l'encapsulation parlent soit d'encapsulation (combinant des données et des méthodes), soit de masquage, soit des deux. Java possède les deux mécanismes (ce n'est pas nécessairement le cas dans les autres langages POO), cette dernière option est donc la plus correcte. L'utilisation de l'encapsulation nous offre plusieurs avantages importants :
  1. Surveillance du bon état de l'objet. Il y en avait des exemples ci-dessus : grâce au setter et au modificateur private, nous avons protégé notre programme des chats de poids 0.

  2. Convivialité grâce à l'interface. Nous laissons uniquement les méthodes « à l’extérieur » pour l’accès des utilisateurs. Il lui suffit de les appeler pour obtenir le résultat, et il n’a pas du tout besoin d’entrer dans les détails de leur travail.

  3. Les modifications apportées au code n'affectent pas les utilisateurs. Nous effectuons toutes les modifications dans les méthodes. Cela n'affectera pas l'utilisateur : il a écrit auto.gas() pour l'essence de la voiture, donc il l'écrira. Et le fait que nous ayons modifié quelque chose dans le fonctionnement de la méthode gas() lui restera invisible : il, comme auparavant, recevra simplement le résultat souhaité.
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION