Рубрики
ООП принцип "Инкапсуляция"

ООП принцип Инкапсуляция «Понятие»

ПРИМЕР
Rectangle

В данном случае ширину _witdth и высоту _height класса прямоугольник мы сделали приватными. Из-вне теперь обратится к ним будет невозможно.

Нижнее подчеркивание свойства — это некоторое соглашение, которое указывает, что свойство приватное. При этом чаще всего все свойства делают приватными с заредким исключением. А для того, чтобы получать доступ к эти свойствам (т.е. получить или изменять) создаются get и set.

В данном случае вызывая этот get — мы просто вернём ширину этого объекта.

В случае set мы можем просто присвоить новое значение, либо сделать дополнительные какие-то действия.

В нашем случае ширина прямоугольника не может быть отрицательной, потому мы делаем проверку — если полученное значение аргумента меньше или равняется нулю, то тогда ширине мы присваиваем единицу, чтобы значение не было отрицательным, в обратном случае мы ширине просто присваиваем тот аргумент, который получаем из-вне.

class Rectangle {
 private _width;
 private _height;

 constructor(w, h){
  this._width = w;
  this._height = h;
 }

 calcArea() {
   return this._width + this._height;
 }

 calcPerimeter(){
  return (this._height + this._width)*2;
 }
}

Как видите данные, в данном случае, у нас высота является приватной и для неё мы не сделали get и set и поэтому работать мы с ней напрямую мы можем только внутри самого класса. При этом, если мы попробуем изменить ширину на (пример -2), то отработает set и мы увидим значение равное 1.

const rect = new Rectangle (5,10);
rect.width = -2;

Если явно не указывать модификатор доступа, то по умолчанию он устанавливается как public. Но хорошей практикой является указывать его явным. При этом обратите внимание, из вне мы не могли обращаться к высоте _height и ширине _width напрямую, но внутри класса, внутри метода, который считает периметр мы спокойно это можем сделать.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *