Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #101 (permalink)  
Старый 07.04.2009, 22:45
Кандидат Javascript-наук
Отправить личное сообщение для kefi Посмотреть профиль Найти все сообщения от kefi
 
Регистрация: 12.03.2009
Сообщений: 148

2 Zeroglif >
А как там ( self ) решена проблема неоднозначности, когда несколько предков имеют метод с одинаковой сигнатурой и экземпляру потомка нужно вызвать метод с такой сигнатурой ?
2 Dmitry A. Soshnikov>
аналогичный вопрос с проблемой неоднозначности в мозилле как можно решить ?
Кстати,
Цитата:
когда вся цепь прототипов будет просмотрена, и нужный метод не будет найден
а цепь прототипов какого предка просматривать первой, какого второй и т.д. ?

Последний раз редактировалось kefi, 07.04.2009 в 22:54.
Ответить с цитированием
  #102 (permalink)  
Старый 08.04.2009, 09:28
...
Отправить личное сообщение для Zeroglif Посмотреть профиль Найти все сообщения от Zeroglif
 
Регистрация: 09.03.2008
Сообщений: 216

kefi,

тынц
Ответить с цитированием
  #103 (permalink)  
Старый 08.04.2009, 12:50
Кандидат Javascript-наук
Отправить личное сообщение для kefi Посмотреть профиль Найти все сообщения от kefi
 
Регистрация: 12.03.2009
Сообщений: 148

2 Zeroglif > Ну насколько я смог оттуда понять, SELF используют симбиоз упорядоченного и неупорядоченного множественого наследования, разбивая предков на группы по приоритетам, внутри группы разрешение имен - неупорядоченное, между группами - предпочтение отдается имени предка из более приоритетного уровня .
Причем, не знаю , верно ли я понял , неупорядоченное (это то ,что в C++) приводит к run-time ошибке при обращении к двусмысленным именам слотов ( т.е. именам имеющимся у нескольких родителей), т.е. получается проблема эта в C++ не решается, точнее компилятор заставляет програмиста обходить ее.
Ответить с цитированием
  #104 (permalink)  
Старый 08.04.2009, 14:28
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Сообщение от kefi
аналогичный вопрос с проблемой неоднозначности в мозилле как можно решить ?
А какая неоднозначность, если множественного наследования нет? С Мозиллой лишь приводил одну из имитаций.

Сообщение от kefi
а цепь прототипов какого предка просматривать первой, какого второй и т.д. ?
У объекта одна цепь прототипов. А в __noSuchMethod__ Вы уже сами определяете к каким объектам делегировать за нужным (не найденным в цепи) методом.

Но, мне кажется, для таких целей больше подойдёт обычное расширение - суть - та же имплементация интерфейсов из Java.
__________________
Тонкости ECMAScript
Ответить с цитированием
  #105 (permalink)  
Старый 09.04.2009, 08:03
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

по поводу статика vs динамика, думаю статика лучше для статичного кода (который не будет сильно изменяться, например, библиотеки), а динамика для динамичного (например, пользовательский интерейс). Т.е. динамика облегчает изменение кода
по поводу множественного наследования (как в C++): первый вопрос, который стоит задать - зачем оно нужно? По-моему в основном для каких-то хаков библиотек, что можно обычно сделать за счет динамики языка (мне кто-то вроде приводил пример)
кроме того, вспомнилась фраза про множественное наследование в Perl, но решил также оставить описание проблем:
Цитата:
Хотя в большинстве ОО-языков разрешено наследование более чем от одного класса, такая возможность порождает больше проблем, чем преимуществ. Например, с точки зрения разработчика компилятора совместить множественное наследование и эффективное использование ресурсов компьютера (память и скорость работы) - нетривиальная задача...
Однако проблемы имеются и с точки зрения пользователя. Они возникают в случае, когда "по наследству" передаются одноименные поля данных и методы. Возникает ряд вопросов. Какой именно метод и какое именно поле данных (и в какой форме) должны остаться в результирующем объекте? Как в случае существования перекрывающихся полей и методов должны функционировать методы, заимствованные из разных классов? Например, что делать, если поле DATA, в котором наследуемый из класса ClassA методожидает найти целое число, совместилось с полем DATA из класса ClassB, который использует его как текстовую строку? Обратная ситуация - что делать, когда и в классе ClassA, и в классе ClassB есть методы getdata, но они выполняют принципиально различные операции? Особым случаем совпадающих имен является вариант, когда оба класса, ClassA и ClassB, наследуют от общего класса Class0, - должны ли мы сохранить 2 копии полей данных или достаточно одной? В каком порядке и как следует вызывать конструкторы, чтобы правильно инициализировать поля данных? В каком порядке будут вызываться деструкторы и как они будут взаимодействовать друг с другом? И подобным проблемам несть числа, стоит только начать разбираться
В отличие от большинства других ОО-языков программирования, где бесконфлитное разрешение подобных ситуаций представляет серьезную проблему для автора языка или разработчика компилятора, Perl справляется с трудностями просто - он передоверяет их пользователю
Ответить с цитированием
  #106 (permalink)  
Старый 09.04.2009, 17:10
Кандидат Javascript-наук
Отправить личное сообщение для kefi Посмотреть профиль Найти все сообщения от kefi
 
Регистрация: 12.03.2009
Сообщений: 148

Сообщение от x-yuri
зачем оно нужно? По-моему в основном для каких-то хаков библиотек,
Мне такой вариант кажется странным , я так всегда понимал, что это нужно для повторного использования кода,уже реализовавшего какие-то идеи . Чтобы из уже имеющегося старого сконструировать новое, зачем-же не использовать то , что уже сделано. Например, В Java по сути нет множественого наследования и повторного использования кода, т.к. повторно используются только спецификации методов Интерфейсов, а сами тела для каждого ПодКласса реализуются заново, что решает все проблемы, кроме желания использовать код повторно.

Цитата:
нетривиальная задача...
Но тем не менее она решается так или иначе. У природы тоже не всегда получается межвидовое(или, как там правильно,- межсемействами) скрещивание, какие-то получившиеся виды (Лошадь+Осел -> Мул ) дают вполне рабочий вариант , который правда далее не скрещивается ни с кем , Но в одном-то поколении его можно использовать.
И проблемы действительно можно доверять программисту

Цитата:
методожидает найти целое число, совместилось с полем DATA из класса ClassB, который использует его как текстовую строку
А не надо делать одни имена для случаев, когда нельзя совместить Смысл их использования, это уже построенная система винована своей некрасивостью, потому и не позволяет развиваться за счет множественого наследования.

Цитата:
Perl справляется с трудностями просто - он передоверяет их пользователю
как и C++.

Последний раз редактировалось kefi, 09.04.2009 в 17:27.
Ответить с цитированием
  #107 (permalink)  
Старый 09.04.2009, 18:40
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

а можно реальный пример множественного наследования, когда оно нужно?
Ответить с цитированием
  #108 (permalink)  
Старый 09.04.2009, 20:24
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Сообщение от x-yuri
а можно реальный пример множественного наследования
Из PrototypeJs:

Не множественное, но думаю продолжить не проблема:
Enumerable > Hash
Enumerable > ObjectRange

А вот здесь множественное:
Ajax.Base > Ajax.Request > Ajax.Updater
PeriodicalExecuter > Abstract.TimedObserver > Form.Element.Observer
PeriodicalExecuter > Abstract.TimedObserver > Form.Observer
Ответить с цитированием
  #109 (permalink)  
Старый 09.04.2009, 20:26
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Riim,
а множественное наследование где?
Ответить с цитированием
  #110 (permalink)  
Старый 09.04.2009, 20:29
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

К тому же все (ну или почти) наследует от Object, так что цепочки Enumerable > Hash и Enumerable > ObjectRange можно переписать как:
Object > Enumerable > Hash
Object > Enumerable > ObjectRange
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с javascript andruhin Общие вопросы Javascript 12 04.05.2012 10:05
Программист на JavaScript (удалённо) Vadym Работа 1 28.01.2009 13:57
Приглашаем специалиста по JavaScript. Мск, от 75 000 руб. arturus Работа 30 14.01.2009 02:30
JavaScript Developer, Санкт-Петербург (2000 - 2500 $) lampa Работа 3 26.08.2008 15:41
Нужен Старший разработчик JavaScript Yandex Работа 17 19.08.2008 16:43