Прототипы против классов

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

семантически прототипы + делегирование == классы + наследование

Steven A. Lowe 26.10.2008 08:09
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
10
1
2 398
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

В качестве примеров просмотрите любой объектно-ориентированный код в язык на основе прототипов, например, JavaScript.

у вас все наоборот: наследование на основе классов ООП - это подмножество прототипирования (которое является подмножеством утиной печати)

Javier 26.10.2008 09:51

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

Andru Luvisi 26.10.2008 17:32
Ответ принят как подходящий

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

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

Язык прототипов упрощает сложное поведение наследования. Вы можете реализовать поведение, подобное множественное наследование, миксин, или просто выбрать то, что вы хотите от одного объекта, чтобы добавить к другому.

Статья в Википедии упоминает: «Сторонники программирования на основе прототипов часто утверждают, что языки на основе классов поощряют модель разработки, которая фокусируется в первую очередь на таксономии и отношениях между классами. Напротив, программирование на основе прототипов рассматривается как побуждающее программиста сосредоточиться на поведение некоторого набора примеров и только позже беспокоиться о том, чтобы классифицировать эти объекты в архетипические объекты, которые позже будут использоваться аналогично классам ".

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

Для тех, кто интересуется, NewtonScript был (есть) двуязычным языком: у вас были прототипы и у вас были классы. Вы можете выбрать, наследовать ли от класса, от прототипа или от того и другого.

Другие вопросы по теме