Оп в программировании

Объектно-ориентированное программирование (ООП). Набор методов. Родившихся в Simula и Smalltalk. Стало основной парадигмой после того. Как Stroustrup/Bell Labs представили C++ (1983), лучший C. Специально усовершенствованный с введением ООП. По мере того как C++ становился доминирующим языком (и очень большим). Появилась Java (1995). Он принял модель ООП C++. Заменив интерфейсы множественным наследованием. Java вырос, чтобы заменить Cobol (1959!) в качестве доминирующего языка для коммерческой обработки данных. Модель ООП C++/Java. Хотя она, возможно. Была шагом назад от Smalltalk. Теперь называется

JavaScript (также 1995) представил новую модель объектного программирования. Которую можно назвать Чтобы понять разницу. Мы начнем с частичного определения понятия Объект начинается как набор свойств. Каждое из которых имеет ключ и значение. Ключи в JavaScript ограничены строками и называются В классическом ООП имена являются подмножеством строк. Приемлемых в качестве идентификаторов переменных. В обоих случаях возможные значения так же просты. Как логическое или общее. Как другой объект. (В JavaScript функции являются объектами и. Следовательно. Могут быть значениями свойств.)

Существенное различие между ООП и ОП заключается в том. Что в первом случае программист работает со значениями свойств.

В последнем случае программист работает со свойствами. Как с именами и значениями. Так и с самими объектами. Добавляя и/или удаляя свойства по мере необходимости.

Определения классов

В классическом ООП все начинается с модуля, называемого Конструктор определяет свойства (имена и типы), которые являются частью Каждый член класса, называемый

В объектном программировании код может добавлять или удалять свойства по своему желанию. Поэтому первоначальное определение списка свойств значительно уменьшается по важности.

JavaScript позволяет использовать любую функцию в качестве конструктора. По соглашению. А не по требованию. Конструкторы JavaScript (только) начинаются с заглавной буквы. Ключевое слово thisвнутри конструктора). Присваивает ссылку конструктору в прототипе объекта. Доступном как this.constructor, и присваивает this.constructor.prototypeв качестве прототипа объекта this Как и в ООП. Программист пишет код по мере необходимости для дальнейшего оснащения thisначальным набором свойств . Затем конструктор возвращает thisссылку на объект.

В классической модели ООП конструкторы определяют классы. В том числе определяют свойства. Являющиеся членами каждого экземпляра класса.

В модели OP JavaScript конструкторы служат для определения начального набора свойств экземпляра и связывания экземпляров с Прототип также относится к своему собственному прототипу в цепочке. Которая может быть использована для реализации классического наследования. (Наследование в JavaScript мало используется по сравнению с наследованием в классическом ООП.)

JavaScript Не Имеет Классов?

Некоторые разработчики (которые действительно должны знать лучше!) критикуют JavaScript за отсутствие классов.

Это глупость. Порожденная невежеством. Это было бы похоже на то. Как разработчики JavaScript критикуют классическую ООП за отсутствие цепочек прототипов. (Последняя ошибка редко совершается. Так как большинство разработчиков JavaScript имеют некоторый опыт работы в классическом ООП.)

В JavaScript эквивалентная работа выполняется таким же образом. С помощью функции конструктора. Класс также может включать собственные свойства (включая функции) (в Java: В JavaScript они будут прикреплены непосредственно к функции конструктора для того же результата.

Критическим для модели ООП является то, что

(Было бы крайне расточительно хранить дубликаты копий каждого метода с каждым экземпляром объекта.) В JavaScript методы экземпляра хранятся в свойстве

В классической модели функции не являются объектами и поэтому не могут быть снабжены свойствами. JavaScript позволяет присоединять свойства к функциям. Что является отличной альтернативой классам ООП.

В общем, конструктор JavaScript плюс его prototypeсвойство позволяют использовать те же возможности. Что и классический класс ООП для объектов экземпляра. Возможность добавления дополнительных свойств к конструктору обеспечивает возможности

Возможность добавления еще большего количества свойств во время выполнения дает объектному программированию JavaScript гораздо больше возможностей. Чем застывшие во время компиляции классы классического ООП.

Объектное программирование

В объектном программировании работа со значениями свойств выполняется так же. Как и в классическом ООП. Вы можете написать, например:

foo.bar = выражение;

Эта строка вычисляет expressionи присваивает результат barсвойству fooобъекта как в ООП. Так и в ОП. В JavaScript вы можете написать ту же самую строку таким образом:

foo[ ‘bar’ ] = выражение;

Это делает точно то же самое. Заменяя подстрочную нотацию классической точечной нотацией.

Это становится интересным. Когда вы рассматриваете это:

var propname = name_expression;
foo[ propname ] = выражение;

Вышеизложенное вычисляет значение name_expressionи использует его в качестве имени свойства. Для которого следующим результатом будет значение. Если свойство существует. Его значение заменяется (как в ООП). Если свойство не существует. Оно создается. (Как это обычно бывает в ООП. Гибридные языки. Такие как Python. Позволяют динамическое создание свойств объектов. Эта способность является фундаментальной для объектного программирования.)

Больше OP

На странице Примеры объектного программирования приведены дополнительные примеры объектного программирования. Он показывает. Как очень простая функция может Он показывает. Как это можно использовать при стилизации элементов DOM на HTML-странице.

Другой пример на этой странице показывает процедуру. Которая меняет ключи и значения. Если предположить. Что объекты JavaScript запрограммированы на оптимизацию поиска значений с заданными именами свойств. То из этого следует. Что поиск имен свойств с заданными значениями будет менее эффективным. Реверсирование ключей и значений устраняет эту проблему:

person[ ‘name’ ] = ‘Martin’; // типичный

// после реверсирования:

person[ ‘Martin’ ] // значение — ‘name’

Программист ООП при первой встрече JavaScript не находит старых. Знакомых классов. Функциональность класса OOP есть все. Но программист должен изучить новую модель. (И программист должен немного изучить функциональные возможности программирования JavaScript. Такие как назначение свойств функциям.)

ОП-программист не найдет инструментарий ООП должным образом укомплектованным. Чтобы соответствовать встроенным возможностям JavaScript. Программисту нужно, например. Отказаться от ООП C++ и перетащить библиотечные процедуры для управления словарями хэш-таблиц. А затем построить решение из библиотечных структур. Как вы можете себе представить. Это не улучшает читабельность и ремонтопригодность результирующей программы.

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

Наследование в классическом ООП достигается с помощью иерархий классов. Они не нужны. Если присутствуют возможности объектного программирования (OP). (На этом сайте см. раздел Сравнение методов наследования JavaScript для сравнения решений. Создающих классы в стиле ООП в JavaScript.)

Воссоздание классического наследования в JavaScript не требуется. Этот автор пришел к выводу. Что проще встретить JavaScript на его собственных. Прототипических терминах. Гуру JavaScript Дуглас Крокфорд пришел к такому же выводу. Назвав свой классический код наследования

Однако это серьезная дань силе ОП-модели JavaScript в том. Что вы можете легко превратить ее в модель. Основанную на классах C++/Java. Написание прототипной системы наследования в C++ или Java, безусловно. Займет гораздо больше. Чем 60 строк (или меньше). Необходимых для эмуляции классического ООП в JavaScript.

Классические и прототипические модели наследования достигают тех же целей. Программист,привыкший к одному, однако. Должен будет сделать некоторое новое обучение. Чтобы освоить другой.

Определение объектного программирования

Модель ООП объединяет экземпляры объектов. Наборы пар ключ/значение со структурой класса. Которая предоставляет процедуру для создания экземпляров. Хранения методов экземпляра и других служб. Это определение объектного программирования должно обеспечить значительно большую мощность:

  • Система объектного программирования (OP) позволяет создавать. Изменять и утилизировать объекты.
  • Объекты — это наборы свойств. Свойства-это пары ключ/значение.
  • Это включает в себя изменение ключей или значений.
  • Система OP также предоставляет различные услуги. Предоставляемые классами ООП. Такие как создание экземпляров объектов и хранение данных и кода на уровне класса (чтобы избежать дублирования в каждом объекте экземпляра).

Обратите внимание. Что по этому определению ОП-модель JavaScript является неполной. Поскольку она не допускает прямого изменения имен свойств. (Для изменения имени свойства требуется трехстрочная служебная функция. Прямой подход к изменению имени был бы предпочтительнее. И он мог бы избежать возможной дорогостоящей копии объекта.)

Вывод

Объектное программирование (OP). Как и в JavaScript. Существенно мощнее объектно-ориентированного программирования (ООП). Как в C++ и Java. Существенное отличие состоит в том. Что ООП позволяет программисту манипулировать значениями в парах ключ/значение объекта. в то время как модель OP позволяет программисту манипулировать как ключами. Так и значениями. Кроме того, ОП-программист может манипулировать структурой. Эквивалентной классу ООП во время выполнения (в дополнение к определению структуры во время компиляции).