Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Travail avec les Propriétés Privées dans les Classes | Maîtrise des Classes et de l'Héritage en JavaScript
Maîtrise Avancée de JavaScript

bookTravail avec les Propriétés Privées dans les Classes

En programmation orientée classe, il existe souvent des situations où il est nécessaire de limiter l'accès direct à certaines propriétés afin de protéger l'intégrité des données et de contrôler la manière dont elles sont modifiées.

Que sont les propriétés privées ?

En JavaScript, les propriétés de classe sont généralement publiques, ce qui signifie qu'elles peuvent être consultées et modifiées depuis l'extérieur de la classe. Cependant, il existe des situations où il est nécessaire de restreindre l'accès à certaines propriétés, afin de garantir qu'elles ne puissent être consultées ou modifiées qu'à l'intérieur de la classe elle-même. Ce sont les propriétés privées.

Les propriétés privées permettent de créer une séparation claire entre le fonctionnement interne de la classe et le code externe. Elles sont utiles pour masquer des données sensibles ou empêcher des modifications involontaires d'une propriété depuis l'extérieur de la classe.

C'est comparable au moteur d'une voiture. Vous pouvez conduire la voiture et interagir avec ses commandes, mais vous n'avez pas accès directement aux composants du moteur pendant la conduite. Le moteur est protégé contre toute manipulation externe, et seuls des mécaniciens autorisés (méthodes de la classe) peuvent effectuer des ajustements.

Comment déclarer et utiliser des champs privés dans une classe

En JavaScript, les propriétés privées sont déclarées à l'aide de la syntaxe # (introduite avec ES2020). En préfixant le nom d'une propriété par #, celle-ci devient privée, ce qui signifie qu'elle ne peut être consultée qu'à l'intérieur de la classe elle-même.

12345678910111213141516171819202122
class Animal { #type; // Declaring a private field constructor(name, type) { this.name = name; this.#type = type; // Assigning a value to the private field } getInfo() { return `${this.name} is a ${this.#type} animal.`; } changeType(newType) { this.#type = newType; // Modifying the private field within the class } } const lion = new Animal('Lion', 'Wild'); console.log(lion.getInfo()); // Output: Lion is a Wild animal // Attempt to access private field directly (this will cause an error) console.log(lion.#type); // Uncaught SyntaxError: Private field '#type' must be declared in an enclosing class
copy

Dans cet exemple, #type est un champ privé. Il ne peut pas être accédé ou modifié en dehors de la classe Animal. Toute tentative d'accès direct à #type depuis une instance (comme lion.#type) entraînera une erreur de syntaxe. Cela garantit que les données sensibles ou critiques ne sont modifiées que par des méthodes contrôlées définies dans la classe.

Avantages des propriétés privées

  1. Les propriétés privées protègent les données sensibles en empêchant l'accès externe. Elles garantissent que les données ne peuvent être modifiées que par des méthodes spécifiques, réduisant ainsi le risque de modifications accidentelles ou non autorisées ;
  2. Les propriétés privées permettent d'encapsuler les détails d'implémentation, masquant la logique interne à l'utilisateur. Cela favorise une séparation claire des responsabilités et maintient votre code modulaire ;
  3. Avec les propriétés privées, un contrôle plus précis est assuré sur la façon dont les données sont accédées et modifiées au sein d'une classe, garantissant que les modifications s'effectuent via des méthodes bien définies.

Exemple réel : Compte bancaire

Prenons l’analogie réelle de la gestion d’un solde de compte bancaire. Dans une banque, le solde de votre compte est protégé et personne ne peut y accéder ou le modifier directement. Vous ne pouvez interagir avec celui-ci qu’à travers des processus autorisés tels que les dépôts et les retraits. De la même manière, il est possible d’utiliser des propriétés privées dans une classe pour protéger le champ du solde contre tout accès ou modification directe.

12345678910111213141516171819202122232425262728293031323334353637
class BankAccount { #balance; // Private field constructor(owner, initialBalance) { this.owner = owner; this.#balance = initialBalance; } // Method to deposit money deposit(amount) { if (amount > 0) { this.#balance += amount; } } // Method to withdraw money withdraw(amount) { if (amount > 0 && amount <= this.#balance) { this.#balance -= amount; } } // Method to get account balance getBalance() { return `Account balance for ${this.owner}: $${this.#balance}`; } } const account = new BankAccount('John', 1000); account.deposit(500); console.log(account.getBalance()); // Output: Account balance for John: $1500 account.withdraw(200); console.log(account.getBalance()); // Output: Account balance for John: $1300 // Direct access to balance is not allowed console.log(account.#balance); // SyntaxError: Private field '#balance' must be declared in an enclosing class
copy

Dans cet exemple, le champ #balance est privé et ne peut être accédé que par des méthodes publiques telles que deposit, withdraw et getBalance. Cela garantit que le solde est modifié de manière contrôlée, le protégeant ainsi contre tout accès ou manipulation non autorisé.

1. Quelle est la principale raison d'utiliser des propriétés privées dans une classe ?

2. Comment déclare-t-on une propriété privée ?

3. Que se passe-t-il si vous essayez d'accéder à une propriété privée depuis l'extérieur d'une classe ?

question mark

Quelle est la principale raison d'utiliser des propriétés privées dans une classe ?

Select the correct answer

question mark

Comment déclare-t-on une propriété privée ?

Select the correct answer

question mark

Que se passe-t-il si vous essayez d'accéder à une propriété privée depuis l'extérieur d'une classe ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 1. Chapitre 7

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

Awesome!

Completion rate improved to 2.22

bookTravail avec les Propriétés Privées dans les Classes

Glissez pour afficher le menu

En programmation orientée classe, il existe souvent des situations où il est nécessaire de limiter l'accès direct à certaines propriétés afin de protéger l'intégrité des données et de contrôler la manière dont elles sont modifiées.

Que sont les propriétés privées ?

En JavaScript, les propriétés de classe sont généralement publiques, ce qui signifie qu'elles peuvent être consultées et modifiées depuis l'extérieur de la classe. Cependant, il existe des situations où il est nécessaire de restreindre l'accès à certaines propriétés, afin de garantir qu'elles ne puissent être consultées ou modifiées qu'à l'intérieur de la classe elle-même. Ce sont les propriétés privées.

Les propriétés privées permettent de créer une séparation claire entre le fonctionnement interne de la classe et le code externe. Elles sont utiles pour masquer des données sensibles ou empêcher des modifications involontaires d'une propriété depuis l'extérieur de la classe.

C'est comparable au moteur d'une voiture. Vous pouvez conduire la voiture et interagir avec ses commandes, mais vous n'avez pas accès directement aux composants du moteur pendant la conduite. Le moteur est protégé contre toute manipulation externe, et seuls des mécaniciens autorisés (méthodes de la classe) peuvent effectuer des ajustements.

Comment déclarer et utiliser des champs privés dans une classe

En JavaScript, les propriétés privées sont déclarées à l'aide de la syntaxe # (introduite avec ES2020). En préfixant le nom d'une propriété par #, celle-ci devient privée, ce qui signifie qu'elle ne peut être consultée qu'à l'intérieur de la classe elle-même.

12345678910111213141516171819202122
class Animal { #type; // Declaring a private field constructor(name, type) { this.name = name; this.#type = type; // Assigning a value to the private field } getInfo() { return `${this.name} is a ${this.#type} animal.`; } changeType(newType) { this.#type = newType; // Modifying the private field within the class } } const lion = new Animal('Lion', 'Wild'); console.log(lion.getInfo()); // Output: Lion is a Wild animal // Attempt to access private field directly (this will cause an error) console.log(lion.#type); // Uncaught SyntaxError: Private field '#type' must be declared in an enclosing class
copy

Dans cet exemple, #type est un champ privé. Il ne peut pas être accédé ou modifié en dehors de la classe Animal. Toute tentative d'accès direct à #type depuis une instance (comme lion.#type) entraînera une erreur de syntaxe. Cela garantit que les données sensibles ou critiques ne sont modifiées que par des méthodes contrôlées définies dans la classe.

Avantages des propriétés privées

  1. Les propriétés privées protègent les données sensibles en empêchant l'accès externe. Elles garantissent que les données ne peuvent être modifiées que par des méthodes spécifiques, réduisant ainsi le risque de modifications accidentelles ou non autorisées ;
  2. Les propriétés privées permettent d'encapsuler les détails d'implémentation, masquant la logique interne à l'utilisateur. Cela favorise une séparation claire des responsabilités et maintient votre code modulaire ;
  3. Avec les propriétés privées, un contrôle plus précis est assuré sur la façon dont les données sont accédées et modifiées au sein d'une classe, garantissant que les modifications s'effectuent via des méthodes bien définies.

Exemple réel : Compte bancaire

Prenons l’analogie réelle de la gestion d’un solde de compte bancaire. Dans une banque, le solde de votre compte est protégé et personne ne peut y accéder ou le modifier directement. Vous ne pouvez interagir avec celui-ci qu’à travers des processus autorisés tels que les dépôts et les retraits. De la même manière, il est possible d’utiliser des propriétés privées dans une classe pour protéger le champ du solde contre tout accès ou modification directe.

12345678910111213141516171819202122232425262728293031323334353637
class BankAccount { #balance; // Private field constructor(owner, initialBalance) { this.owner = owner; this.#balance = initialBalance; } // Method to deposit money deposit(amount) { if (amount > 0) { this.#balance += amount; } } // Method to withdraw money withdraw(amount) { if (amount > 0 && amount <= this.#balance) { this.#balance -= amount; } } // Method to get account balance getBalance() { return `Account balance for ${this.owner}: $${this.#balance}`; } } const account = new BankAccount('John', 1000); account.deposit(500); console.log(account.getBalance()); // Output: Account balance for John: $1500 account.withdraw(200); console.log(account.getBalance()); // Output: Account balance for John: $1300 // Direct access to balance is not allowed console.log(account.#balance); // SyntaxError: Private field '#balance' must be declared in an enclosing class
copy

Dans cet exemple, le champ #balance est privé et ne peut être accédé que par des méthodes publiques telles que deposit, withdraw et getBalance. Cela garantit que le solde est modifié de manière contrôlée, le protégeant ainsi contre tout accès ou manipulation non autorisé.

1. Quelle est la principale raison d'utiliser des propriétés privées dans une classe ?

2. Comment déclare-t-on une propriété privée ?

3. Que se passe-t-il si vous essayez d'accéder à une propriété privée depuis l'extérieur d'une classe ?

question mark

Quelle est la principale raison d'utiliser des propriétés privées dans une classe ?

Select the correct answer

question mark

Comment déclare-t-on une propriété privée ?

Select the correct answer

question mark

Que se passe-t-il si vous essayez d'accéder à une propriété privée depuis l'extérieur d'une classe ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 1. Chapitre 7
some-alt