Skip to content

Commit a2c49a4

Browse files
Apply minor fixes in '1-js/09-classes/04-private-protected-properties-methods/article.md'
1 parent 056ea1e commit a2c49a4

File tree

1 file changed

+27
-28
lines changed
  • 1-js/09-classes/04-private-protected-properties-methods

1 file changed

+27
-28
lines changed

1-js/09-classes/04-private-protected-properties-methods/article.md

Lines changed: 27 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -11,34 +11,34 @@ Habituellement, les appareils que nous utilisons sont assez complexes. Mais dél
1111

1212
## Un exemple concret
1313

14-
Par exemple, une machine à café. Simple de l'extérieur: un bouton, un écran, quelques trous ... Et le résultat: un café génial! :)
14+
Par exemple, une machine à café. Simple de l'extérieur : un bouton, un écran, quelques trous... Et le résultat : du bon café ! :)
1515

1616
![](coffee.jpg)
1717

18-
Mais à l'intérieur ... (une image du manuel de réparation)
18+
Mais à l'intérieur... (une image du manuel de réparation)
1919

2020
![](coffee-inside.jpg)
2121

2222
Beaucoup de détails. Mais on peut l'utiliser sans rien savoir.
2323

24-
Les machines à café sont assez fiables, n'est-ce pas? Nous pouvons en utiliser une pendant des années, et seulement en cas de problème, la faire réparer.
24+
Les machines à café sont assez fiables, n'est-ce pas ? Nous pouvons en utiliser une pendant des années, et seulement en cas de problème, la faire réparer.
2525

2626
Le secret de la fiabilité et de la simplicité d'une machine à café - tous les détails sont bien réglés et cachés à l'intérieur.
2727

28-
Si nous retirons le capot de protection de la machine à café, son utilisation sera beaucoup plus complexe (où appuyer?) et dangereuse (elle peut électrocuter).
28+
Si nous retirons le capot de protection de la machine à café, son utilisation sera beaucoup plus complexe (où appuyer ?) et dangereuse (elle peut électrocuter).
2929

3030
Comme nous le verrons, les objets de programmation ressemblent à des machines à café.
3131

3232
Mais pour masquer les détails intérieurs, nous n'utiliserons pas une couverture de protection, mais une syntaxe spéciale du langage et des conventions.
3333

3434
## Interface interne et externe
3535

36-
En programmation orientée objet, les propriétés et les méthodes sont divisées en deux groupes:
36+
En programmation orientée objet, les propriétés et les méthodes sont divisées en deux groupes :
3737

3838
- *Interface interne* - méthodes et propriétés, accessibles à partir d'autres méthodes de la classe, mais pas de l'extérieur.
3939
- *Interface externe* - méthodes et propriétés, accessibles aussi de l'extérieur de la classe.
4040

41-
Si nous continuons l'analogie avec la machine à café - ce qui est caché à l'intérieur: un tube de chaudière, un élément chauffant, etc. -, c'est son interface interne.
41+
Si nous continuons l'analogie avec la machine à café - ce qui est caché à l'intérieur : un tube de chaudière, un élément chauffant, etc. -, c'est son interface interne.
4242

4343
Une interface interne est utilisée pour que l’objet fonctionne, ses détails s’utilisent les uns les autres. Par exemple, un tube de chaudière est attaché à l'élément chauffant.
4444

@@ -48,20 +48,20 @@ Il suffit donc de connaître son interface externe pour utiliser un objet. Nous
4848

4949
C'était une introduction générale.
5050

51-
En JavaScript, il existe deux types de champs d’objet (propriétés et méthodes):
51+
En JavaScript, il existe deux types de champs d’objet (propriétés et méthodes) :
5252

5353
- Publique : accessible de n'importe où. Ils comprennent l'interface externe. Jusqu'à présent, nous utilisions uniquement des propriétés et méthodes publiques.
5454
- Privée : accessible uniquement de l'intérieur de la classe. Ce sont pour l'interface interne.
5555

56-
Dans de nombreuses autres langues, il existe également des champs "protégés": accessibles uniquement de l'intérieur de la classe et de ceux qui l'étendent (comme privé, mais avec accès des classes héritées). Ils sont également utiles pour l'interface interne. En un sens, elles sont plus répandues que les méthodes privées, car nous souhaitons généralement que les classes héritées puissent y accéder.
56+
Dans de nombreux autres langages, il existe également des champs "protégés" : accessibles uniquement de l'intérieur de la classe et de ceux qui l'étendent (comme privé, mais avec accès des classes héritées). Ils sont également utiles pour l'interface interne. En un sens, elles sont plus répandues que les méthodes privées, car nous souhaitons généralement que les classes héritées puissent y accéder.
5757

58-
Les champs protégés ne sont pas implémentés en JavaScript au niveau de la langue, mais dans la pratique, ils sont très pratiques, ils sont donc imités.
58+
Les champs protégés ne sont pas implémentés en JavaScript au niveau du langage, mais dans la pratique, ils sont très pratiques, ils sont donc imités.
5959

6060
Nous allons maintenant créer une machine à café en JavaScript avec tous ces types de propriétés. Une machine à café a beaucoup de détails, nous ne les modéliserons pas pour rester simples (bien que nous puissions).
6161

6262
## Protection de "waterAmount"
6363

64-
Faisons d'abord une classe de machine à café simple:
64+
Faisons d'abord une classe de machine à café simple :
6565

6666
```js run
6767
class CoffeeMachine {
@@ -87,9 +87,9 @@ Changeons la propriété `waterAmount` en protégée pour avoir plus de contrôl
8787

8888
**Les propriétés protégées sont généralement précédées d'un trait de soulignement `_`.**
8989

90-
Cela n'est pas appliqué au niveau de la langue, mais il existe une convention bien connue entre les programmeurs selon laquelle ces propriétés et méthodes ne doivent pas être accessibles de l'extérieur.
90+
Cela n'est pas appliqué au niveau du langage, mais il existe une convention bien connue entre les programmeurs selon laquelle ces propriétés et méthodes ne doivent pas être accessibles de l'extérieur.
9191

92-
Donc notre propriété s'appellera `_waterAmount`:
92+
Donc notre propriété s'appellera `_waterAmount` :
9393

9494
```js run
9595
class CoffeeMachine {
@@ -123,11 +123,11 @@ Maintenant, l'accès est sous contrôle, donc le réglage de l'eau en dessous de
123123

124124
## "power" en lecture seule
125125

126-
Pour la propriété `power`, rendons-le en lecture seule. Il arrive parfois qu'une propriété doit être définie au moment de la création, puis ne jamais être modifiée.
126+
Pour la propriété `power`, rendons-la en lecture seule. Il arrive parfois qu'une propriété doit être définie au moment de la création, puis ne jamais être modifiée.
127127

128-
C'est exactement le cas pour une machine à café: la puissance ne change jamais.
128+
C'est exactement le cas pour une machine à café : la puissance ne change jamais.
129129

130-
Pour ce faire, il suffit de définir l'accésseur, mais pas le mutateur:
130+
Pour ce faire, il suffit de définir l'accésseur, mais pas le mutateur :
131131

132132
```js run
133133
class CoffeeMachine {
@@ -154,7 +154,7 @@ coffeeMachine.power = 25; // Error (no setter)
154154
````smart header="Fonctions Accesseur/Mutateur"
155155
Ici, nous avons utilisé la syntaxe accesseur/mutateur.
156156
157-
Mais la plupart du temps, les fonctions `get ... / set ...` sont préférées, comme ceci:
157+
Mais la plupart du temps, les fonctions `get...` / `set...` sont préférées, comme ceci :
158158
159159
```js
160160
class CoffeeMachine {
@@ -179,7 +179,7 @@ D'un autre côté, la syntaxe accesseur/mutateur est plus courte, donc il n'y a
179179
````
180180

181181
```smart header="Les champs protégés sont hérités"
182-
Si nous héritons de `classe MegaMachine extends CoffeeMachine`, rien ne nous empêche d'accéder à` this._waterAmount` ou `this._power` à partir des méthodes de la nouvelle classe.
182+
Si nous héritons de `classe MegaMachine extends CoffeeMachine`, rien ne nous empêche d'accéder à `this._waterAmount` ou `this._power` à partir des méthodes de la nouvelle classe.
183183
184184
Les champs protégés sont donc naturellement héritables. Contrairement aux champs privés que nous verrons ci-dessous.
185185
```
@@ -188,9 +188,9 @@ Les champs protégés sont donc naturellement héritables. Contrairement aux cha
188188

189189
[recent browser=none]
190190

191-
Il existe une proposition JavaScript finie, presque dans la norme, qui fournit une prise en charge au niveau de la langue pour les propriétés et méthodes privées.
191+
Il existe une proposition JavaScript finie, presque dans la norme, qui fournit une prise en charge au niveau du langage pour les propriétés et méthodes privées.
192192

193-
Les propriétés privées devraient commencer par `#`. Ils ne sont accessibles que de l'intérieur de la classe.
193+
Les propriétés privées devraient commencer par `#`. Elles ne sont accessibles que de l'intérieur de la classe.
194194

195195
Par exemple, voici une propriété privée `#waterLimit` et la méthode privée de vérification du niveau de l'eau `#fixWaterAmount` :
196196

@@ -222,10 +222,10 @@ coffeeMachine.#waterLimit = 1000; // Error
222222
*/!*
223223
```
224224

225-
Au niveau de la langue, `#` est un signe spécial que le champ est privé. Nous ne pouvons pas y accéder de l'extérieur ou des classes héritées.
225+
Au niveau du langage, `#` est un signe spécial spécifiant que le champ est privé. Nous ne pouvons pas y accéder de l'extérieur ou des classes héritées.
226226

227227
Les champs privés n'entrent pas en conflit avec les champs publics. Nous pouvons avoir les champs privés `#waterAmount` et publics `waterAmount` en même temps.
228-
Pour l'exemple, faisons de `waterAmount` un accesseur pour `#waterAmount`:
228+
Pour l'exemple, faisons de `waterAmount` un accesseur pour `#waterAmount` :
229229

230230
```js run
231231
class CoffeeMachine {
@@ -250,7 +250,7 @@ alert(machine.#waterAmount); // Error
250250

251251
Contrairement aux champs protégés, les champs privés sont imposés par le langage lui-même. C'est une bonne chose.
252252

253-
Mais si nous héritons de `CoffeeMachine`, nous n’aurons aucun accès direct à `#waterAmount`. Nous aurons besoin de compter sur l'accesseur/mutateur `waterAmount`:
253+
Mais si nous héritons de `CoffeeMachine`, nous n’aurons aucun accès direct à `#waterAmount`. Nous aurons besoin de compter sur l'accesseur/mutateur `waterAmount` :
254254

255255
```js
256256
class MegaCoffeeMachine extends CoffeeMachine {
@@ -267,7 +267,7 @@ Dans de nombreux scénarios, une telle limitation est trop sévère. Si nous ét
267267
````warn header="Les champs privés ne sont pas disponibles par this[nom]"
268268
Les champs privés sont spéciaux.
269269
270-
Comme nous le savons, nous pouvons généralement accéder aux champs en utilisant `this[name]`:
270+
Comme nous le savons, nous pouvons généralement accéder aux champs en utilisant `this[name]` :
271271
272272
```js
273273
class User {
@@ -279,23 +279,22 @@ class User {
279279
}
280280
```
281281
282-
C'est impossible avec les champs privés: `this['#name']` ne fonctionne pas. C'est une limitation de syntaxe pour assurer la confidentialité.
282+
C'est impossible avec les champs privés : `this['#name']` ne fonctionne pas. C'est une limitation de syntaxe pour assurer la confidentialité.
283283
````
284284

285285
## Résumé
286286

287287
En termes de POO, la délimitation de l'interface interne de l'interface externe est appelée [encapsulation]("https://fr.wikipedia.org/wiki/Encapsulation_(programmation)").
288288

289-
Cela offre les avantages suivants:
289+
Cela offre les avantages suivants :
290290

291291
Protection des utilisateurs pour qu'ils ne se tirent pas une balle dans le pied
292292
: Imaginez, il y a une équipe de développeurs utilisant une machine à café. Elle a été fabriquée par la société "Best CoffeeMachine" et fonctionne parfaitement, mais une coque de protection a été retirée. Donc, l'interface interne est exposée.
293293

294-
295294
Tous les développeurs sont civilisés - ils utilisent la machine à café comme prévu. Mais l'un d'entre eux, John, a décidé qu'il était le plus intelligent et a apporté quelques modifications aux éléments internes de la machine à café. La machine à café a donc échoué deux jours plus tard.
296-
295+
297296
Ce n’est sûrement pas la faute de John, mais bien de la personne qui a enlevé le capot de protection et laissé John manipuler.
298-
297+
299298
La même chose en programmation. Si un utilisateur d'une classe va changer des choses qui ne sont pas destinées à être modifiées de l'extérieur, les conséquences sont imprévisibles.
300299

301300
Maintenable

0 commit comments

Comments
 (0)