Skip to content

Commit e6c4b50

Browse files
committed
правки
1 parent 9ca8bc1 commit e6c4b50

File tree

1 file changed

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

1 file changed

+19
-19
lines changed

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

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

2-
# Приватные и защищённе методы и свойства
2+
# Приватные и защищённые методы и свойства
33

44
Один из важнейших принципов объектно-ориентированного программирования -- разделение внутреннего и внешнего интерфейсов.
55

@@ -19,17 +19,17 @@
1919

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

22-
Множество деталей. Но мы можем пользоваться ею ничего об этом не зная.
22+
Множество деталей. Но мы можем пользоваться ею, ничего об этом не зная.
2323

24-
Кофеварки довольно надежны, не так ли? Мы можем пользоваться ими годами, и если что то пойдёт не так - отнесём в ремонт.
24+
Кофеварки довольно надежны, не так ли? Мы можем пользоваться ими годами, и если что-то пойдёт не так - отнесём в ремонт.
2525

2626
Секрет надёжности и простоты кофеварки -- все детали хорошо отлажены и *спрятаны* внутри.
2727

28-
Если мы снимем защитную крышку с кофеварки, то пользоваться ею будет гораздо сложнее (куда нажимать?) и опасно (может привести к поражению электрическим током).
28+
Если мы снимем защитный кожух с кофеварки, то пользоваться ею будет гораздо сложнее (куда нажимать?) и опаснее (может привести к поражению электрическим током).
2929

3030
Как мы увидим, в программировании объекты похожи на кофеварки.
3131

32-
Но, чтобы скрыть внутренние детали, мы будем использовать не защитную крышку, а специальный синтаксис языка и соглашения.
32+
Но, чтобы скрыть внутренние детали, мы будем использовать не защитный кожух, а специальный синтаксис языка и соглашения.
3333

3434
## Внутренный и внешнией интерфейсы
3535

@@ -42,7 +42,7 @@
4242

4343
Внутренний интерфейс используется для работы объекта, его детали используют друг друга. Например, трубка кипятильника прикреплена к нагревательному элементу.
4444

45-
Но снаружи кофеварка закрыта защитной крышкой, так что никто этого не может до этого добраться. Детали скрыты и недоступны. Мы можем использовать их функции через внешний интерфейс.
45+
Но снаружи кофеварка закрыта защитным кожухом, так что никто не может добраться до сложных частей. Детали скрыты и недоступны. Мы можем использовать их функции через внешний интерфейс.
4646

4747
Итак, всё, что нам нужно для использования объекта, это знать его внешний интерфейс. Мы можем совершенно не знать, как это работает внутри, и это здорово.
4848

@@ -53,15 +53,15 @@
5353
- Публичные: доступны отовсюду. Они составляют внешний интерфейс. До этого момента мы использовали только публичные свойства и методы.
5454
- Приватные: доступны только внутри класса. Они для внутреннего интерфейса.
5555

56-
Во многих других языках также существуют «защищённые» поля: доступные только внутри класса и тех, которые его расширяют. Они также полезны для внутреннего интерфейса. В некотором смысле они более распространены, чем приватные, потому что мы обычно хотим, чтобы наследующие классы получали доступ к внутренним полям для правильного выполнения расширения.
56+
Во многих других языках также существуют «защищённые» поля, доступные только внутри класса или для дочерних классов. Они также полезны для внутреннего интерфейса. В некотором смысле они более распространены, чем приватные, потому что мы обычно хотим, чтобы наследующие классы получали доступ к внутренним полям для правильного выполнения расширения.
5757

5858
Защищённые поля не представлены в JavaScript на уровне языка, но на практике они очень удобны, поэтому их эмулируют.
5959

6060
В следующей главе мы будем делать кофеварку на JavaScript со всеми этими типами свойств. Кофеварка имеет множество деталей, мы не будем их моделировать для простоты примера (хотя могли бы).
6161

6262
## Защищённое свойство "waterAmount"
6363

64-
Давайте для начала создадим простой класс Кофеварка:
64+
Давайте для начала создадим простой класс для описания кофеварки:
6565

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

84-
Прямо сейчас своства `waterAmount` и `power` публичные. Мы можем легко получать и устанавливать им любое значение извне.
84+
Прямо сейчас свойства `waterAmount` и `power` публичные. Мы можем легко получать и устанавливать им любое значение извне.
8585

8686
Давайте изменим свойство `waterAmount` на защищённое, чтобы иметь больше контроля над ним. Например, мы не хотим, чтобы кто-либо устанавливал его ниже нуля.
8787

@@ -125,7 +125,7 @@ coffeeMachine.waterAmount = -10; // Error: Отрицательное колич
125125

126126
Этот случай идеально подходит для кофеварки: мощность никогда не меняется.
127127

128-
Доя этого нам нужно создать только геттер, а сеттер не создавать:
128+
Для этого нам нужно создать только геттер, а сеттер не создавать:
129129

130130
```js run
131131
class CoffeeMachine {
@@ -178,7 +178,7 @@ new CoffeeMachine().setWaterAmount(100);
178178
```smart header="Защищённые поля наследуются"
179179
Если мы унаследуем `class MegaMachine extends CoffeeMachine`, ничто не защитит нас от доступа к `this._waterAmount` или `this._power` из методов нового класса.
180180
181-
Таким образом защищённые методы конечно же наследуются. В отличие от приватных полей, в чем мы убедимся ниже.
181+
Таким образом защищённые методы, конечно же, наследуются. В отличие от приватных полей, в чём мы убедимся ниже.
182182
```
183183

184184
## Приватное свойство "#waterLimit"
@@ -270,7 +270,7 @@ class CoffeeMachine extends CoffeeMachine() {
270270
}
271271
```
272272

273-
Во многих случаях такое ограничение слишком жестко. Если мы расширяем `CoffeeMachine`, у нас может быть законная причина для доступа к внутренним методам и свойствам. Поэтому в большинстве случаев используются защищённые свойства, даже если они не поддерживаются синтаксисом языка.
273+
Во многих случаях такое ограничение слишком жёсткое. Если мы расширяем `CoffeeMachine`, у нас может быть законная причина для доступа к внутренним методам и свойствам. Поэтому в большинстве случаев используются защищённые свойства, даже если они не поддерживаются синтаксисом языка.
274274

275275
````warn
276276
Приватные поля особенные.
@@ -293,28 +293,28 @@ class User {
293293

294294
В терминах ООП разделение внутреннего интерфейса от внешнего называется [инкапсуляция](https://ru.wikipedia.org/wiki/%D0%98%D0%BD%D0%BA%D0%B0%D0%BF%D1%81%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5).
295295

296-
Это дает следующие выгоды:
296+
Это даёт следующие выгоды:
297297

298298
Защита для пользователей, чтобы они не выстрелили себе в ногу
299-
: Представьте себе,что есть команда разработчиков, использующая кофеварку. Она была изготовлена компанией «Best CoffeeMachine» и работает нормально, но защитная крышка была снята. Внутренний интерфейс обнажен.
299+
: Представьте себе, что есть команда разработчиков, использующая кофеварку. Она была изготовлена компанией «Best CoffeeMachine» и работает нормально, но защитный кожух была снята. Внутренний интерфейс стал доступен извне.
300300

301301
Все разработчики культурны -- они используют кофеварку по назначению. Но один из них, Джон, решил, что он самый умный, и сделал некоторые изменения во внутренностях кофеварки. После чего кофеварка вышла из строя через два дня.
302302

303-
Это, конечно, не вина Джона, а скорее человека, который снял защитную крышку и позволил Джону делать свои манипуляции.
303+
Это, конечно, не вина Джона, а скорее человека, который снял защитный кожух и позволил Джону делать свои манипуляции.
304304

305305
То же самое в программировании. Если пользователь класса изменит вещи, не предназначенные для изменения извне -- последствия непредсказуемы.
306306

307307
Поддерживаемость
308-
: Ситуация в программировании сложнее, чем с реальной кофеваркой, потому что мы не просто покупаем ее один раз. Код постоянно подвергается разработке и улучшению.
308+
: Ситуация в программировании сложнее, чем с реальной кофеваркой, потому что мы не просто покупаем её один раз. Код постоянно подвергается разработке и улучшению.
309309

310310
**Если мы строго разграничим внутренний интерфейс, то разработчик класса может свободно изменять его внутренние свойства и методы, даже не информируя пользователей..**
311311

312-
Гораздо проще разрабатывать, если вы знаете, что определенные методы можно переименовывать, их параметры можно изменять и даже удалять, потому что от них не зависит внешний код.
312+
Гораздо проще разрабатывать, если вы знаете, что определённые методы можно переименовывать, их параметры можно изменять и даже удалять, потому что от них не зависит внешний код.
313313

314-
С выходом новой версии вы можете подностью все переписать, но для пользователя будет просто обновиться, если внешний интерфейс остался такой же.
314+
С выходом новой версии вы можете полностью всё переписать, но пользователю надо будет просто обновиться, если внешний интерфейс остался такой же.
315315

316316
Сокрытие сложности
317-
: Люди обожают использовать простые вещи. По крайней мере снаружи. Что внутри, это другое дело.
317+
: Люди обожают использовать простые вещи. По крайней мере, снаружи. Что внутри -- это другое дело.
318318

319319
Программисты не являются исключением.
320320

0 commit comments

Comments
 (0)