Game Programming Patterns / Паттерны программирования в играх: 1.4. Prototype
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
Если он имеет их - отлично. GromHoll 17.06.14 в 12:00 Если в нем они есть, то все. Deo 25.08.14 в 07:41 |
|
|
Если нет - мы проверим родителя объекта. GromHoll 17.06.14 в 12:01 |
||
|
Это просто ссылка на другой объект. GromHoll 17.06.14 в 12:01 |
||
|
Когда мы не в состоянии найти свойство в первом объекте, мы попытаемся проверить его родителя, потом его родителе, и так далее. GromHoll 17.06.14 в 12:03 Не находим свойство в первом объекте - повторяем поиск на его родителе, затем на родителе родителя и т.д. Deo 25.08.14 в 07:42 |
||
|
Другими словами, неудачный поиск делегируется родителю объекта. GromHoll 17.06.14 в 12:04 Другими словами, в случае неудачи поиск делегируется родителю. Deo 25.08.14 в 07:45 |
||
|
Я, конечно, упрощаю. GromHoll 18.06.14 в 17:55 |
||
|
Self на самом деле поддерживает множественное наследование. GromHoll 18.06.14 в 17:55 |
||
|
Родители - это просто специально отмеченное поле, а значит, вы можете делать такие вещи, как наследование родителей и их изменение, в реальном времени. Это называется динамическим наследованием. GromHoll 19.06.14 в 16:46 |
||
|
Родительские объекты позволяют нам повторно использовать поведение (и состояние!) GromHoll 19.06.14 в 16:47 |
||
|
в нескольких объектах, так что мы покрываем пользу от классов. GromHoll 19.06.14 в 16:50 |
||
|
Другая ключевая способность классов - создание экземляров объектов. rools 01.07.14 в 13:31 |
||
|
Когда вам нужен новый объект класса Thingamabob, вы просто пишите new Thingamabob() или как-то по-другому в зависимости от синтаксиса языка. rools 01.07.14 в 13:37 |
||
|
Класс является неявной фабрикой своих экземпляров. rools 01.07.14 в 13:38 |
||
|
Как бы мы создавали новые объекты без классов? rools 01.07.14 в 13:43 |
||
|
В частности, как бы мы создавали кучу новых объектов, которые бы взаимодействовали между собой? rools 01.07.14 в 13:45 |
||
|
Так же как и в шаблонах проектирования, мы бы сделали это в Self с помощью клонирования. rools 01.07.14 в 13:50 |
||
|
В Self каждый объект поддерживает шаблон Прототип по умолчанию. GromHoll 04.08.14 в 12:43 |
||
|
Любой объект может быть клонирован. rools 01.07.14 в 13:51 |
||
|
Для создания нескольких одинаковых объектов вам нужно всего лишь: rools 01.07.14 в 13:53 |
||
|
Предайте объекту тот вид, который вам необходим. Dmitry84 20.08.14 в 10:00 |
||
|
Вы можете просто скопировать базовый Объект, созданный системой, а после наполнить его различными полями и методами. GromHoll 04.08.14 в 13:03 |
||
|
Клонировать его, чтобы создать столько копий... уф... сколько вам нужно. rools 01.07.14 в 13:56 Создайте столько его клонов, сколько... эм... клонов вам нужно. GromHoll 11.10.14 в 18:10 |
||
|
Мы получили всю элегантность шаблона Prototype без скучной реализации метода clone(); теперь это встроено в систему. rools 01.07.14 в 14:02 |
||
|
Как только я узнал об этой красивой, умной и небольшой системе, я начал создавать язык, основанный на Prototype, чтобы получше разобраться в шаблоне. rools 01.07.14 в 14:08 |
||
|
Я понимаю, что создание языка с нуля не самый хороший способ обучения, но что я могу сказать, я немного странный. rools 01.07.14 в 14:13 |
||
|
Если вам интересно, язык называется Finch. rools 01.07.14 в 14:14 |
||
|
Как все прошло? rools 01.07.14 в 14:14 |
||
|
Я был под большим впечатлением, играя с чисто prototype-ориентированным языком, но в процессе я понял один неприятный факт: программировать на нем было куда менее интересно. rools 01.07.14 в 14:21 |
||
|
С тех пор я слышал через сарафанное радио как многие Self программисты приходили к такому же мнению. rools 01.07.14 в 14:24 |
||
|
Думаю, проект был далек от провала. rools 01.07.14 в 14:26 |
||
|
Self был таким динамичным, что он нуждался во всех нововведениях виртуальной машины для достаточно быстрого запуска. Dmitry84 20.08.14 в 10:09 |
||
|
Идеи которые они придумали для компиляции "на лету", сборщика мусора и оптимизации обработки методов, имевшие одинаковые технические приёмы - часто реализовались одними и теми же людьми. Dmitry84 20.08.14 в 11:35 |
||
|
Так что теперь большинство созданных во всём мире языков с динамической типизацией достаточно быстры для использования в очень популярных приложениях. Dmitry84 20.08.14 в 11:40 |
||
|
Конечно, язык был прост в реализации, но это было потому что вся ответственность ложилась на пользователя. rools 01.07.14 в 16:53 |
||
|
Как только я начал пытаться работать с ним, я обнаружил, что в классах отсутствует структура. rools 01.07.14 в 16:55 Как только я попытался работать с ним, обнаружил, что мне не хватает структурности, которую дают классы. Deo 25.08.14 в 07:50 |
||
|
В конце концов я повторил ее на уровне библиотеки, т.к. в языке ее не было. Deo 25.08.14 в 07:49 |
||
|
Возможно вследствие моего предыдущего опыта с языками, основаными на классах, мой мозг был заражен этой парадигмой. Deo 25.08.14 в 07:59 |
||
|
Но я чувствую, что большинству людей просто нравится хорошо определенная "суть вещей". Deo 25.08.14 в 08:01 |
||
|
В дополнение к ошеломляющему успеху объектно ориентированных языков: посмотрите как много игр имеют явные классы игровых героев и точный набор различных видов врагов, предметов и навыков, каждый из которых четко описан. rools 01.07.14 в 17:10 |
||
|
Вы не видите много игр, где каждый монстр уникальная снежинка, словно "смесь между троллем и гоблином с примесью змеи". rools 01.07.14 в 17:19 Можно видеть, что не так много игр, где каждый монстр - уникальная снежинка, вроде "смесь тролля, гоблина и змеи". Deo 25.08.14 в 08:04 |
||
|
Хотя Prototype действительна клрутая парадигма и я хочу, чтобы как можно больше людей узнало о ней, я рад, что большинство из нас не используют ее каждый день. rools 01.07.14 в 17:26 Хоть Prototype - реально крутая парадигма, о которой, хотелось бы, знали больше людей, я рад, что большинство из нас не пользуются ей ежедневно. Deo 25.08.14 в 08:22 |
+1 | |
|
Тот код, полностью использующий возможности прототипов, что я видел, я нахожу трудным к пониманию. Deo 25.08.14 в 12:06 |
||
|
Еще одним аргументом выступает то, как мало кода в действительности написано в стиле прототипов. Deo 25.08.14 в 12:10 |
||
|
О, я поискал. Deo 25.08.14 в 12:10 |
||
|
Что на счет JavaScript? rools 01.07.14 в 17:33 А как же JavaScript? Deo 25.08.14 в 12:11 |
+1 | |
|
Ок, если prototype-based(?) языки настолько недружелюбны, то как я могу объяснить JavaScript? rools 01.07.14 в 17:42 Ладно, если, языки берущие за основу прототипы, так недружелюбны, как я могу JavaScript? Deo 25.08.14 в 12:12 |
||
|
Это язык с прототипами(?), используемый миллионами людей каждый день. rools 01.07.14 в 17:47 Вот язык с прототипированием, которым пользуются миллионы людей ежедневно. Deo 25.08.14 в 12:13 |
||
|
JavaScript используется на большем числе компьютеров на Земле, чем любой другой язык. Deo 25.08.14 в 12:15 |
||
|
Брендан Айк, создатель JavaScript, черпал вдохновение прямо из Self, и многое из семантики JavaScript основано на прототипах. Deo 25.08.14 в 13:17 |
||
|
Каждый объект может иметь произвольный набор свойств и "методов" (которые на самом деле являются функциями, хранящиеся в виде полей). rools 01.07.14 в 17:56 У любого объекта может быть произвольный набор свойств: полей и "методов" (которые на самом деле функции, хранящиеся в виде полей). Deo 25.08.14 в 13:24 |
