You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/09-classes/04-private-protected-properties-methods/article.md
+19-19
Original file line number
Diff line number
Diff line change
@@ -3,29 +3,29 @@
3
3
4
4
Um dos princípios mais importantes de programação orientada a objetos é a delimitação da interface interna da externa.
5
5
6
-
Essa é uma prática "fundamental" ao desenvolver qualquer coisa mais complexa do que um aplicativo "hello world"
6
+
Essa é uma prática "fundamental" ao desenvolver qualquer coisa mais complexa do que um aplicativo "hello world".
7
7
8
8
Para entender isso, vamos nos afastar do desenvolvimento e voltar nossos olhos para o mundo real.
9
9
10
10
Geralmente, os dispositivos que usamos são bastante complexos. No entanto, delimitar a interface interna da externa permite utilizá-los sem problemas.
11
11
12
12
## Um exemplo da vida real
13
13
14
-
Por exxemplo, uma máquina de café. Simples do lado de fora: um botão, uma tela, alguns orifícios...E, com certezza, o resultado: um ótimo café! :)
14
+
Por exemplo, uma máquina de café. Simples do lado de fora: um botão, uma tela, alguns orifícios...E, com certeza, o resultado: um ótimo café! :)
15
15
16
16

17
17
18
18
Mas internamente...(uma imagem do manual de reparo)
19
19
20
20

21
21
22
-
Muitos detalhes. Porém podemos usá-la sem saber nada.
22
+
Muitos detalhes. Porém, podemos usá-la sem saber nada.
23
23
24
24
Máquinas de café são bastante confiáveis, não são? Podemos usá-las por anos, e apenas se algo der errado, precisamos levá-las para o reparo.
25
25
26
26
O segredo da confiança e simplicidade de uma máquina de café está em ajustar bem todos os detalhes e escondê-los internamente.
27
27
28
-
Se removermos a cobertura protetora da máquina de café, então usá-la será muito mais complexo (onde apertar?), e perigoso (pode causar choque elétrico)
28
+
Se removermos a cobertura protetora da máquina de café, então usá-la será muito mais complexo (onde apertar?), e perigoso (pode causar choque elétrico).
29
29
30
30
Como veremos, na programação, objetos são como máquinas de café.
31
31
@@ -42,9 +42,9 @@ Se continuarmos com a analogia da máquina de café, o que está escondido inter
42
42
43
43
Uma interface interna é usada para o objeto funcionar, seus detalhes se interconectam. Por exemplo, um tudo de caldeira está atrelado ao elemento de aquecimento.
44
44
45
-
Porém por fora, uma máquina está fechada pela cobertura protetora, de modo que ninguém possa acessar esses detalhes internos. Detalhes são ocultos e inacessíveis. Podemos usar suas funcionalidades por meio da interface externa.
45
+
Porém, por fora, uma máquina está fechada pela cobertura protetora, de modo que ninguém possa acessar esses detalhes internos. Detalhes são ocultos e inacessíveis. Podemos usar suas funcionalidades por meio da interface externa.
46
46
47
-
Assim, tudo precisamos para utilizar um objeto é conhecer sua interface externa. Podemos estar completamente inconscientes de como funciona por dentro, e isso é ótimo
47
+
Assim, tudo que precisamos para utilizar um objeto é conhecer sua interface externa. Podemos estar completamente inconscientes de como funciona por dentro, e isso é ótimo.
48
48
49
49
Esta foi uma introdução geral.
50
50
@@ -53,7 +53,7 @@ No Javascript, existem dois tipos de campos de objeto (propriedades e métodos):
53
53
- Publico: acessível de qualquer lugar. Eles compõem a interface externa. Até agora, estávamos usando apenas propriedades e métodos públicos.
54
54
- Privado: acessível apenas de dentro da classe. Estes são para a interface interna.
55
55
56
-
Em muitas outras linguagens, também existem campos "protegidos": acessíveis apenas de dentro da classe e por aquelas que a estendem (semelhante a privado, porém com acesso adicional pelas classes que herdam). Eles também são úteis para a interface interna. De certa forma, são mais difundidos do que os privados, pois geralmente desejamos que classes que herdam tenham aacesso a eles.
56
+
Em muitas outras linguagens, também existem campos "protegidos": acessíveis apenas de dentro da classe e por aquelas que a estendem (como privado, porém com acesso adicional pelas classes que herdam). Eles também são úteis para a interface interna. De certa forma, são mais difundidos do que os privados, pois geralmente desejamos que classes que herdam tenham acesso a eles.
57
57
58
58
Campos protegidos não são implementados em Javascript no nível da linguagem, porém, na prática, são muito convenientes, então eles são emulados.
Agora as propriedades `waterAmount` e `power` são públicas. Podemos facilmente obtê-las/atribuí-las de fora para qualquer valor.
85
85
86
-
Vamos alterar a propriedade `waterAmount` para protegida para ter mais controle sobre ela. Por exemplo, não queremos que qualquer alguém a definia com um valor abaixo de zero.
86
+
Vamos alterar a propriedade `waterAmount` para protegida para ter mais controle sobre ela. Por exemplo, não queremos que ninguém defina com um valor abaixo de zero.
87
87
88
88
**Propriedades protegidas são normalmente prefixadas com um sublinhado `_`.**
89
89
@@ -119,11 +119,11 @@ let coffeeMachine = new CoffeeMachine(100);
119
119
coffeeMachine.waterAmount=-10; // _waterAmount será 0, não -10
120
120
```
121
121
122
-
Agora, o acesso está sob controle, tornando impossível definir a quantidade de água abaixo de zero.
122
+
Agora, o acesso está sob controle, torna-se impossível definir a quantidade de água abaixo de zero.
123
123
124
-
## "power" apenas para leitura
124
+
## "power" apenas para leitura
125
125
126
-
Para a propriedade `power`, vamos torná-la apenas para leitura. ÀS vezes acontece que UM propriedade deve ser definida apenas no momento de criação, e então nunca modificada.
126
+
Para a propriedade `power`, vamos torná-la apenas para leitura. ÀS vezes acontece que uma propriedade deve ser definida apenas no momento de criação, e então nunca modificada.
127
127
128
128
Este é exatamente o caso da máquina de café, `power` nunca muda.
129
129
@@ -175,7 +175,7 @@ new CoffeeMachine().setWaterAmount(100);
175
175
176
176
Isto parece um pouco mais longo, mas funções são mais flexíveis. Elas podem aceitar múltiplos argumentos (mesmo que não precisemos deles agora).
177
177
178
-
Por outro lado, a sintaxe ger/set é mais curta, então, no final das contas, não existe uma regra estrita, você pode decidir.
178
+
Por outro lado, a sintaxe get/set é mais curta, então, no final das contas, não existe uma regra estrita, você pode decidir.
179
179
````
180
180
181
181
```smart header="Campos protegidos são herdados"
@@ -188,7 +188,7 @@ Portanto, os campos protegidos são naturalmente herdados, ao contrário dos pri
188
188
189
189
[recent browser=none]
190
190
191
-
Há uma proposta de JavaScript finalizada, quase padronizada, que fornece suporte a nível de linguagem para métodos e propriedades privados.
191
+
Há uma proposta de JavaScript finalizada, quase padronizada, que fornece suporte ao nível da linguagem para métodos e propriedades privados.
192
192
193
193
Privados devem começar com `#`. Eles são acessíveis apenas de dentro da classe.
194
194
@@ -282,14 +282,14 @@ Com campos privados isso é impossível: `this['#name']` não funciona. Essa é
282
282
283
283
## Resumo
284
284
285
-
Em termos de POO, a delimitação da interface interna da externa é chamada de [encapsulamento](https://pt.wikipedia.org/wiki/Programa%C3%A7%C3%A3o_orientada_a_objetos#Encapsulamento)
285
+
Em termos de POO, a delimitação da interface interna da externa é chamada de [encapsulamento](https://pt.wikipedia.org/wiki/Programa%C3%A7%C3%A3o_orientada_a_objetos#Encapsulamento).
286
286
287
287
Isto proporciona os seguintes benefícios:
288
288
289
289
Proteção para os usuários, evitando que atirem no próprio pé
290
-
: Imagine que há um time de desenvolvedores usando uma máquina de café. Ela foi fabricada pela empresa "Best CoffeeMachine" e funciona bem, mas a capa protetora foi removida, expondo a interface interna.
290
+
: Imagine, há uma equipe de desenvolvedores usando uma máquina de café. Ela foi fabricada pela empresa "Best CoffeeMachine" e funciona bem, mas a capa protetora foi removida, expondo a interface interna.
291
291
292
-
Todos os desenvolvedores são civilizados e usam a máquina de café como pretendido. No entanto um deles, John, decidiu que é o mais intelligente e fez algumas modificações internas na máquina de café. Como resultado a máquina de café falha dois dias depois.
292
+
Todos os desenvolvedores são civilizados e usam a máquina de café como pretendido. No entanto, um deles, John, decidiu que ele era o mais inteligente e fez algumas modificações internas na máquina de café. Como resultado a máquina de café falha dois dias depois.
293
293
294
294
Certamente, isso não é culpa do John, mas sim da pessoa que removeu a capa protetora e permitiu que John fizesse suas manipulações.
295
295
@@ -302,12 +302,12 @@ Manutenibilidade
302
302
303
303
Se você é um desenvolvedor de tal classe, é ótimo saber que métodos privados podem ser renomeados com segurança, seus parâmetros podem ser modificados e até removidos, porque nenhum código externo depende deles.
304
304
305
-
For users, when a new version comes out, it may be a total overhaul internally, but still simple to upgrade if the external interface is the same.
305
+
Para os usuários, quando uma nova versão é liberada, pode ser uma reformulação total internamente, mas ainda assim simples de atualizar se a interface externa for a mesma.
306
306
307
307
Complexidade oculta
308
-
: Pessoas adora usar coisas que são simples. Ao menos do lado de fora. O que está por dentro é uma história diferente.
308
+
: Pessoas adoram usar coisas que são simples. Ao menos do lado de fora. O que esta por dentro é uma história diferente.
309
309
310
-
Programadores não são exceção.
310
+
Programadores não são exceções.
311
311
312
312
**É sempre conveniente quando detalhes de implementação estão ocultos e uma interface externa simples e bem documentada está disponível.**
0 commit comments