FRFAM.COM >> Famille >> Technologie &Innovation >> Informatique

Maintenir un code propre grâce à l'encapsulation en programmation orientée objet

L'encapsulation consiste à isoler les données et les méthodes d'un objet, rendant leur accès externe impossible sans contrôle. Ce pilier de la programmation orientée objet (POO) est essentiel pour gérer un code complexe et éviter les bugs imprévus.

Pourquoi utiliser des classes ?

Imaginez une application de zoo pour enfants comptant des centaines de milliers de lignes de code. Au cœur de cette application se trouve un objet central nommé animal. Si n'importe quelle partie du programme peut y accéder et le modifier librement, le chaos s'installe rapidement.

Par exemple, un porcelet modifie animal avec ses attributs (nom : "porcelet", pattes : 4, couleur : "rose", décoration : "museau"), puis une chèvre le surcharge (nom : "chèvre", décoration : "cornes"). Résultat : des chèvres roses et des porcelets cornus !

En JavaScript/TypeScript, cela ressemble à ceci :

let animal = { nom: "porcelet", pattes: 4, couleur: "rose", decoration: "museau" };
animal.nom = "chèvre";
animal.decoration = "cornes";
console.log(animal); // { nom: "chèvre", pattes: 4, couleur: "rose", decoration: "cornes" }

Dans une base de code massive, traquer ces interférences peut prendre des centaines d'heures, et les correctifs génèrent souvent plus de code spaghetti. La solution : les classes.

Les classes permettent d'instancier des objets indépendants, chacun avec ses propres propriétés, évitant ainsi les interférences accidentelles.

Les classes seules ne suffisent pas : encapsulez vos propriétés

Créons une classe Animal :

class Animal {
  nom: string;
  pattes: number;
  couleur: string;
  decoration: string;

  constructor(nom: string, pattes: number, couleur: string, decoration: string) {
    this.nom = nom;
    this.pattes = pattes;
    this.couleur = couleur;
    this.decoration = decoration;
  }
}

let caneton = new Animal("caneton", 2, "jaune", "bec");
let lapin = new Animal("lapin", 4, "gris", "oreilles tombantes");

Cela fonctionne, mais un développeur fatigué pourrait encore modifier directement :

lapin.couleur = "noir";
lapin.pattes = 8; // Lapin-araignée !

Pour prévenir cela, rendez les propriétés privées (convention avec _ ou # en TS moderne) et utilisez getters et setters pour un contrôle granulaire.

Exemple avec contrôle sur les pattes :

class Animal {
  private _nom: string;
  private _pattes: number;
  private _couleur: string;
  private _decoration: string;

  constructor(nom: string, pattes: number, couleur: string, decoration: string) {
    this._nom = nom;
    this._pattes = pattes;
    this._couleur = couleur;
    this._decoration = decoration;
  }

  get pattes(): number {
    return this._pattes;
  }

  set pattes(pattes: number) {
    if (pattes > 0 && pattes < 9) { // Limite réaliste
      this._pattes = pattes;
    }
  }
}
Maintenir un code propre grâce à l encapsulation en programmation orientée objet

Maîtrisez l'encapsulation et évitez les variables globales

Code final avec exos pour consolider :

  • Ajoutez getters/setters pour toutes les propriétés.
  • Retournez le nom encapsulé dans une balise <span> : lama.
  • Gérez decoration comme un tableau pour plusieurs décorations.

L'encapsulation rend votre code modulaire, maintenable et robuste. Fuie les variables globales ; pour le partage, préférez les propriétés statiques de classe (voir docs TypeScript).

Si vous débutez, explorez 10 projets inspirants comme ce zoo pour pratiquer !

[]