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

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.


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