Comprendre la POO sous Javascript

Rappelons nous des concepts fondamentales de la POO sous Javascript

  • 4 min read
Photo by ChatGPT

La Programmation Orientée Objet (POO) en JavaScript

La programmation orientée objet (POO) en JavaScript repose sur des concepts fondamentaux comme les objets, les classes, l’héritage, l’encapsulation et le polymorphisme. JavaScript étant un langage flexible, il supporte la POO de plusieurs manières : via des objets littéraux, des fonctions constructrices, ou encore via l’approche moderne avec class (introduite avec ES6).

1. Les objets en JavaScript

Un objet est une structure contenant des propriétés (variables) et des méthodes (fonctions).

Création d’un objet littéral

const utilisateur = {
  nom: "Alice",
  age: 25,
  sePresenter: function () {
    console.log(`Bonjour, je m'appelle ${this.nom} et j'ai ${this.age} ans.`);
  }
};

// Utilisation
utilisateur.sePresenter();

🔹 this fait référence à l’objet courant.

2. Les fonctions constructrices

Avant ES6, JavaScript utilisait des fonctions constructrices pour créer plusieurs objets similaires.

function Utilisateur(nom, age) {
  this.nom = nom;
  this.age = age;
  this.sePresenter = function () {
    console.log(`Bonjour, je suis ${this.nom}, j'ai ${this.age} ans.`);
  };
}

// Instanciation
const user1 = new Utilisateur("Alice", 25);
const user2 = new Utilisateur("Bob", 30);

user1.sePresenter();
user2.sePresenter();

🔹 new Utilisateur("Alice", 25) crée une nouvelle instance de Utilisateur.

3. Utilisation des prototype

Le problème avec les fonctions constructrices est que chaque instance possède sa propre copie des méthodes. Une meilleure approche est d’utiliser prototype pour partager des méthodes entre instances.

function Utilisateur(nom, age) {
  this.nom = nom;
  this.age = age;
}

Utilisateur.prototype.sePresenter = function () {
  console.log(`Bonjour, je suis ${this.nom}, j'ai ${this.age} ans.`);
};

// Instanciation
const user1 = new Utilisateur("Alice", 25);
const user2 = new Utilisateur("Bob", 30);

user1.sePresenter();
user2.sePresenter();

🔹 Utilisateur.prototype.sePresenter permet d’économiser de la mémoire en évitant de dupliquer la méthode pour chaque instance.

4. L’approche moderne avec class (ES6)

Avec ES6, JavaScript introduit class qui simplifie la création d’objets et l’héritage.

class Utilisateur {
  constructor(nom, age) {
    this.nom = nom;
    this.age = age;
  }

  sePresenter() {
    console.log(`Bonjour, je suis ${this.nom}, j'ai ${this.age} ans.`);
  }
}

// Instanciation
const user1 = new Utilisateur("Alice", 25);
const user2 = new Utilisateur("Bob", 30);

user1.sePresenter();
user2.sePresenter();

🔹 constructor() est la méthode spéciale appelée lors de la création d’un objet.

5. L’héritage

L’héritage permet de créer une classe dérivée à partir d’une autre classe.

class Utilisateur {
  constructor(nom, age) {
    this.nom = nom;
    this.age = age;
  }

  sePresenter() {
    console.log(`Bonjour, je suis ${this.nom}, j'ai ${this.age} ans.`);
  }
}

class Admin extends Utilisateur {
  constructor(nom, age, role) {
    super(nom, age); // Appelle le constructeur de la classe parent
    this.role = role;
  }

  afficherRole() {
    console.log(`${this.nom} est un ${this.role}.`);
  }
}

// Instanciation
const admin1 = new Admin("Charlie", 35, "Administrateur");

admin1.sePresenter();
admin1.afficherRole();

🔹 super(nom, age) appelle le constructeur de la classe parent.

6. L’encapsulation (privatisation des propriétés)

Depuis ES2020, on peut rendre des propriétés privées en les préfixant avec #.

class Utilisateur {
  #motDePasse; // Propriété privée

  constructor(nom, age, motDePasse) {
    this.nom = nom;
    this.age = age;
    this.#motDePasse = motDePasse;
  }

  verifierMotDePasse(mdp) {
    return this.#motDePasse === mdp;
  }
}

const user = new Utilisateur("Alice", 25, "secret123");

console.log(user.nom); // ✅ Alice
console.log(user.#motDePasse); // ❌ Erreur : propriété privée
console.log(user.verifierMotDePasse("secret123")); // ✅ true

🔹 #motDePasse est inaccessible en dehors de la classe.

7. Le polymorphisme

Le polymorphisme permet à une méthode d’être redéfinie dans une classe enfant.

class Utilisateur {
  sePresenter() {
    console.log("Je suis un utilisateur.");
  }
}

class Admin extends Utilisateur {
  sePresenter() {
    console.log("Je suis un administrateur.");
  }
}

const user = new Utilisateur();
const admin = new Admin();

user.sePresenter();  // "Je suis un utilisateur."
admin.sePresenter(); // "Je suis un administrateur."

🔹 La méthode sePresenter() est redéfinie dans Admin.

🎯 Récapitulatif des concepts POO en JavaScript

Concept Explication
Objet Contient des propriétés et des méthodes
Classe Modèle pour créer des objets
Constructeur Initialise un objet à sa création
Héritage Une classe enfant hérite d’une classe parent
Encapsulation Restreint l’accès aux données avec des propriétés privées
Polymorphisme Une méthode peut être redéfinie dans une classe dérivée

🚀 Grâce à ces concepts, vous pouvez structurer votre code de manière plus robuste et réutilisable en JavaScript !

Writter by : RINO Heinrich

Fondateur de Onirtech.Ingénieur en infrastructure et cybersécurité.Chef de projet informatique.Développeur web fullstack.

Recommended for You