Каковы преимущества, которые основанное на прототипе OO имеет по основанному на классе OO?

Здесь понятие «асинхронно» означает, что вы не ожидаете результата как зависимости для выполнения какой-либо другой задачи, например, вставки дочерних записей с идентификатором родительской записи, возвращаемым из команды «создать родителя». Действительно, «Обновление» в верхней части статьи, на которую вы ссылались, говорит именно так: клиент должен создать идентификаторы для записей, вставленных в базу данных, и это позволяет безупречно реализовать CQ (R) S.

42
задан blueberryfields 18 February 2011 в 09:44
поделиться

6 ответов

Преимущество прототипного наследования состоит в том, что оно потенциально позволяет легко создавать причудливые метапрограммы, поскольку цепочкой прототипов легко манипулировать . Это скорее академическое преимущество, потому что метапрограммирование - неправильный ответ в 99% случаев. В качестве примера у вас может быть уровень манипулирования данными в стиле Javascript Key-Value Observer со специальным DSL, который прозрачно переключается между локальной поддержкой SQLite в автономном режиме и серверным хранилищем на основе REST в режиме онлайн посредством обмена прототипами. Я не уверен, что это лучший способ сделать это, но это лучшее, что я могу придумать так поздно. Это не то, что вы обычно хотите делать в коде проекта, поскольку такого рода косвенное обращение является адом для отладки, когда вы начинаете запускать его на нескольких уровнях, но это неплохо, когда вы храните его в библиотеке.

Еще одно менее полезное преимущество - это то, что он позволяет вам создавать свою собственную систему классов. Я говорю «менее полезно», потому что более или менее все библиотеки javascript имеют свой собственный, слегка несовместимый подход к тому, как собираются «классы».

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

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

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

23
ответ дан 26 November 2019 в 23:45
поделиться

Я не знаю точных причин для этого, но вот мои причины

Я думаю, что этот аргумент аналогичен динамическому и статическому, класс - это статическое определение объекта. , который можно легко использовать, чтобы узнать, чего ожидать от объекта, он также помогает инструментам языков, чтобы иметь надлежащую поддержку intellisense и документацию, потому что вы можете легко узнать, каковы различные элементы и методы в объекте, еще одна вещь - это другая парадигма наличия возможности объявлять закрытые члены в классе, которые не отображаются на объекте, это невозможно сделать в парадигме прототипа.

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

12
ответ дан 26 November 2019 в 23:45
поделиться

http://en.wikipedia.org/wiki/Prototype-based_programming#Criticism , я думаю, достаточно хорошо объясняет.

6
ответ дан 26 November 2019 в 23:45
поделиться

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

На самом деле объектно-ориентированный объект на основе классов популярен, потому что Java использует классический объектно-ориентированный объект, а Sun потратила миллионы долларов и очень долго создавала популярность Java - обеспечение того, чтобы люди знали, что она успешно используется в корпорациях, широко преподается в университетах и ​​на тестах AP в средней школе.

Прототипный / классический объектно-ориентированный объект - это просто разные способы организации ваших идей. Вы можете реализовать любой из них на языках, которые не поддерживают его изначально (на ум приходят Python и Java , и JavaScript с другой стороны).

В классическом объектно-ориентированном стиле вы определяете абстрактную иерархию классов для своих объектов, а затем фактически работаете с экземплярами этих классов. В прототипном наследовании вы создаете иерархию экземпляров объекта. Хотя я полагаю, что это может быть немного еретическим в обоих лагерях, я не вижу причин, по которым вы не могли бы смешать их ...

19
ответ дан 26 November 2019 в 23:45
поделиться

Я думаю, что разница в силе динамического (прототипированного) языка, который дает вам. Javascript, как и LISP, дает программисту практически неограниченные возможности. Эта сила ограничивается только ответственностью программиста и уровнем его уверенности в себе. Таким образом, обсуждение столь же старо, как и есть - то же самое, что и статическая типизация против безтиповой. Если вы считаете, что ваша способность к программированию и самодисциплина достаточно сильны - выбирайте прототипный стиль.

Перефразируя одно известное высказывание:

Талант делает то, что может (читай: основанный на классе), гений делает то, что хочет (читай : на основе прототипа).

3
ответ дан 26 November 2019 в 23:45
поделиться

Этот вопрос меня заинтриговал, поэтому я вернулся и прочитал несколько оригинальных статей по этой концепции. Похоже, что это началось в середине 1980-х в мире Smalltalk, но со временем стало одним из основополагающих принципов Self . Намного позже его перенял и Javascript

. В документах утверждается, что его легче изучить. На самом деле не предлагается никаких технических преимуществ, кроме обучения. Во всех статьях объясняется, насколько он столь же выразителен, как и язык, основанный на классах, но намного проще для изучения. Люди естественно думают о вещах конкретным образом, а не абстрактно. Мы думаем о слоне, которого видели в зоопарке, а не о обычном «слоне». Когда мы видим других слонов, мы классифицируем их как отличных от первого. Язык, основанный на прототипах, облегчает такое мышление. Думайте об этом как о программировании по дифференциалу.

Является ли это достаточной причиной для использования его в языке? Возможно. За 25 лет, прошедших с тех пор, как эта идея впервые начала просачиваться, я бы сказал, что для большинства людей не было слишком сложно изучить абстрактные концепции, такие как объектно-ориентированный объект на основе классов. С другой стороны, возможно, существует потребность в более простом языке программирования (например, Javascript), и это может быть одним из способов достижения этой цели.

Если интересно, вы можете начать с этой статьи ] о себе.

10
ответ дан 26 November 2019 в 23:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: