Объектная ориентация — это парадигма разработки программного обеспечения, которая следует моделированию в реальном мире. Ориентация на объекты, рассматривает программу как совокупность объектов, которые взаимодействуют друг с другом с помощью механизма, называемого методами . ES6 также поддерживает эти объектно-ориентированные компоненты.
Концепции объектно-ориентированного программирования
Для начала давайте разберемся
-
Объект — объект представляет собой представление в реальном времени любого объекта. По словам Грэди Броши, каждый объект имеет 3 свойства —
-
Состояние — описывается атрибутами объекта.
-
Поведение — описывает, как будет действовать объект.
-
Идентичность — уникальное значение, которое отличает объект от набора подобных подобных объектов.
-
-
Класс — класс с точки зрения ООП является планом для создания объектов. Класс инкапсулирует данные для объекта.
-
Метод — Методы облегчают общение между объектами.
Объект — объект представляет собой представление в реальном времени любого объекта. По словам Грэди Броши, каждый объект имеет 3 свойства —
Состояние — описывается атрибутами объекта.
Поведение — описывает, как будет действовать объект.
Идентичность — уникальное значение, которое отличает объект от набора подобных подобных объектов.
Класс — класс с точки зрения ООП является планом для создания объектов. Класс инкапсулирует данные для объекта.
Метод — Методы облегчают общение между объектами.
Давайте переведем эти объектно-ориентированные концепции в реальность. Например: автомобиль — это объект, который имеет данные (марка, модель, количество дверей, номер транспортного средства и т. Д.) И функциональность (ускорение, смещение, открытие дверей, включение фар и т. Д.)
До ES6 создание класса было суетливым делом. Классы могут быть созданы с помощью ключевого слова class в ES6.
Классы могут быть включены в код либо путем их объявления, либо с помощью выражений классов.
Синтаксис: Объявление класса
class Class_name { }
Синтаксис: выражения класса
var var_name = new Class_name { }
Ключевое слово class сопровождается именем класса. Правила для идентификаторов (уже обсуждались) должны учитываться при именовании класса.
Определение класса может включать следующее:
-
Конструкторы — ответственны за выделение памяти для объектов класса.
-
Функции — функции представляют собой действия, которые может выполнять объект. Они также иногда упоминаются как методы.
Конструкторы — ответственны за выделение памяти для объектов класса.
Функции — функции представляют собой действия, которые может выполнять объект. Они также иногда упоминаются как методы.
Эти компоненты, собранные вместе, называются членами данных класса.
Примечание . Тело класса может содержать только методы, но не свойства данных.
Пример: объявление класса
class Polygon { constructor(height, width) { this.height = height; this.width = width; } }
Пример: выражение класса
var Polygon = class { constructor(height, width) { this.height = height; this.width = width; } }
Приведенный выше фрагмент кода представляет безымянное выражение класса. Выражение именованного класса может быть записано как.
var Polygon = class Polygon { constructor(height, width) { this.height = height; this.width = width; } }
Примечание. В отличие от переменных и функций, классы нельзя поднимать.
Создание объектов
Чтобы создать экземпляр класса, используйте ключевое слово new, за которым следует имя класса. Ниже приводится синтаксис для того же.
var object_name= new class_name([ arguments ])
Куда,
-
Новое ключевое слово отвечает за создание экземпляров.
-
Правая часть выражения вызывает конструктор. В конструктор должны быть переданы значения, если он параметризован.
Новое ключевое слово отвечает за создание экземпляров.
Правая часть выражения вызывает конструктор. В конструктор должны быть переданы значения, если он параметризован.
Пример: создание класса
var obj = new Polygon(10,12)
Доступ к функциям
Атрибуты и функции класса могут быть доступны через объект. Использовать ‘.’ точечная нотация (называемая точкой ) для доступа к данным членов класса.
//accessing a function obj.function_name()
Пример: собрать их вместе
'use strict' class Polygon { constructor(height, width) { this.h = height; this.w = width; } test() { console.log("The height of the polygon: ", this.h) console.log("The width of the polygon: ",this. w) } } //creating an instance var polyObj = new Polygon(10,20); polyObj.test();
Приведенный выше пример объявляет класс ‘Polygon’. Конструктор класса принимает два аргумента — высоту и ширину соответственно. Ключевое слово this ссылается на текущий экземпляр класса. Другими словами, конструктор выше инициализирует две переменные h и w значениями параметров, переданными в конструктор. Функция test () в классе печатает значения высоты и ширины.
Чтобы сделать сценарий функциональным, создается объект класса Polygon. На объект ссылается переменная polyObj . Затем функция вызывается через этот объект.
Следующий вывод отображается при успешном выполнении вышеуказанного кода.
The height of the polygon: 10 The width of the polygon: 20
Статическое ключевое слово
Ключевое слово static может применяться к функциям в классе. На статические члены ссылается имя класса.
пример
'use strict' class StaticMem { static disp() { console.log("Static Function called") } } StaticMem.disp() //invoke the static metho
Примечание. Не обязательно включать определение конструктора. Каждый класс по умолчанию имеет конструктор по умолчанию.
Следующий вывод отображается при успешном выполнении вышеуказанного кода.
Static Function called
Оператор instanceof
Оператор instanceof возвращает true, если объект принадлежит указанному типу.
пример
'use strict' class Person{ } var obj = new Person() var isPerson = obj instanceof Person; console.log(" obj is an instance of Person " + isPerson);
Следующий вывод отображается при успешном выполнении вышеуказанного кода.
obj is an instance of Person True
Наследование классов
ES6 поддерживает концепцию наследования . Наследование — это способность программы создавать новые сущности из существующей сущности — здесь это класс. Класс, расширенный для создания более новых классов, называется родительским классом / суперклассом . Вновь созданные классы называются дочерними / подклассами .
Класс наследуется от другого класса с помощью ключевого слова extends. Дочерние классы наследуют все свойства и методы, кроме конструкторов, от родительского класса.
Ниже приводится синтаксис для того же.
class child_class_name extends parent_class_name
Пример: наследование классов
'use strict' class Shape { constructor(a) { this.Area = a } } class Circle extends Shape { disp() { console.log("Area of the circle: "+this.Area) } } var obj = new Circle(223); obj.disp()
В приведенном выше примере объявляется класс Shape. Класс расширен классом Circle. Поскольку между классами существует отношение наследования, дочерний класс, т. Е. Класс Circle, получает неявный доступ к атрибуту своего родительского класса, т. Е. Области.
Следующий вывод отображается при успешном выполнении вышеуказанного кода.
Area of Circle: 223
Наследование может быть классифицировано как —
-
Single — каждый класс может быть максимально расширен от одного родительского класса.
-
Несколько — класс может наследоваться от нескольких классов. ES6 не поддерживает множественное наследование.
-
Многоуровневый — рассмотрим следующий пример.
Single — каждый класс может быть максимально расширен от одного родительского класса.
Несколько — класс может наследоваться от нескольких классов. ES6 не поддерживает множественное наследование.
Многоуровневый — рассмотрим следующий пример.
'use strict' class Root { test() { console.log("call from parent class") } } class Child extends Root {} class Leaf extends Child //indirectly inherits from Root by virtue of inheritance {} var obj = new Leaf(); obj.test()
Класс Leaf извлекает атрибуты из классов Root и Child посредством многоуровневого наследования.
Следующий вывод отображается при успешном выполнении вышеуказанного кода.
call from parent class
Наследование классов и переопределение методов
Переопределение метода — это механизм, с помощью которого дочерний класс переопределяет метод суперкласса. Следующий пример иллюстрирует то же самое —
'use strict' ; class PrinterClass { doPrint() { console.log("doPrint() from Parent called… "); } } class StringPrinter extends PrinterClass { doPrint() { console.log("doPrint() is printing a string…"); } } var obj = new StringPrinter(); obj.doPrint();
В приведенном выше примере дочерний класс изменил реализацию функции суперкласса.
Следующий вывод отображается при успешном выполнении вышеуказанного кода.
doPrint() is printing a string…
Супер ключевое слово
ES6 позволяет дочернему классу вызывать свой элемент данных родительского класса. Это достигается с помощью ключевого слова super . Ключевое слово super используется для ссылки на непосредственного родителя класса.
Рассмотрим следующий пример —
'use strict' class PrinterClass { doPrint() { console.log("doPrint() from Parent called…") } } class StringPrinter extends PrinterClass { doPrint() { super.doPrint() console.log("doPrint() is printing a string…") } } var obj = new StringPrinter() obj.doPrint()
Переопределение doPrint () в классе StringWriter вызывает вызов его версии родительского класса. Другими словами, ключевое слово super используется для вызова определения функции doPrint () в родительском классе — PrinterClass.
Следующий вывод отображается при успешном выполнении вышеуказанного кода.