Comment garder votre code propre avec l’encapsulation d’objets »wiki utile
L'encapsulation signifie garder quelque chose d'isolé. Si vous mettez quelque chose dans une capsule, le monde extérieur ne peut pas y accéder. L'encapsulation est un concept important dans la programmation orientée objet car elle permet de garder un code complexe gérable.
Pourquoi vous avez besoin de cours
Disons que vous avez une application de zoo pour enfants avec des centaines de milliers de lignes de code. Imaginez maintenant qu'il existe un objet très important qui est au cœur de toute l'application, appelé animal . Et si chaque partie du programme qui était un animal pouvait accéder et changer cet objet?
Un accès illimité causerait beaucoup de chaos. Si un porcelet utilise un animal pour définir ses paramètres, alors l' animal aura des attributs de porcelet . Maintenant, disons qu'une chèvre décide d'utiliser un animal pour définir ses paramètres.
En JavaScript / TypeScript, cela ressemblerait à ceci:
var animal = {name: "piglet", legs: 4, color: "pink", decoration: "snout"}
animal.name = "goat"
animal.decoration = "horns"
La prochaine chose que vous savez, vous avez des chèvres roses et des porcelets avec des cornes. Consultez le code en action dans le bac à sable TypeScript, puis cliquez sur Exécuter pour afficher la sortie de la console.
Si vous apprenez à programmer et que vous voulez de l'inspiration en plus de créer un zoo pour enfants, voici 10 autres projets pour vous inspirer .
Parce que votre base de code est si énorme, cela peut prendre des centaines d'heures pour trouver le code qui donne à vos agneaux le cou de lama et à la laine de vos canetons. Et une fois que vous avez trouvé le code incriminé, vous devrez écrire encore plus de code spaghetti pour empêcher les objets d'interférer les uns avec les autres. Il doit y avoir un meilleur moyen.
La manière de résoudre le problème de chevauchement consiste à définir des objets avec des classes. N'importe quelle partie du code peut créer un objet basé sur la définition de classe. La création d'un objet unique s'appelle l'instanciation. Il garantit que chaque objet créé aura ses propres propriétés. Et ces objets ne pourront pas interférer les uns avec les autres accidentellement.
Les classes ne suffisent pas; Vos variables d'objet ont également besoin d'encapsulation
Nous avons donc décidé que chaque animal a besoin de son propre objet. Créons une classe qui définira nos animaux.
class Animal {
name: string;
legs: number;
color: string;
decoration: string;
constructor(name: string, legs: number, color: string, decoration: string) {
this.name = name;
this.legs = legs;
this.color = color;
this.decoration = decoration;
}
}
Ensuite, créons quelques objets animaux.
let babyDuck = new Animal("baby duck", 2, "yellow", "beak");
let bunny = new Animal("bunny", 4, "gray", "floppy ears");
Jouez avec le code jusqu'à présent.
Maintenant, nous pouvons ajouter tous les animaux que nous voulons sans aucune mutation étrange. Ou pouvons-nous?

Que se passerait-il si un soir, un programmeur fatigué écrivait du code pour éditer un animal à partir de l'application effrayante, mais qu'il éditait le lapin par erreur?
bunny.color = "black";
bunny.legs = 8;
Les lapins araignées ne sont pas cool, mec! C'est aussi grave que lorsque nous n'avons pas encapsulé notre code dans des objets. Faisons en sorte que cela ne se reproduise plus.
La première chose à faire est de rendre nos objets privés . Cela signifie que rien ne peut modifier nos variables directement après leur création. Voici le code montrant que la modification des variables privées crée une erreur .
Les variables doivent cependant être modifiables. Et c'est là qu'interviennent les getters et les setters .
Les getters et les setters sont des fonctions qui accèdent aux variables et les modifient de manière contrôlée. Les setters peuvent définir des limites sur les données modifiées. Et les getters peuvent modifier les données récupérées.
Voici à quoi ressemble notre classe avec les fonctions get et set pour contrôler le nombre de jambes.
class Animal {
private _name: string;
private _legs: number;
private _color: string;
private _decoration: string;
constructor(name: string, legs: number, color: string, decoration: string) {
this._name = name;
this._legs = legs;
this._color = color;
this._decoration = decoration;
}
get legs() {
return this._legs;
}
set legs(legCount: number) {
if(legCount > 1 && legCount < 5) {
this._legs = legCount;
}
}
}
Apprendre l'encapsulation et éviter les variables globales
Voici le code final. Récapitulez ce que vous avez appris pour vous assurer de votre compréhension:
- Ajoutez des getters et des setters pour le reste des variables.
- Renvoie le nom de l'animal sous forme de balise span: <span> lama </span>
- Modifiez la variable de décoration pour permettre plusieurs décorations. Créez un getter et un setter appropriés pour refléter ce changement.
Si vous voulez que votre code fonctionne comme une machine bien huilée, vous devez absolument utiliser l'encapsulation. Évitez à tout prix les variables globales. Et si vous avez besoin de partager des variables entre des objets, vous pouvez consulter la documentation TypeScript sur la façon de créer des variables de classe / statiques pour savoir comment.