Skip to content

Commit e859b82

Browse files
Apply suggestions from code review
Co-authored-by: Dorin David <70648503+Dorin-David@users.noreply.github.com>
1 parent 55aed87 commit e859b82

File tree

1 file changed

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

1 file changed

+31
-31
lines changed

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

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ Questa pratica è un "must" nello sviluppo di una qualsiasi applicazione che sia
77

88
Per comprenderla, usciamo dal mondo dello sviluppo e guardiamo al mondo reale.
99

10-
Solitamente, i dispositivi che utilizziamo sono piuttosto complessi. Ma poter delimitare la loro interfaccia interna da quelal esterna, ci consente di utilizzarli senza grossi problemi.
10+
Solitamente, i dispositivi che utilizziamo sono piuttosto complessi. Poter delimitare la loro interfaccia interna da quella esterna, ci consente di utilizzarli senza grossi problemi.
1111

12-
## Un esempio nel mondo reale
12+
## Un esempio del mondo reale
1313

14-
Ad esempio, una macchina del caffe. Semplice all'esterno: un bottone, un dispaly, un paio di fori... E, ovviamente, il risultato -- un ottimo caffe! :)
14+
Ad esempio, una macchina del caffè. Semplice all'esterno: un bottone, un dispaly, un paio di fori... E, ovviamente, il risultato -- un ottimo caffè! :)
1515

1616
![](coffee.jpg)
1717

@@ -21,15 +21,15 @@ Ma internamente... (una rappresentazione dei suoi componenti)
2121

2222
Ci sono molti dettagli. Ma riusciamo comunque ad utilizzarla anche senza conoscerli.
2323

24-
Le macchine del caffe sono piuttosto affidabili, giusto? Possono durare per anni, e solamente nel caso in cui qualcosa smetta di funzionare -- la portiamo a riparare.
24+
Le macchine del caffè sono piuttosto affidabili, giusto? Possono durare per anni, e solamente nel caso in cui qualcosa smetta di funzionare -- le portiamo a riparare.
2525

26-
Il segreto dietro all'affidabilità e alla semplicità di una macchina del caffe -- tutti i dettagli sono ottimizzati e *nascosti*.
26+
Il segreto dietro all'affidabilità e alla semplicità di una macchina del caffè -- tutti i dettagli sono ottimizzati e *nascosti*.
2727

28-
Se rimuovessimo la copertura della macchina del caffe, allora il suo utilizzo sarebbe molto più complesso (dove dovremmo premere?), e pericoloso (potremmo prendere la scossa).
28+
Se rimuovessimo la copertura della macchina del caffè, allora il suo utilizzo sarebbe molto più complesso (dove dovremmo premere?), e pericoloso (potremmo prendere la scossa).
2929

30-
Come vedremo in seguito, nella programmazione, gli oggetti, sono come le macchine del caffe.
30+
Come vedremo in seguito, nella programmazione gli oggetti sono come le macchine del caffè.
3131

32-
Ma per poter nascondere i loro dettagli interni, non utilizzeremo una copertura di sicurezza, ma piuttosto un speciale sintassi del linguaggio ed alcune convenzioni.
32+
Ma per poter nascondere i loro dettagli interni, non utilizzeremo una copertura di sicurezza, ma piuttosto una speciale sintassi del linguaggio ed alcune convenzioni.
3333

3434
## Interfaccia interna ed esterna
3535

@@ -38,13 +38,13 @@ Nella programmazione orientata agli oggetti, le proprietà ed i metodi sono divi
3838
- *Interfaccia interna* -- metodi e proprietà, accessibili dagli altri metodi della classe, ma non dall'esterno.
3939
- *Interfaccia esterna* -- metodi e proprietà, accessibili dall'esterno della classe.
4040

41-
Continuando con l'analogia della macchina del caffe -- ciò che è nascosto internamente: una pompa, un meccanismo di riscaldamento e cosi via -- al sua interfaccia interna.
41+
Continuando con l'analogia della macchina del caffè -- ciò che è nascosto internamente: una pompa, un meccanismo di riscaldamento e così via -- è la sua interfaccia interna.
4242

4343
L'interfaccia interna viene utilizzata per far funzionare l'oggetto, ogni dettaglio viene utilizzato da altri elementi. Ad esempio, la pompa è collegata al meccanismo di riscaldamento.
4444

4545
Ma vista dall'esterno, la macchina del caffe è protetta da una copertura, in modo che nessuno possa accedervi. I dettagli sono nascosti ed inaccesibili. Possiamo sfruttarne le caratteristiche tramite la sua interfaccia esterna.
4646

47-
Quindi, tutto ciò di cui abbiamo bisogno per utilizzare un oggetto è la sua interfaccia esterna. Potremmo essere completamente inconsapevoli del suo funzionamento interno, ciò sarebbe la situazione ottimale.
47+
Quindi, tutto ciò di cui abbiamo bisogno per utilizzare un oggetto è la sua interfaccia esterna. Potremmo essere completamente inconsapevoli del suo funzionamento interno; e ciò andrebbe bene.
4848

4949
Questa era un'introduzione generale.
5050

@@ -53,15 +53,15 @@ In JavaScript, esistono due tipi di campi per un oggetto (proprietà e metodi):
5353
- Pubblici: accessibili ovunque. Questi ne definiscono l'interfaccia esterna. Finora abbiamo sempre utilizzato proprietà e metodi pubblici.
5454
- Privati: accessibili solamente dall'interno della classe. Questi ne definiscono l'interfaccia interna.
5555

56-
In molti altri linguaggi di programmazione esiste anche il concetto di campo "protected" (protetto): accessibile solamente dall'interno della classe e da quelle che al estendono (come i campi privati, ma in aggiunta sono accessibili anche dalle classi che ereditano). Questi sono altrettanto utili per la definizione dell'interfaccia interna. Generalmente sono più diffusi dei campi privati, poiché solitamente la nostra intenzione è quella di renderli accessibili anche nelle sotto-classi.
56+
In molti altri linguaggi di programmazione esiste anche il concetto di campo "protected" (protetto): accessibile solamente dall'interno della classe e da quelle che la estendono (come i campi privati, ma in aggiunta sono accessibili anche dalle classi che ereditano). Questi sono altrettanto utili per la definizione dell'interfaccia interna. Generalmente sono più diffusi dei campi privati, poiché solitamente la nostra intenzione è quella di renderli accessibili anche nelle sotto-classi.
5757

58-
I campi protetti non sono implementati in JavaScript a livello di linguaggio, ma nella pratica risultano essere molto comodi, per questo vengono spesso emulati.
58+
I campi protetti non sono implementati in JavaScript a livello del linguaggio, ma nella pratica risultano essere molto comodi, per questo vengono spesso emulati.
5959

60-
Ora costruiremo una macchina del caffe in JavaScript con tutti i tipi di proprietà descritti. Una macchina del caffe è composta da molti dettagli, non la modelleremo per intero, in modo da tenere l'esempio semplice (anche se potremo).
60+
Ora costruiremo una macchina del caffè in JavaScript, con tutti i tipi di proprietà descritti. Una macchina del caffè è composta da molti dettagli; non la modelleremo per intero, in modo da mantenere l'esempio semplice (anche se potremmo).
6161

6262
## Protecting "waterAmount"
6363

64-
Come prima cosa creiamo una semplice classe per modellare una macchina del caffe:
64+
Come prima cosa creiamo una semplice classe per modellare una macchina del caffè:
6565

6666
```js run
6767
class CoffeeMachine {
@@ -74,7 +74,7 @@ class CoffeeMachine {
7474

7575
}
7676

77-
// creiamo la macchina del caffe
77+
// creiamo la macchina del caffè
7878
let coffeeMachine = new CoffeeMachine(100);
7979

8080
// aggiungiamo acqua
@@ -87,7 +87,7 @@ Proviamo a modificare la proprietà `waterAmount` rendendola protetta, in modo d
8787

8888
**Le proprietà protette, solitamente, vengono prefissate con un underscore `_`.**
8989

90-
Questa non è una forzatura del linguaggio, ma piuttosto una convenzione piuttosto diffusa tra i programmatori, che specifica che queste proprietà e metodi non dovrebbero essere accedute dall'esterno.
90+
Questa non è una forzatura del linguaggio, ma piuttosto una convenzione diffusa tra i programmatori, che specifica che queste proprietà e metodi non dovrebbero essere accessibili dall'esterno.
9191

9292
Quindi la nostra proprietà diventa `_waterAmount`:
9393

@@ -112,7 +112,7 @@ class CoffeeMachine {
112112

113113
}
114114

115-
// creiamo la macchina del caffe
115+
// creiamo la macchina del caffè
116116
let coffeeMachine = new CoffeeMachine(100);
117117

118118
// aggiungiamo acqua
@@ -125,7 +125,7 @@ Ora l'accesso è sotto controllo, quindi non è più possibile impostare la quan
125125

126126
Proviamo a rendere la proprietà `power` come read-only (sola lettura). In alcuni casi, potremmo aver bisogno di definire una proprietà in fase di costruzione, e non volerla più modificare in seguito.
127127

128-
Questo è esattamente il caso per un macchina del caffe: la potenza non può variare.
128+
Questo è esattamente il caso per un macchina del caffè: la potenza non può variare.
129129

130130
Per farlo, possiamo semplicemente definire un getter, e nessun setter:
131131

@@ -143,7 +143,7 @@ class CoffeeMachine {
143143

144144
}
145145

146-
// creiamo la macchina del caffe
146+
// creiamo la macchina del caffè
147147
let coffeeMachine = new CoffeeMachine(100);
148148

149149
alert(`Power is: ${coffeeMachine.power}W`); // Power is: 100W
@@ -154,14 +154,14 @@ coffeeMachine.power = 25; // Errore (nessun setter)
154154
````smart header="Le funzioni getter/setter"
155155
Qui abbiamo utilizzato la sintassi getter/setter.
156156
157-
Ma nella maggior parte dei casi, le funzioni `get.../set...`, si preferisce definirle in questo modo:
157+
Ma nella maggior parte dei casi, le funzioni `get.../set...` si preferisce definirle in questo modo:
158158
159159
```js
160160
class CoffeeMachine {
161161
_waterAmount = 0;
162162
163163
*!*setWaterAmount(value)*/!* {
164-
i (value < 0) value = 0;
164+
if (value < 0) value = 0;
165165
this._waterAmount = value;
166166
}
167167
@@ -226,7 +226,7 @@ A livello di linguaggio, `#` è un carattere speciale per indicare che quel camp
226226

227227
Inoltre i campi privati non entrano in conflitto con quelli pubblici. Possiamo avere sia un campo privato `#waterAmount` che uno pubblico `waterAmount`.
228228

229-
Ad esempio, facciamo si che `waterAmount` sia una proprietà per accedere a `#waterAmount`:
229+
Ad esempio, facciamo che `waterAmount` sia una proprietà per accedere a `#waterAmount`:
230230

231231
```js run
232232
class CoffeeMachine {
@@ -251,7 +251,7 @@ alert(machine.#waterAmount); // Errore
251251

252252
A differenza di quelli protetti, i campi privati sono forzati dal linguaggio stesso. E questa è una buona cosa.
253253

254-
Nel caso in cui stessimo ereditando da `CoffeeMachine`, allora non avremo accesso diretto a `#waterAmount`. Dovremo affidarci al getter/setter `waterAmount`:
254+
Nel caso in cui stessimo ereditando da `CoffeeMachine`, allora non avremmo accesso diretto a `#waterAmount`. Dovremmo affidarci al getter/setter `waterAmount`:
255255

256256
```js
257257
class MegaCoffeeMachine extends CoffeeMachine {
@@ -285,30 +285,30 @@ Con i campi privati questo è impossibile: `this['#name']` non funzionerebbe. Qu
285285

286286
## Riepilogo
287287

288-
In termini di OOP (Programmazione Orientata agli Oggetti), la delimitazione dell'interfaccia interna da quella esterna, si chiama [incapsulamento](https://en.wikipedia.org/wiki/Encapsulation_(computer_programming)).
288+
In termini di OOP (Programmazione Orientata agli Oggetti), la delimitazione dell'interfaccia interna da quella esterna si chiama [incapsulamento](https://en.wikipedia.org/wiki/Encapsulation_(computer_programming)).
289289

290290
Fornisce diversi vantaggi:
291291

292292
Protezione per gli utenti, in modo che questi non possano spararsi ai piedi
293-
: Immaginiamo ci sia un team di sviluppatori che utilizzano una macchina del caffe. Costruita dall'azienda "Best CoffeeMachine", che funziona correttamente, ma la protezione viene rimossa. In questo modo, la sua interfaccia interna viene esposta.
293+
: Immaginiamo un team di sviluppatori che utilizzano una macchina del caffè costruita dall'azienda "Best CoffeeMachine", che funziona correttamente, ma la cui protezione viene rimossa. In questo modo, la sua interfaccia interna viene esposta.
294294

295-
Tutti gli sviluppatori sono civilizzati -- utilizzano la macchina del caffe come previsto. Ma uno di loro, Jhon, che crede di essere il più intelligente, ed effettua alcune modifiche ai componenti della macchina. La macchina del caffe si rompe due giorni dopo.
295+
Tutti gli sviluppatori sono civilizzati -- utilizzano la macchina del caffè come previsto. Ma uno di loro, John, che crede di essere il più intelligente, effettua alcune modifiche alla macchina. Che si rompe due giorni dopo.
296296

297-
Questa non è sicuramente colpa di Jhon, ma piuttosto della persona che ha rimosso la protezione e ha permesso a Jhon di manometterla.
297+
Questa non è sicuramente colpa di John, ma piuttosto della persona che ha rimosso la protezione e ha permesso a John di manometterla.
298298

299299
Lo stesso vale nella programmazione. Se un utente prova a cambiare campi che non dovrebbero essere modificati dall'esterno -- le conseguenze sono imprevedibili.
300300

301-
Manutenibili
302-
: La situazione nella programmazione rispetto ad una macchina del caffe, poiché non la compriamo solamente una volta. Il codice è costantemente sotto sviluppo e miglioramenti.
301+
Sostenibile
302+
: La situazione, nella programmazione, è più complessa rispetto ad una macchina del caffe, poiché non la compriamo solamente una volta. Il codice è costantemente sotto sviluppo e miglioramenti.
303303

304304
**Se limitiamo l'accesso all'interfaccia interna, allora lo sviluppatore della classe ha la possibilità di modificarla, anche senza dover informare gli utenti.**
305305

306-
Se sei lo sviluppatore di una classe di questo tipo, è ottimo sapere che i metodi privati possono essere rinominati in totale sicurezza, i parametri possono essere modificati, o addirittura rimossi, poiché nessun codice esterno dipende da questi.
306+
Se sei lo sviluppatore di una classe di questo tipo, è ottimo sapere che i metodi privati possono essere rinominati in totale sicurezza; i parametri possono essere modificati, o addirittura rimossi, poiché nessun codice esterno dipende da questi.
307307

308308
Per gli utenti, quando esce una nuova versione, questa potrebbe essere cambiata completamente al suo interno, ma l'aggiornamento rimane comunque un'operazione semplice se la sua interfaccia esterna è rimasta la stessa.
309309

310310
Nasconde la complessità
311-
: Le persone adorano utilizzare cose semplici. Almeno esternamente. Ciò che è internamente è una questione diversa.
311+
: Le persone adorano utilizzare cose semplici. Almeno esternamente. Ciò che è interno è una questione diversa.
312312

313313
I programmatori non fanno eccezione.
314314

0 commit comments

Comments
 (0)