👉 Привет, друзья, меня зовут Беннисон. В этом блоге я собираюсь рассказать о концепции ООП в JavaScript. Мы можем разделить Javascript на два типа: функциональное программирование и объектно-ориентированное программирование. И этот блог посвящен объектно-ориентированному программированию (ООП).

  • этот блог будет сопровождаться общим обзором объектно-ориентированного языка программирования. Поэтому, если вы не можете понять коды этого блога, не волнуйтесь, мы расскажем о таких вещах в наших следующих блогах. Ладно, заходим в блог.

Что такое объектно-ориентированное программирование (ООП)?

  • Объектно-ориентированное программирование (ООП) основано на концепциях объектов. Таким образом, в нашем приложении мы везде используем объекты для реализации функции.
  • ООП было разработано с целью организации кода. и он более гибкий и простой в обслуживании нашего кода. Я надеюсь, вы все знаете об объектах в javascript, которые также содержат данные, которые называются свойствами, а также называются методами. По сути, объект сам содержит все связанные с ним данные.
const obj = {
  firstName: 'Bennison',
  lastName: 'J',
  getProp: function () {
    console.log(`${this.firstName} ${this.lastName}`);
  }
};

Классы и экземпляры:

  • Классы известны просто как план создания объектов.На изображении ниже вы можете увидеть фабрику, которая считается классом. и автомобили, которые производятся на этом заводе, называются их экземплярами.

// BluePrint for creating Cars (Class)
class CarFactory {
  engine;
  catCategory;
  constructor(engine, carCategory) {
    this.engine = engine;
    this.catCategory = carCategory;
  }
  constructEngine() {
    return this.engine;
  }
  constructVehicleBody() {
    return 'vehicleBody';
  }
  repairCar(car) {
    return 'repaired sucessfully';
  }
  getCar() {
    const engine = this.constructEngine(this.engine);
    const body = this.constructVehicleBody(this.carBodyDesign);
    return `A ${this.catCategory} has been made with ${engine}`;
  }
}

// Creating Instance: 
const car = new CarFactory('V6 engine', 'sportsCar');
console.log(car) // CarFactory { engine: 'V6 engine', catCategory: 'sportsCar' }
console.log(car.getCar) // A sportsCar has been made with V6 engine
  • В приведенном выше примере вы можете увидеть класс под названием CarFactory. Здесь это схема создания автомобилей. Чтобы создать экземпляр, мы должны вызвать класс, используя ключевое слово «new», только тогда мы сможем создать экземпляр из класса. Здесь экземпляр называется автомобилем.
  • Мы можем, чтобы все объекты, созданные с помощью класса, назывались экземплярами этого класса. Экземпляры — это объекты, которые мы можем использовать в нашем коде. и сам класс не является объектом.

  • Создавая экземпляр из класса, мы должны вызывать класс с новым ключевым словом.
const cat = new CarFactory('v6Engine', 'SportsCar')

Как правильно создать класс?

  • Чтобы правильно создать класс, существуют четыре фундаментальных принципа, которые помогут определить его неправильно. Этими принципами являются «Абстракция», «Инкапсуляция», «Наследование» и «Полиморфизм».

Абстракция:

  • Абстракция, что означает игнорирование или сокрытие некоторых свойств или методов. Например, в ноутбуке вам не нужно беспокоиться о том, как работает материнская плата и как работает клавиатура. Когда пользователь взаимодействует с ноутбуком, такие вещи абстрагируются от пользователя.
  • В интерфейсной веб-разработке мы использовали функцию addEventListener, но нам не нужно беспокоиться о том, как она работает за кулисами. Потому что низкоуровневые детали рабочего процесса этой функции абстрагируются от нас.

Инкапсуляция

  • Инкапсуляция, что означает сохранение некоторых свойств и методов закрытыми внутри класса. И частные методы и свойства недоступны за пределами своего класса. однако некоторые методы и свойства могут быть доступны в общедоступном интерфейсе. вы можете использовать эти общедоступные свойства вне класса.
class User {
  user: any;
  private email: string;
  private password: string;

  login(email: string, password: string) {
    if (email === this.email) {
      if (this.password === password) {
        // inside the class the password can be accessible
        return true;
      }
      return 'Invalid email or password';
    } else {
      return 'Invalid email or password';
    }
  }
  private decryptPassword(password: string) {
    return 'decrypted password';
  }
  private encryptedPassword(password: string) {
    return 'encrypted password';
  }
}
const user = new User(); // creating instance.
user.login('[email protected]', 'ben@123'); // the method login can be accessible of the class.
console.log(user.email); // can't be accessed outside of the class.
console.log(user.password); // can't be accessed outside of the class.
  • Ключевого слова «частный» нет в javascript, это часть машинописного текста. В приведенном выше примере мы создали экземпляр, который называется пользователем. Здесь важно то, что мы можем вызвать метод login. Поскольку он не является приватным, это означает, что он не инкапсулирован.
  • Если вы хотите получить доступ к свойствам электронной почты и пароля от экземпляра. это невозможно, выдаст ошибку. поскольку свойства email, password и методы 'decryptPassword' и 'encryptedPassword' инкапсулированы внутри класса используя ключевое слово под названием «частный». Но электронная почта и пароль могут быть доступны внутри класса.

Наследование:

  • Один класс, унаследованный от другого класса, называется наследованием. что означает, что дочерний класс расширяет свой родительский класс. Чтобы создать дочерний класс, вам нужно использовать ключевое слово «extends».
// base class
class User {
  email;
  password;
  last_name;
  first_name;

  login(email, password) {
    // logic for login
  }
  logout() {
    // logic for logout
  }
}

// child class inherited from the class user
class Admin extends User {
  permissions;
  deleteUser() {
    // logic for delete user;
  }
}
const admin = new Admin(); // createing instance

admin.login('[email protected]', '1234'); // the method login method can be accessible in the child class' instance.
admin.deleteUser();
console.log(admin.first_name); // the property first_name can accessible in child class's instance
  • В приведенном выше примере мы видим класс User, который является базовым классом. и другой класс называется Admin, и он расширяется от класса User. И здесь важный вопрос, почему класс admin наследуется от класса User. Ответ заключается в том, что класс Admin нуждается во всем поведении класса User. потому что у администратора также есть логин, имя, фамилия, адрес электронной почты и пароль. Вместо того, чтобы переписывать код, мы можем просто расширить наш дочерний класс от родительского класса, это называется наследованием.
  • В приведенном выше примере администратор экземпляра создается из класса admin. даже несмотря на то, что он создан из класса администратора, я могу получить доступ к логину и свойствам метода first_name, last_name и всем остальным в родительском классе. а также экземпляр дочернего класса также имеет свои собственные свойства и методы.

Полиморфизм:

  • Полиморфизм, означающий, что дочерний класс может перезаписать метод, унаследованный от родительского класса.
  • Например, если родительский и дочерний классы, оба класса имеют метод с тем же именем, который называется «логин». затем метод входа в дочерний класс перезаписывает свой унаследованный метод входа в систему, который унаследован от его родительского класса.
class User {
  email;
  password;
  last_name;
  first_name;

  login(email, password) {
    console.log('parant class');
    // logic for login
  }
  logout() {
    // logic for logout
  }
}

// child class inherited from the class user
class Admin extends User {
  permissions;
  login(email, passwor) {
    console.log('child class');
    // logic for login
  }
}
const admin = new Admin(); // createing instance
admin.login('[email protected]', '1234'); // child class
  • В приведенном выше примере экземпляр, созданный из дочернего класса Admin, называется admin. здесь и базовый класс, и дочерний класс имеют собственный метод входа в систему. Поэтому, когда метод входа в систему вызывается из экземпляра дочернего класса (admin), он выполняет свои собственные методы входа в систему, а не метод входа в родительский класс. Это называется полиморфизмом.

Вывод:

  • Я надеюсь, что в этом блоге мы узнали основные вещи о концепции ООП. Спасибо за чтение этого блога. До скорой встречи👋.