Объясняется простыми и понятными примерами

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

Объектно-ориентированное программирование (ООП) — одна из многих парадигм программирования, используемых в мире языков программирования. Его способность захватывать и представлять мир интуитивно понятным образом снискала ему большую популярность, поскольку большинство современных языков, таких как Java, JavaScript, Python, обеспечивают определенный уровень его поддержки. Давайте начнем и узнаем больше об этом с помощью JavaScript! :)

Объектно-ориентированное программирование — это процесс использования «объектов» в качестве основы для создания приложений. ООП стремится описывать объекты реальной жизни, такие как автомобиль, дом, человек или кошка, используя 4 основных понятия:

  • Инкапсуляция
  • Полиморфизм
  • Наследование
  • Абстракция

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

Это факт объединения всего содержимого объекта в «капсулу», которая называется классом. Класс содержит переменные и функции, называемые методами, которые позволяют ему выполнять определенные задачи. Вы можете думать об этом как о наборе инструментов; панель инструментов позволяет разместить все связанные инструменты в одном месте. Конечно, вы бы не положили туда свою зубную щетку, верно? В эту коробку должны помещаться только бытовые инструменты. Например, у вас может быть класс Car с переменной для названия марки. В JavaScript классы определяются с использованием следующих обозначений:

class ClassName {
    //Definition goes here
}

Соглашение состоит в том, чтобы использовать заглавную букву для имени класса и верблюжьего регистра, если оно состоит из нескольких слов. Например, "car show" станет class CarShow. Давайте продолжим и определим класс Car:

class Car {
}

Этот класс позволит нам позже создавать его копии, называемые экземплярамикласса. Определяя класс, вы хотите использовать нечто, называемое конструктором, для присвоения значений его экземплярам. В нашем случае мы можем использовать конструктор, чтобы присвоить название марки объекту car.

class Car {
        constructor(brand) {
             this.carname = brand;
       }
}

Ключевое слово this представляет экземпляр автомобиля, а «carname» называется свойством автомобиля. Теперь, когда мы определили наш класс Car, мы можем создать его экземпляр (копию) и дать ему имя.

let myCar = new Car("Toyota");   //Create a Car instance
console.log(myCar.carname);      //Output it to the console

Выход: Toyota

Инкапсуляция позволяет нам создать один класс Car с любым количеством свойств и создать столько его копий, сколько нам нужно! Разве это не удивительно! Всякий раз, когда нам нужно изменить свойство, чтобы оно повлияло на наши экземпляры, мы можем просто изменить его в самом определении класса без необходимости изменять каждое из них! Удивительный!

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

class Car {
    constructor(brand) {
           this.carname = brand;
     }
     sound(){
            return "Vroom!!!"
     }
}

Затем мы можем выйти из него: console.log(myCar.sound())

Выход: Vroom!!!

Потрясающий! 😃

Полиморфизм

Слово «полиморфизм» буквально означает «существующий во многих формах» от греческих слов poly (много) и morphe (форма). Эта концепция означает, что методы в классе могут иметь несколько форм. В нашем примере наш метод sound можно было бы переопределить, чтобы он принимал аргумент для типа звука, который он издает.

class Car {
      constructor(brand) {
           this.carname = brand;
      }
      sound(){
            return "Vroom!!!"
    }
      sound(honk){
            return honk + "!!!"
     }
}

Давайте создадим экземпляр и воспользуемся нашей новой версией этого метода:

let myCar = new Car("Toyota")
console.log(myCar.sound("peepeeep"))

Выход: peepeeep!!!

Говорят, что второй метод переопределяет первый. Хотя пример тривиален, суть в том, что мы можем создать другую версию метода для конкретных целей. Это полиморфизм!

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

Одной из самых крутых особенностей ООП является то, что классы могут наследовать от других так же, как ребенок наследует черты родителей. Дочерний класс может не только наследовать все свойства и методы родительского класса, но также добавлять или расширять их!

class Parent {
        constructor(firstname, lastname, haircolor) {
            this.firstName = firstname;
            this.lastName = lastname
            this.hairColor = haircolor
         }
       hairColor(){
            return this.hairColor
       }
}

В JavaScript каждый объект имеет ссылку на другой объект, называемый его прототипом. Кроме того, почти все объекты являются экземплярами встроенного класса Object. Другими словами, практически все объекты JS наследуются от собственного класса Object. Доступ к свойствам родительского класса можно получить через его прототип.

Абстракция

Абстракция — это факт сокрытия кода от пользователя и предоставление ему доступа только к существенным частям кода. Это можно сравнить с чтением блогов на этом сайте. За кулисами есть сотни строк кода, которые объединяются для отображения этой страницы, он скрывает их, потому что они не важны для чтения этого блога. Другим примером является автомобиль, его внешнее великолепие скрывает двигатель, аккумулятор, оси и т. д. Мы думаем об автомобиле только как о едином объекте, хотя он состоит из нескольких частей. Точно так же с абстракцией вы можете иметь объект кошка с переменными, называемыми мяу, мурлыканье, и кусать. Вам не нужно знать об этих деталях, чтобы использовать его.