Skip to content

Commit 23ca259

Browse files
longo-andreapasor1
andauthored
Apply suggestions from code review
Co-authored-by: Simone Pasini <66781510+pasor1@users.noreply.github.com>
1 parent 5917a68 commit 23ca259

File tree

1 file changed

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

1 file changed

+23
-23
lines changed

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

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22
# Proprietà e metodi privati e protetti
33

4-
Uno dei concetti più importanti della programmazione ad oggetti -- l'incapsulamento, ovvero la delimitazione delle interfacce interne da quelle esterne.
4+
Uno dei concetti più importanti della programmazione ad oggetti è l'incapsulamento, ovvero la delimitazione delle interfacce interne da quelle esterne.
55

66
Questa pratica è un "must" nello sviluppo di una qualsiasi applicazione che sia più complessa di "hello world" .
77

@@ -11,7 +11,7 @@ Solitamente, i dispositivi che utilizziamo sono piuttosto complessi. Poter delim
1111

1212
## Un esempio del mondo reale
1313

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è! :)
14+
Prendiamo l'esempio di 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,9 +21,9 @@ 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 caffè sono piuttosto affidabili, giusto? Possono durare per anni, e solamente nel caso in cui qualcosa smetta di funzionare -- le 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 caffè -- tutti i dettagli sono ottimizzati e *nascosti*.
26+
Il segreto dietro all'affidabilità e alla semplicità di una macchina del caffè è che tutti i dettagli sono ottimizzati e *nascosti*.
2727

2828
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

@@ -36,13 +36,13 @@ Ma per poter nascondere i loro dettagli interni, non utilizzeremo una copertura
3636
Nella programmazione orientata agli oggetti, le proprietà ed i metodi sono divisi in due gruppi:
3737

3838
- *Interfaccia interna* -- metodi e proprietà, accessibili dagli altri metodi della classe, ma non dall'esterno.
39-
- *Interfaccia esterna* -- metodi e proprietà, accessibili dall'esterno della classe.
39+
- *Interfaccia esterna* -- metodi e proprietà, accessibili anche dall'esterno della classe.
4040

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.
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

43-
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.
43+
L'interfaccia interna viene utilizzata per far funzionare l'oggetto, i suoi elementi interagiscono gli uni con gli altri. Ad esempio, la pompa è collegata al meccanismo di riscaldamento.
4444

45-
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.
45+
Ma vista dall'esterno, la macchina del caffè è protetta da una copertura, in modo che nessuno possa accedervi. I dettagli sono nascosti ed inaccessibili, ma possiamo sfruttarne le caratteristiche tramite la sua interfaccia esterna.
4646

4747
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

@@ -55,13 +55,13 @@ In JavaScript, esistono due tipi di campi per un oggetto (proprietà e metodi):
5555

5656
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 del linguaggio, ma nella pratica risultano essere molto comodi, per questo vengono spesso emulati.
58+
I campi protetti non sono implementati in JavaScript a livello di linguaggio, ma nella pratica risultano essere molto utili, per questo vengono spesso emulati.
5959

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).
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 (anche se potremmo), in modo da mantenere l'esempio semplice.
6161

6262
## Protecting "waterAmount"
6363

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

6666
```js run
6767
class CoffeeMachine {
@@ -81,7 +81,7 @@ let coffeeMachine = new CoffeeMachine(100);
8181
coffeeMachine.waterAmount = 200;
8282
```
8383

84-
Attualmente le proprietà `waterAmount` e `power` sono pubbliche. Possiamo leggerle/modificarle dall'esterno con un qualsiasi valore.
84+
Per ora le proprietà `waterAmount` e `power` sono pubbliche. Possiamo leggerle/modificarle dall'esterno con un qualsiasi valore.
8585

8686
Proviamo a modificare la proprietà `waterAmount` rendendola protetta, in modo da avere un maggior controllo su di essa. Ad esempio, non vorremmo che qualcuno possa impostarla con un valore negativo.
8787

@@ -188,7 +188,7 @@ Quindi, i metodi protetti vengono ereditati. A differenza di quelli privati, che
188188

189189
[recent browser=none]
190190

191-
Esiste una proposta JavaScript, quasi standard, che fornisce il supporto per le proprietà ed i metodi privati.
191+
Esiste una proposta JavaScript in via di approvazione, che fornisce il supporto per le proprietà ed i metodi privati.
192192

193193
I campi privati dovrebbero essere preceduti da `#`. Questi saranno accessibili solamente dall'interno della classe.
194194

@@ -249,7 +249,7 @@ machine.waterAmount = 100;
249249
alert(machine.#waterAmount); // Errore
250250
```
251251

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

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

@@ -263,7 +263,7 @@ class MegaCoffeeMachine extends CoffeeMachine {
263263
}
264264
```
265265

266-
In molti casi, una limitazione del genere è troppo severa. Se estendiamo una `CoffeeMachine`, potremmo giustamente voler accedere ai suoi campi interni. Questo è il motivo per cui i campi protetti vengono usati più spesso, anche se non sono realmente supportati dalla sintassi del linguaggio.
266+
In molti casi, una limitazione del genere è troppo severa. Se estendiamo una `CoffeeMachine`, potremmo giustamente voler accedere ai suoi campi interni. Questo è il motivo per cui i campi protetti vengono usati più spesso, anche se non sono realmente supportati dalla sintassi del linguaggio.
267267

268268
````warn header="I campi privati non sono accessibili come this[name]"
269269
I campi privati sono speciali.
@@ -290,20 +290,20 @@ In termini di OOP (Programmazione Orientata agli Oggetti), la delimitazione dell
290290
Fornisce diversi vantaggi:
291291

292292
Protezione per gli utenti, in modo che questi non possano spararsi ai piedi
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.
293+
: Immaginiamo un team di sviluppatori che utilizzi 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 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.
295+
Tutti gli sviluppatori sono educati, ed utilizzano la macchina del caffè come previsto. Ma uno di loro, John, che crede di essere il più intelligente, effettua alcune modifiche alla macchina, la quale si rompe due giorni dopo.
296296

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

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

301301
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.
302+
: La situazione, nella programmazione, è più complessa rispetto ad una macchina del caffè reale, la quale viene semplicemente comprata ed utilizzata. Il codice è costantemente soggetto a 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, ti farà piacere 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

@@ -312,11 +312,11 @@ Nasconde la complessità
312312

313313
I programmatori non fanno eccezione.
314314

315-
**E' sempre molto conveniente quando i dettagli dell'implementazione sono nascosti. Una semplice documentazione dell'interfaccia esterna è molto più comoda.**
315+
**E' sempre preferibile nascondere i dettagli implementativi e fornire una semplice e ben documentata interfaccia esterna.**
316316

317-
Per nasconde i componenti interni di un interfaccia posiamo utilizzare le proprietà protette o private:
317+
Per nasconde i componenti interni di un'interfaccia possiamo utilizzare le proprietà protette o private:
318318

319-
- I campi protetti vengono preceduti da `_`. Questa è una convenzione piuttosto diffusa, non forzata a livello di linguaggio. I programmatori dovrebbero sempre accedere ai campi preceduti da `_` solamente dalla classe o dalle sue sotto-clasi.
319+
- I campi protetti vengono preceduti da `_`. Questa è una convenzione ben conosciuta, non implementata a livello di linguaggio. I programmatori dovrebbero sempre accedere ai campi preceduti da `_` solamente dalla classe stessa o dalle sue sotto-classi.
320320
- I campi privati vengono preceduti da `#`. JavaScript si assicura che questi siano accessibili solamente dalla loro classe.
321321

322322
Attualmente, i campi privati non sono completamente supportati dai browser, ma esistono dei polyfill.

0 commit comments

Comments
 (0)