Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Множественное наследование - миф или реальность?! (https://javascript.ru/forum/offtopic/4754-mnozhestvennoe-nasledovanie-mif-ili-realnost.html)

Riim 20.08.2009 13:20

Цитата:

Сообщение от JSprog
любимому

О, у вас отношения уже?

B~Vladi 20.08.2009 13:36

Цитата:

Сообщение от Riim
О, у вас отношения уже?

:D :no:
Это он про это:
Цитата:

Сообщение от B~Vladi
Запись в блог всеми уважаемого и любимого B~Vladi № 1.


x-yuri 23.08.2009 15:10

Цитата:

Сообщение от Kolyaj
ЗЫ: А нужно ли оно вообще кому-то?! Ваши мнения...
Иногда нужно.

я, конечно, поздновато присоединяюсь, но... Kolyaj, а когда нужно?

Цитата:

Сообщение от B~Vladi
ну раз никто не хочет войти в историю...

не понятно зачем туда входить... да и способ сам сомнительный больно

B~Vladi 24.08.2009 11:03

Цитата:

Сообщение от x-yuri
не понятно зачем туда входить...

У всех свои цели в жизни:)
Я нехочу, но может кто другой...
Цитата:

Сообщение от x-yuri
да и способ сам сомнительный больно

Да, есть такое...

Kolyaj 24.08.2009 12:51

Цитата:

Сообщение от x-yuri
а когда нужно?

Класс Observer, например. Есть у тебя класс A, ты хочешь отнаследовать от него класс B и добавить туда возможность генерации событий. В том же Python'е, ты бы просто отнаследовался также и от Observer, тут же тебе придется или ставить Observer в корень наследования, или реализовывать в классе B нужную функциональность, или реализовывать Observer так, чтобы он мог приклеиваться к любому объекту.

JSprog 24.08.2009 12:53

Kolyaj а у тебя какой стаж JS
Оо я уже профессор

Kolyaj 24.08.2009 12:54

JSprog,
а ты с какой целью интересуешься? :)

JSprog 24.08.2009 12:57

С целью узнать за скоко времени ты достиг такого професионализма

B~Vladi 24.08.2009 13:02

Цитата:

Сообщение от JSprog
С целью узнать за скоко времени ты достиг такого професионализма

Об этом, по-подробнее можно написать тут, если не против, конечно:)

Kolyaj 24.08.2009 13:18

Рано мне еще автобиографию писать. )))

JSprog,
если интересно, то начал в начале 2006 года, но многое узнал за последний год, когда начал заниматься только JS.

B~Vladi 24.08.2009 13:29

Цитата:

Сообщение от Kolyaj
Рано мне еще автобиографию писать. )))

Какие все стеснитильные:)

JSprog 25.08.2009 19:14

Есть идея про мн наследование просто использовать расширение функций вообще без наследование а фабрикой объектов

Андрей Параничев 25.08.2009 19:56

Я никогда не сталкивался с задачами, где рационально было бы применить только множественное наследование. "Подмиксовки" в JavaScript можно делать и по-другому (ведь у нас динамическое ООП), а в большинстве других задач и обычной схемы наследования достаточно.

Да и вообще я схему себе не очень представляю, если например (не касаясь JavaScript) один класс наследует два других класса, которые имеют одинаковые имена методов, то что происходит? Простое перекрытие, или образуются "суб-пространства" имен?

x-yuri 26.08.2009 00:35

Цитата:

Сообщение от Андрей Параничев
Я никогда не сталкивался с задачами, где рационально было бы применить только множественное наследование. "Подмиксовки" в JavaScript можно делать и по-другому (ведь у нас динамическое ООП), а в большинстве других задач и обычной схемы наследования достаточно.

множественное наследование, как я понимаю, имеет смысл для наследования реализации и немного проще других вариантов

Цитата:

Сообщение от Андрей Параничев
Да и вообще я схему себе не очень представляю, если например (не касаясь JavaScript) один класс наследует два других класса, которые имеют одинаковые имена методов, то что происходит? Простое перекрытие, или образуются "суб-пространства" имен?

это, имхо, скорее либо из области теории (если разумно его применять проблем не будет), либо из больших древних или запущенных проектов

Riim 26.08.2009 00:43

Цитата:

Сообщение от Андрей Параничев
которые имеют одинаковые имена методов, то что происходит?

Насколько я в курсе, это основная проблема множественного наследования, никак не могут выяснить, что именно должно происходить, но вроде какие-то логичные варианты там есть.

x-yuri 26.08.2009 05:48

Цитата:

Сообщение от Riim
Насколько я в курсе, это основная проблема множественного наследования

я бы сказал, что это самый популярный аргумент. В википедии на первом месте сложность и я тоже так думаю :agree: В общем множественное наследование - замечательный способ прострелить себе ногу

B~Vladi 26.08.2009 10:39

Цитата:

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

Думаю на этом можно закончить:)

Dmitry A. Soshnikov 26.08.2009 11:36

Множественное наследование - это шаг к усилению абстракции и упрощению реюза кода (действительно, раз научились наследовать код от одного блока, давайте научимся сразу от десяти - удобный способ повторно использовать этот код). Однако, имеет свои недостатки (поэтому, и не прижился во многих языках), одна из которых (и, возможно, основная) - Diamond problem (то, о чём спрашивал Андрей Параничев): решение зависит от реализаций, но в целом, в теории, этот алгоритм называется Method resolution order (порядок разрешения имён методов), или линеаризацией - C3 linearization - суть: выстроить (линеаризовать) дерево методов так, чтобы не возникло конфликтов имён (т.е превратить в цепь).

Альтернативой множественному наследованию являются интерфейсы и примеси (ну это и так все знают ;)).

x-yuri 26.08.2009 17:42

Цитата:

Сообщение от Dmitry A. Soshnikov
Множественное наследование - это шаг к усилению абстракции и упрощению реюза кода (действительно, раз научились наследовать код от одного блока, давайте научимся сразу от десяти - удобный способ повторно использовать этот код)

а где тут усиление абстракции?

Цитата:

Сообщение от Dmitry A. Soshnikov
Альтернативой множественному наследованию являются интерфейсы и примеси (ну это и так все знают ).

т.е. это фактически как составляющие наследования: наследование интерфейса и наследование реализации

p.s. еще можно почитать
http://phpclub.ru/talk/showthread.ph...E2%E0%ED%E8%E5
http://phpclub.ru/talk/showthread.ph...E2%E0%ED%E8%E5

Dmitry A. Soshnikov 26.08.2009 17:56

Цитата:

Сообщение от x-yuri
а где тут усиление абстракции?

Можно сказать, что объект D включает в себя сразу 3 объектов (A, B,C); при этом реализация объектов А, B, C может быть не столь важна при абстрактном описании объекта D.

x-yuri 26.08.2009 18:02

во-первых это слишком абстрактное (:)) объяснение, во-вторых я его не понял, а в-третьих, объекты становятся более абстрактными по мере продвижения к корню иерархии и множественное наследование класса никак не влияет на абстрактность своих родителей
UPD: или речь о том, что множественное наследование - более абстрактное по сравнению с обычным?

Dmitry A. Soshnikov 26.08.2009 18:21

Цитата:

Сообщение от x-yuri
объекты становятся более абстрактными по мере продвижения к корню иерархии

Ага. С этой точки зрения, да. Более "безликими", "неконкретными". Я имел в виду больше повторное использование кода, когда объект будет иметь нужные свойства/методы, но говорить о них можно полностью абстрактно (т.е. объект умеет "печатать" - унаследовал от одного объекта, "прыгать" - от другого), не касаясь реализации (которая находится ниже), но, возможно, в данном случае, несколько путано донёс смысл.

Цитата:

Сообщение от x-yuri
или речь о том

Основная речь была о code reuse.

JSprog 26.08.2009 20:42

Я имею ввиду проссто копировать свойства из одной функции в другую. И поставить более приоритетный класс.ариме если есть два метода с одинаков названием в родителях то копируетса метод из приоритетного класса второй также копируетса но с изменёным названием на 1 заданный символ

B~Vladi 27.08.2009 10:46

Цитата:

Сообщение от JSprog
но с изменёным названием на 1 заданный символ

Так не пойдёт. Имена должны оставатся такими, какими их указал программер. Возможно, вызывать их нужно, как-то указывая класс, к которому он принадлежит. Так логичнее имхо.

Riim 27.08.2009 10:49

Цитата:

Сообщение от JSprog
но с изменёным названием на 1 заданный символ

При втором уровне наследования еще символ добавлять? А если там уже есть метод с таким символом, третий добавлять? И как теперь понять с какого уровня наследования этот метод?

JSprog 27.08.2009 11:46

Ну тогда через ссылки parent1.method, parent2.method, parent1.parent2.method

FINoM 03.09.2012 18:19

Подыму старую тему. Аналогичный вопрос возник после того, как я решил наследовать обычный прототип и прототип массива.

B~Vladi 03.09.2012 21:49

Цитата:

Сообщение от FINoM
решил наследовать обычный прототип и прототип массива.

А так не пойдет?
function Constructor () {}
Constructor.prototype = new Array();
Constructor.prototype.method = function (){};

FINoM 03.09.2012 21:50

Цитата:

Сообщение от B~Vladi
А так не пойдет?

Так и сделал. Но хотелось бы добавлять свойства в прототип всех родителей динамически.

Dim@ 04.09.2012 16:13

Цитата:

Сообщение от Андрей Параничев
Да и вообще я схему себе не очень представляю, если например (не касаясь JavaScript) один класс наследует два других класса, которые имеют одинаковые имена методов, то что происходит? Простое перекрытие, или образуются "суб-пространства" имен?

простое перекрытие тот что позже наследовался те и методы


Часовой пояс GMT +3, время: 17:29.