Menu
Coddy logo textTech

Encapsulation

Fait partie de la section Programmation Orientée Objet du Journey JavaScript de Coddy — leçon 17 sur 56.

L'encapsulation est un processus consistant à combiner des données à l'intérieur d'une classe au sein d'une seule unité.

Cela permet de restreindre l'accès direct aux données de la classe, ce qui nous aide finalement à prévenir toute modification accidentelle des données. 

Voyons l'encapsulation en action avec un exemple simple. Créez un objet de base avec des propriétés publiques :

const user = {
  name: "John",
  email: "john@example.com"
};

N'importe qui peut accéder directement à ces propriétés et les modifier :

user.name = "Jane"; // Facile à modifier de l'extérieur
console.log(user.email); // Facile à accéder de l'extérieur

Une approche plus encapsulée utilise les fermetures (closures) pour masquer les données :

function createUser(name, email) {
  // Ces variables sont privées (encapsulées)
  let userName = name;
  let userEmail = email;
  
  // Retourne un objet avec des méthodes pour interagir avec les données privées
  return {
    getName: function() {
      return userName;
    },
    getEmail: function() {
      return userEmail;
    },
    setName: function(newName) {
      userName = newName;
    }
  };
}
const encapsulatedUser = createUser("John", "john@example.com");

Maintenant, pour interagir avec les données :

console.log(encapsulatedUser.getName()); // "John"
encapsulatedUser.setName("Jane");
console.log(encapsulatedUser.getName()); // "Jane"

// Impossible d'accéder directement aux données
console.log(encapsulatedUser.userName); // undefined
challenge icon

Défi

On vous donne un code qui utilise l'encapsulation pour protéger les données de l'utilisateur. Votre tâche consiste à ajouter une méthode getAge() pour accéder à l'âge.

Les tests vérifieront :

  • La méthode getAge() existe
  • Elle retourne l'âge correct
  • Les informations sur l'âge restent privées

Sortie attendue :

john_doe

25

Aide-mémoire

L'encapsulation est un processus consistant à combiner des données à l'intérieur d'une classe au sein d'une seule unité et à restreindre l'accès direct à ces données, empêchant ainsi toute modification accidentelle.

Sans encapsulation, les propriétés des objets sont accessibles publiquement :

const user = {
  name: "John",
  email: "john@example.com"
};

user.name = "Jane"; // Peut être modifié directement
console.log(user.email); // Peut être accédé directement

Utilisation des fermetures (closures) pour encapsuler les données :

function createUser(name, email) {
  // Variables privées (encapsulées)
  let userName = name;
  let userEmail = email;
  
  // Méthodes publiques pour interagir avec les données privées
  return {
    getName: function() {
      return userName;
    },
    getEmail: function() {
      return userEmail;
    },
    setName: function(newName) {
      userName = newName;
    }
  };
}

const encapsulatedUser = createUser("John", "john@example.com");
console.log(encapsulatedUser.getName()); // "John"
encapsulatedUser.setName("Jane");
console.log(encapsulatedUser.getName()); // "Jane"
console.log(encapsulatedUser.userName); // undefined (données privées non accessibles)

Essayez vous-même

import { createUser } from './createUser.js';

// Code de test - ne pas modifier
const user = createUser("john_doe", 25);
console.log(user.getUsername()); // Devrait afficher "john_doe"
console.log(user.getAge());      // Devrait afficher 25

quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Programmation Orientée Objet