Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
Цитата:
Я не спорю, что в java не добавить методы, но реализовать, что то же , что и "изменить", абстрактные - это сплошь и рядом. Т.е. с практической точки зрения отличия мало. Кроме того классическое наследование позволяет использовать Полиморфизм, что тоже есть изменение методов, но это все заложено статически готовой программой, за исключением ДОБАВЛЕНИЯ метода, но тут вот Вы не показываете - где существенное отличие , т.к. пока я вижу только создание новых слов для общения практически с тем же телом метода ("внутри тел - всё тот же стандартный find с нужным фильтром") Или еще вот так поясню свое понимание : Динамика / статика должно пониматься по отношению к структуре Классов, заложенной созданной и более не изменяемой программы. Если в течении жизни такой программы в зависимости от внешних условий эта структура Классов меняется (от одной статики к другой статике ), то это будет динамичной структурой. Если же при уже заложенной, но неизменной стуктуре наблюдаем проявления ее гибкости по отношению к внешним условиям , то это имено гибкость этой структуры, но не ее измение. Критерии отличия : возможность добавления(удаления, изменения) новых членов уже существующим классам, возможность добавления новых классов (удаления старых) во время жизни неизменяемого кода программы . Вы показали пример с возможностью добавления новых членов, но как : просто добавлялись имена методов для обращения к тому же телу. Я не спорю, что это динамика, но практически это малоэффектный пример для действительной демонстрации динамики Классовой структуры, который имеет аналоги и в ООП программе со статичной структурой Классов. |
kefi, стоп. Мне не совсем ясен посыл информации. У Вас цель какая? Понять, что такое JavaScript (и в целом, динамические языки)? Понять, чем отличаются динамические языки от статических? Найти/доказать сходство с Java? Или, может, ещё что-то? Какова цель? Так можно будет локализовать неясности.
Ещё раз. Суть динамики - в возможности изменения объектов. Вот есть мой объект A, у него есть 10 методов. Я подключаю Ваш плагин (и всё, больше я ничего не делаю, относительно Вашего кода, не реализовываю никакие интерфейсы, и Вы не реализовываете - я только подключаю Ваш плагин) - и мой объект А имеет ещё 20 методов + 5 моих изменённых. Где Вы в статике такое же увидели? Цитата:
Цитата:
obj.method = (function () { if (IE) { return function _ie() {}; } return function _other() {}; })(); Это этап проектирования, где программа определяет, какое тело будет у метода .method. В общем же случае, этот функционал мог бы быть добавлен и позже этапа проектирования (по какому-нибудь событию). update: Цитата:
Если так будет проще понять, представьте, что Ваш плагин я подключаю не на этапе инициализации, а в постинициализирущем рантайме - по событию, - и только после этого мой объект А приобрёл бы новый функционал и изменил существующий. Вы как-то не за то зацепились - за "косметические украшения" с именами методов, тогда как цепляться нужно за основную суть - динамическое расширение объектов, которого нет в статике. update2: Еще одно. Естественно, под динамикой, мы имеем в виду динамику объектов. Возвращаясь к этапу проектирования, - да, конечно, и в статических языках можно подключить какую-то библиотеку, и у Вас появится новый функционал (новые функции, классы и т.д.). Но речь будет идти не о динамике объектов (уже существующих объектов), а всего лишь о расширении системы новым функционалов (новыми объектами). По большому счёту, в плане функционала, можно было бы даже говорить о равности функционалов. Только, увидьте разницу - в динамических языках мы можем оперировать свойствами уже существующих объектов, тогда как в статике, подключение "плагина" - это новые объекты (и это уже не динамика, а просто "этап проектирования", где Вы описываете, из какого дополнительного набора будет состоять Ваша система, а не какой дополнительный функционал будет добавлен к Вашим объектам). |
Цитата:
Цитата:
Вы практически когда говорите о стадии проектирования говорите о технологии. Ваш пример имеет неверный вывод Это этап проектирования, где программа определяет, какое тело будет у метода .method. . Программист тут определяет, а не программа! Поймите, ведь если так смешивать стадии разработки и понимание динамики изменения Классов , определяемой самим языком, то можно любой язык назвать динамическим - ведь можно же в любом языке статического ООП в программе извне получить новые текстовые описания сигнатур методов или даже тексты самих Классов с телами Конструкторов и Методов, вызвать в run-time их компиляцию, получить готовые исполняемые коды Классов и использовать дальше их в этой же программе, передав им управление. Но НЕ БУДЕТ это динамическим созданием Классов. Т.е. насколько я понимаю , разногласие у нас с Вами в том, что Вы считаете что динамика Классов достигается за счет включений плагинов , а я считаю, что это всего лишь возможности технологии (в данном случае обеспечиваемые интерпретируемым характером javascript и браузерной его реализацией ) , а не языка , так сказать допрограммирование , причем человеком , а не программой. |
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
Цитата:
Цитата:
Вот на вскидку, должно быть что-то следующее : Суть в том, чтобы имея неизменную программу, изменять структуру классов и чтобы программа, сама по себе оставаясь неизменной, могла понимать изменяющуюся в зависимости от внешних условий структуру обрабатываемых данных, Видимо, тела новых методов должны уметь "складываться" из каких-то алгоритмов-примитивов с помощью какого-то, повторяю, неизменного алгоритма рождения тела метода, Задача для для меня не простая, я думаю, javascript это может, и в этом плане есть какие-ни примеры реализации, что я изначально и пытался у Вас выведать, почему меня и не удовлетворило в Вашем примере просто создание новых имен методов без создания новых тел. ПоследнийОбъектПрограммы=0; for (var НомерОбъекта = 0; НомерОбъекта <= ПоследнийОбъектПрограммы; НомерОбъекта++) { ПоследнийОбъектПрограммы=ПоследнийОбъектПрограммы+1 ; Конструктор=НовыйКонструктор_Создаваемый_По_единому_неизменному_алгоритму_из_Примитивов_В_Зависимости_от_Внешних_условий() ; Конструктор.prototype=НовыйПрототип_Создаваемый_По_единому_неизменному_алгоритму_из_Примитивов_В_Зависимости_от_Внешних_условий() ; var o=Конструктор.рождает_объект // или var o=new Конструктор() ; // объект o Проживает свою жизнь : for (var НомерДня = 0; НомерДня < o.ПоследнийДень; НомерДня++) { o.ПланНаДень(НомерДня) ; }; o.умирает ; } ; |
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Вы продолжаете цепляться не за основную суть (изменение существующих объектов), а за какие-то "имена методов без тел". Никакое сравнение с интерфейсами из java здесь не уместно (создание абстрактного класса/интерфейса - это тоже ограничивающая статика - у вас определённый набор возможных свойств/методов, тогда как в динамике, такого ограничения нет). update: Цитата:
Всё, что мы создаём, мы явно описываем сами в коде. Просто, касательно темы, которую мы тут обсуждаем (динамика), это происходит, когда объект/прототип/класс уже существует. |
Цитата:
Хорошо, давайте упростим вопрос, сделав его конкретнее : если я правильно Вас понял, в javascript, если не рассматривать подключение плагинов, тела методов и тем более тела Конструкторов новые не создают, а используют уже имеющиеся ? И еще дополнение: под динамикой существующей программы понимается изменение ее существующих объектов путем заплаток(Перекрытий,Введен ием новых) их свойств , наставляемых им плагинами ? |
Цитата:
Цитата:
Цитата:
function A() {} // конструктор со своим телом A.method = function () {}; // метод (может быть тоже конструктор) со своим телом Цитата:
Например, популярный итератор в Ruby: 5.times do # что-то end В JS можно реализовать, расширив уже существующий (это динамика объектов - перечитайте эту строку несколько раз) объект Number: Number.prototype.times = function (callback) { for (var k = 0; k < this; k++) { callback(k); } }; И вызывать в программе: (5).times(function (index) { alert(index); }); |
Цитата:
var A=new Function("a", "b", "this."+ТоЧтоВышеВвелПользова тель+"; return a + b" ); Цитата:
|
Часовой пояс GMT +3, время: 20:19. |