Вопрос

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

Это было полезно?

Решение

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top