|
|
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
с детства учили что множественное наследование - плохо. жуткие проблемы ромба... Так и не знаю в чём они заключаются и почему в Java отказались от МН. Концептуально, вроде, МН весьма полезно, в чём же сложности?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 10:42:02 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
можно унаследовать несколько методов с одинаковой сигнатурой и разной реализацией - возникает коллизия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 10:51:49 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
В множественном наследовании нет полезности. Никакой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 11:02:00 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
он жеВ множественном наследовании нет полезности. Никакой. Это ерунда. Просто в множественном наследовании, кроме полезности есть и дополнительная сложность, для грамотного управления которой требуется квалификация (прежде всего для того, чтобы понять, что наследованием пользоваться не нужно :)). Как показывает практика, высокая квалификация не является нормой среди программистов, поэтому в языках нацеленых на массовое использование (java/c#) множественного наследования нет. Ещё одной причиной отказа от множественного наследования является усложнение вычислительной модели языка. Чем эта модель проще, тем легче выполнять оптимизации при компиляции (в том числе и в JIT-компиляторах). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 11:40:17 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
2NotGonnaGetUs : прошу прощения, а не подскажете, какая именно полезность от множественного наследования? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 11:57:43 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
Для грамотного управления нужна не квалификация, а просто лишний пересматривать все методы у parent классов, которых используешь. Я полагаю, что в множественном наследовании нет практической полезности. Кроме того, представьте, пишите Вы важное приложение, наследуете пару классов, вызывает метод, который встречается в двух местах с одной сигнатурой, и Вами вызывается не то, что Вы думали,а первый попавшийся такой метод (как в Питоне, без сообщения об ошибке). В безопасных языках это никак нельзя позволять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 12:07:29 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
Я думаю с опасностями множественного наследования мы уже разобрались и поняли почему его нет в Java. Теперь давайте разберемся с пользой множественного наследования и как его все таки можно получить в Java если очень захочется: польза, заключается в том что можно в наследнике получить методы сразу нескольких родителей. Это иногда необходимо. можно попытаться обойти отсутствие множественного наследования в Java используя механизм вложенных классов. Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 12:51:52 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
ИМХО это одна из священных войн. http://rsdn.ru/Forum/?mid=377246 http://groups.google.com/groups?as_epq="Множественное+наследование"&as_ugroup=fido7.ru.java http://vmk.ugatu.ac.ru/book/buch/ch03.htm Гради Буч. Объектно-ориентированный анализ и проектирование Множественное наследование прямо поддерживается в языках C++ и CLOS, а также, до некоторой степени, в Smalltalk. Необходимость множественного наследования в OOP остается предметом горячих споров. По нашему опыту, множественное наследование - как парашют: как правило, он не нужен, но, когда вдруг он понадобится, будет жаль, если его не окажется под рукой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 12:56:30 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
LINUXERс детства учили что множественное наследование - плохо. Постучите учителям по голове железной палкой. Может поумнеют. Крики про плохость множественного наследования доходчиво переведены на русский дедушкой Крыловым в басне, если не ошибаюсь, "Лиса и Виноград". LINUXERжуткие проблемы ромба... Ромб - это не проблемы, это счастье. LINUXERТак и не знаю в чём они заключаются и почему в Java отказались от МН. В первую очередь, хорошо сделать множественное наследование - сложно. Действительно сложно. В яве не слишком-то хорошо справились и с более простыми вопросами. Во вторую очередь, множественное наследование требует большей квалификации от разработчика, как и любая сложная концепция. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 13:07:31 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
Denis Popov Гради Буч. Объектно-ориентированный анализ и проектированиеПо нашему опыту, множественное наследование - как парашют: как правило, он не нужен, но, когда вдруг он понадобится, будет жаль, если его не окажется под рукой. Имхо, сказано хорошо и точно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 13:13:40 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
softwarer LINUXERс детства учили что множественное наследование - плохо. Постучите учителям по голове железной палкой. Может поумнеют. Читайте классику кун-фу . Учителя в данном случае очень правы. Потому что ученику все равно не понять почему это не так уж и плохо. А так - повод для размышлений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 13:29:33 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
Kachalov польза, заключается в том что можно в наследнике получить методы сразу нескольких родителей. Это иногда необходимо. Приведите пример, когда это необходимо. Пожалуйста :) Я постараюсь предложить вам другую - более простую модель, без множественного наследования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 13:43:20 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
он же Приведите пример, когда это необходимо. Пожалуйста :) - ясно, же написано иногда :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 13:54:57 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
авторМножественное наследование прямо поддерживается в языках C++ и CLOS, а также, до некоторой степени, в Smalltalk. multiple inheritance в SmallTalk всетаки нет, была эксперементальная попытка добавить multiple inheritance в одну из версий SmallTalk-80, но она оказалась неэффективной и невостребованой. автормножественное наследование - как парашют: как правило, он не нужен, но, когда вдруг он понадобится, будет жаль, если его не окажется под рукой. насчет парашюта согласен, насчет multiple inheritance нет. multiple inheritance это все таки плохо чем хорошо, а достижение эффекта multiple inheritance через использование interface всетаки достаточно эффективный, безопасный и элегантный подход. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 14:04:00 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
OUдостижение эффекта multiple inheritance через использование interface всетаки достаточно эффективный, безопасный и элегантный подход. - использование интерфейсов не является альтернативой множественному наследованию, сходство только визуальное - можно через запятую несколько интерфейсов перечислить. Вы не правильно понимаете роль и предназначение интерфейсов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 14:08:44 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
он жеПриведите пример, когда это необходимо. Некорректная постановка вопроса. Сродни: приведите пример задачи, когда необходимо ООП (то есть без ООП она нерешаема). он жеЯ постараюсь предложить вам другую - более простую модель, без множественного наследования. Если переходим к количественному сравнению - "другую, более простую модель" хорошо показывает AWT/Swing. Впрочем, мне будет любопытно услышать более простую модель для следующей структуры: Код: plaintext 1. 2. 3. 4. Критические условия: отсутствие копирования кода между RadioButton и RadioMenuItem отсутствие "базового класса, который умеет все". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 14:13:24 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
wnoise2NotGonnaGetUs : прошу прощения, а не подскажете, какая именно полезность от множественного наследования? Польза от МН прежде всего практическая. Хотя через "объекты" можно выразить всё, что угодно (так же как при помощи лябда-исчисления чёрча или машины тьюринга), на практике это НЕ ВСЕГДА удобно. И становится ещё более не удобно, если отойти от теоретизирования и взяться за последовательную реализацию идей ООП в коде. В итоге в ОО-нотацию вторгаются генерики, ковариантность, вывод типов, замыкания (лямбды) и т.п. Более конкретно. Польза от МН классов как минимум такая же, как от МН интерфейсов, с тем улучшением, что можно задать базовую реализацию интерфейса. В итоге, не нужно писать классы имплементации интерфейсов с последующим делегированием: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. Удобство МН в данном случае очевидно. На этой почве появились легковесные и ограниченные варианты МН именуемые traits, mixins, которые предоставляют в распоряжение разработчика полезную метафору и при этом лишины недостатков традиционно приписываемых МН. Другая тема - моделирование "естественных" объектов или сложных математических структур данных. Одно из обещаний ООП - простота повторного использования. Однако реальная разработка классов для повторного использования упирается в ряд проблем. Одна из них заключена в том, что классы могут представлять только проекцию понятий из предметной области на текущие потребности, а не сами эти понятия, без чего повторное использование не возможно (т.е возможно только в рамках ЗАРАНЕЕ сформулированной задачи/класса задач из данной предметной области). Так происходит потому, что классификация понятий (в особенности естественных, таких как стол, машина и т.п.) не ограничивается только вариантом предложенным ещё аристотелем (когда принадлежность объекта к тому или иному классу определяется наличием или отсутствием у объекта определённых свойств) и успешно реализованным в оо-нотации статически типизированных языков. (Подчеркну: речь идёт только о лингвистических абстрациях заложенных в ОО языке, поскольку из того, что отсутствующую абстракцию можно _смоделировать_ не следует (а скорее следует обратное), что её можно будет продуктивно использовать (достаточно посмотреть как выглядит моделирование ООП в голом С или функции высших порядков в ОО языках)). Хотя МН не решает проблемы отображения понятий предметной области средствами языка программирования (лучше сразу идти копать DSL и метапрограммирование), возможность его использование упрощает отображение отдельных видов понятий, . За иллюстрациями можно обратиться к главам посвящённым наследованию в книге Бертрана Мейера "Объектно-ориентированное конструирование программных систем ". Там разбирается каким образом МН можно использовать для представления различных классификаций одних и тех же объектов и ряд других интересных вопросов :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 14:15:20 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
OUа достижение эффекта multiple inheritance через использование interface Не достигает эффекта и приводит к тупому копированию кода в каждый класс, реализующий эти интерфейсы. Отчасти может быть решено выделением отдельного класса-менеджера, собирающего этот общий код, с простановкой в оконечные классы транзитных вызовов менеджера (некрасиво, но лучше). Несколько лучше это решается в дельфе, где есть понятие делегирования интерфейса, но и там мягко говоря неидеально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 14:17:35 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
chroДля грамотного управления нужна не квалификация, а просто лишний пересматривать все методы у parent классов, которых используешь. Я полагаю, что в множественном наследовании нет практической полезности. Кроме того, представьте, пишите Вы важное приложение, наследуете пару классов, вызывает метод, который встречается в двух местах с одной сигнатурой, и Вами вызывается не то, что Вы думали,а первый попавшийся такой метод (как в Питоне, без сообщения об ошибке). В безопасных языках это никак нельзя позволять. Это работа компилятора выдавать ошибку при такой ситуации. Либо ввести в язык момент явного указания от какого предка вызывается функция. А множественное наследование в природе сплош и рядом (мы же с вами от мамы И папы произошли а не от АбстастракХьюмена :) ). Хотя вроде бы и одним наследованием более менее все моменты в прошрамирование разрешаются. Вообщем на вкус и цвет как грится:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 14:21:30 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
chroДля грамотного управления нужна не квалификация, а просто лишний пересматривать все методы у parent классов, которых используешь. Тоже самое можно сказать об одиночном наследовании. chro Я полагаю, что в множественном наследовании нет практической полезности. Кроме того, представьте, пишите Вы важное приложение ... В безопасных языках это никак нельзя позволять. То что в скриптовом языке вызывается неизвестно что, не является поводом считать, что множественное наследование нельзя реализовать так, чтобы не возникало вопросов когда-какой метод будет вызван. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 14:21:49 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
bmv_rusА множественное наследование в природе сплош и рядом (мы же с вами от мамы И папы произошли а не от АбстастракХьюмена :) ). Вот так, слово заслово, bmv_rus стал своим собственным папой, а заодно и мамой :) Нет в природе никакого наследования. Особенно множественного. Всё у нас в голове. И не всегда то, что в ней находится, соответствует тому, что хотелось бы там иметь :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 14:32:58 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
softwarer Впрочем, мне будет любопытно услышать более простую модель для следующей структуры: Код: plaintext 1. 2. 3. 4. Критические условия: отсутствие копирования кода между RadioButton и RadioMenuItem отсутствие "базового класса, который умеет все". Давайте посмотрим на структуру JRadioButton и JRadioButtonMenuItem? Я, к сожалению, со Swing'ом и GUI в целом в Java не работал - расскажите мне, это объекты работают правильно? Структура иная JRadioButton <- JToggleButton <- AbstractButton JRadioButtonMenuItem <- JMenuItem <- AbstractButton ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 14:35:20 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
bmv_rus А множественное наследование в природе сплош и рядом (мы же с вами от мамы И папы произошли а не от АбстастракХьюмена :) ). Нет уж, простите, men = new AbstractHuman(.....) woman = new AbstractHuman(....) you = new AbstractHuman(woman, men) т.к. у каждого хумана есть папа и мама (а также у каждого млекопитающего существа, можно целую цепочку выстроить, неважно сейчас на какую именно глубину), то public AbstractMammal(mother, father) { this.parent_mother = mother; this.parent_father = father; } Таким образом, нельзя сказать, что ты был унаследован от папы и мамы. Ты был зачат мамой и папой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 14:44:46 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
Причем на сцену всплывает интерфейс а потом abstract interface DNA4NewLife interface DNAMammal extends DNA4NewLife interface DNAMonkey extends DNAMammal interface DNAElephant extends DNAMammal interface DNAHuman extends DNAMammal а чтобы не сложить мартышку со слоном и получить человека - нужно class AbstractHuman implements DNAHuman{ ... public AbstractHuman(DNAHuman mother, DNAHuman father){ ... } } DNAHuman you = new AbstractHuman(woman, man) Мда, что-то меня понесло ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 15:01:38 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
он жеЯ, к сожалению, со Swing'ом и GUI в целом в Java не работал Я, к сожалению, работал. он жеСтруктура иная JRadioButton <- JToggleButton <- AbstractButton JRadioButtonMenuItem <- JMenuItem <- AbstractButton В этой структуре: 1. Есть очевидное копирование кода между JRadioButton и JRadioMenuItem 2. Отсутствует возможность унифицированно работать с JRadioButton и JRadioMenuItem. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 15:23:09 |
|
||
|
|

start [/forum/topic.php?fid=59&tid=2147692]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
178ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 238ms |
| total: | 511ms |

| 0 / 0 |
