Прототипы и классы
Ответ 1
Один интересный бит заключается в том, что легко сделать языковой акт на основе прототипа OO, но трудно сделать основанный на прототипе язык языка OO.
- Alex Arnell inheritance.js - это короткий и сладкий кусок кода, который заставляет JavaScript действовать OO, в комплекте с доступом к родительскому классу ',
- Здесь один из решений Джона Ресига по той же проблеме: http://ejohn.org/blog/simple-javascript-inheritance/.
- Глава 16 программирования в Lua описывает объектную ориентацию в Lua. В частности, раздел 16.2 дает хороший пример наследования.
Не совсем понятно, как выглядел бы прототип OO, помимо композиции по сравнению с наследованием, как вы упомянули.
Язык прототипа упрощает сложное наследование. Вы можете реализовать множественное наследование, mixin -подобное поведение, или просто выберите и выберите то, что вы хотите от одного объекта, чтобы добавить к другому.
Статья в Википедии упоминает: "Адвокаты прототипов программирования часто утверждают, что основанные на классе языки поощряют модель развития, которая фокусируется сначала на таксономия и отношения между классами. Напротив, прототипное программирование рассматривается как побуждение программиста сосредоточиться на поведении некоторого набора примеров и только позже беспокоиться о классификации этих объектов в архетипических объектах, которые позже используются в моде, подобном классам."
Чтобы не сказать, что прототипная парадигма - это все плюсы и минусы. Если OO является более ограничительным, это потому, что он хочет быть. Я вижу, где вся эта гибкость может вызвать у вас неприятности, если вы не будете осторожны.
Ответ 2
Прототипы - это форма наследования, это просто, что объекты наследуют атрибуты и поведение непосредственно от других объектов, вместо того, чтобы получать их атрибуты и поведение из своего класса, который наследуется от других классов.
В качестве примера можно проверить любой объектно-ориентированный код на языке прототипа, например, например, JavaScript.
Ответ 3
Для желающих NewtonScript был (есть) двойной язык: у вас были прототипы, и у вас были классы. Вы можете выбрать, следует ли наследовать от класса, от прототипа или от обоих.