Prototype-based programming
От: Зверёк Харьковский  
Дата: 11.11.06 16:01
Оценка: 32 (6) :))
Тему начали дергать вот тут
Автор: c-smile
Дата: 31.10.06
, но может не все заметили.
А тема, скажем прямо, интересная.

Я в ней только начал разбираться, так что ниже — несколько сырых и неоформленных мыслей.

1. Прототипное программирование — такой способ программирования, при котором новые объекты создаются не как экземпляры "классов", а как клоны существующих объектов; объекты могут изменяться на лету (например, добавлять методы); никаких концепций, кроме "объекты и сообщения" не существует — нет классов, нет наследования, нет синглетонов, нет ложки. Прототипное программирование — не "такое криво сделанное ООП", а другая парадигма.

2. Языки, которые изначально создавались как прототипные — Self (клон Smalltalk) и JavaScript. Тем не менее, в прототипном стиле можно программировать на многих других ОО языках; достаточно, чтобы язык позволял: а) модификацию объекта на лету и б) клонирования объекта, которое создает копию объекта, включая все методы, добавленные на лету (например, Ruby)

3. В "истинно прототипном" программировании, новый объект, созданный путем клонирования, "забывает" о "родителе". Тем не менее, и в Self, и в JS различными способами имитируется "что-то вроде наследования" ("я помню о своем прототипе, и если не знаю как обработать сообщение, прошу его это сделать"). Из чего можно сделать определенные выводы. И я от них не удержусь!

Выводы, практически ничем не обоснованные

Prototype-based programming — интересная и полезная парадигма. Наиболее полезна она в совмещении с "традиционным", class-based OOP.
"Линия совмещения" имхо, проходит вот где:
* если данный объект, по своей роли, это "данные + некоторые методы их обработки" (данные важнее методов, объектов огромная куча, они хранятся списками и обрабатываются все как один) — то ему "полезнее" быть экземпляром класса (особенно, если классы открытые — в Ruby можно в любой момент добавить метод в класс Integer, и все Integer'ы в программе будут иметь этот метод).
* если данный объект — это "поведение + нужные для него данные" (данные без методов мало что значат, объект один или несколько, может иметься большая иерархия наследников, несколько модифицирующих поведение) — то для него вполне осмысленным может оказаться prototype-based подход (глупый пример: кинуть на форму Editbox, склонировать его, добавить синенькую кнопочку — создавать класс "editbox с синенькой кнопочкой" ради единственного применения — как бы overhead).

Ы?
FAQ — це мiй ай-кью!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.