2 Zeroglif >
А как там ( self ) решена проблема неоднозначности, когда несколько предков имеют метод с одинаковой сигнатурой и экземпляру потомка нужно вызвать метод с такой сигнатурой ? 2 Dmitry A. Soshnikov> аналогичный вопрос с проблемой неоднозначности в мозилле как можно решить ? Кстати, Цитата:
|
|
2 Zeroglif > Ну насколько я смог оттуда понять, SELF используют симбиоз упорядоченного и неупорядоченного множественого наследования, разбивая предков на группы по приоритетам, внутри группы разрешение имен - неупорядоченное, между группами - предпочтение отдается имени предка из более приоритетного уровня .
Причем, не знаю , верно ли я понял , неупорядоченное (это то ,что в C++) приводит к run-time ошибке при обращении к двусмысленным именам слотов ( т.е. именам имеющимся у нескольких родителей), т.е. получается проблема эта в C++ не решается, точнее компилятор заставляет програмиста обходить ее. |
Цитата:
Цитата:
Но, мне кажется, для таких целей больше подойдёт обычное расширение - суть - та же имплементация интерфейсов из Java. |
по поводу статика vs динамика, думаю статика лучше для статичного кода (который не будет сильно изменяться, например, библиотеки), а динамика для динамичного (например, пользовательский интерейс). Т.е. динамика облегчает изменение кода
по поводу множественного наследования (как в C++): первый вопрос, который стоит задать - зачем оно нужно? По-моему в основном для каких-то хаков библиотек, что можно обычно сделать за счет динамики языка (мне кто-то вроде приводил пример) кроме того, вспомнилась фраза про множественное наследование в Perl, но решил также оставить описание проблем: Цитата:
|
Цитата:
Цитата:
И проблемы действительно можно доверять программисту Цитата:
Цитата:
|
а можно реальный пример множественного наследования, когда оно нужно?
|
Цитата:
Не множественное, но думаю продолжить не проблема: Enumerable > Hash Enumerable > ObjectRange А вот здесь множественное: Ajax.Base > Ajax.Request > Ajax.Updater PeriodicalExecuter > Abstract.TimedObserver > Form.Element.Observer PeriodicalExecuter > Abstract.TimedObserver > Form.Observer |
Riim,
а множественное наследование где? |
К тому же все (ну или почти) наследует от Object, так что цепочки Enumerable > Hash и Enumerable > ObjectRange можно переписать как:
Object > Enumerable > Hash Object > Enumerable > ObjectRange |
Часовой пояс GMT +3, время: 08:56. |