Как вы относитесь к паскалю?
, (есть гипотеза)
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.156] |
|
|
| Страницы: (20) « Первая ... 9 10 [11] 12 13 ... 19 20 все ( Перейти к последнему сообщению ) |
Как вы относитесь к паскалю?
, (есть гипотеза)
|
Сообщ.
#151
,
|
|
|
|
Ты повёлся на маркетинговый мусор под ковром. Приведи пример существующей проблемы, я докажу, что тебе наврали.
Добавлено P.S. Заявить о вредности множественного наследования реализаций и объяснить его отсутствие в своём языке заботой о нас-таких-блин-бедных - это излюбленный троллинг горемык от маркетинга. Если нам не надо, мы просто не будем пользовать. А вот если надо, а его нет, тогда на помощь приходят костыли типа примесей, агрегатов с делегатами и прочими кротовыми норами, заполненными вакуумом с отрицательной плотностью энергии, лишь бы мы-такие-блин-бедные смогли-таки решить нашу задачу без мата в адрес маркетологов, и не дай бог эта задача не оказалась последней, решаемой нами-такими-блин-бедными на чудо-языке-всём-из-себя-удобном. И мало у кого мозги к этому времени не оказываются промытыми до такой степени, чтобы сообразить, что обычно задача диктует архитектуру, которую уже программист должен имеющимися средствами реализовать, а не наоборот - подгонять архитектуру под имеющиеся средства, лишь бы решить задачу. |
|
Сообщ.
#152
,
|
|
|
|
Цитата Qraizer @ Добавлено P.S. Заявить о вредности множественного наследования реализаций и объяснить его отсутствие в своём языке заботой о нас-таких-блин-бедных - это излюбленный троллинг горемык от маркетинга. Если нам не надо, мы просто не будем пользовать. +10000, Эти самые маркетологи говорят множественное наследование плохо - потому что есть проблема в том что один и тот же метод ,но с разной сигнатурой может оказаться в разных классах, и код не скомпилируеться, Да она есть, но в интерфейсах проблема точно такая же , |
|
Сообщ.
#153
,
|
|
|
|
sergioK, поправочка: это точно такая же проблема, если интерфейсы разные. Какая разница, из-за чего конфликт имён? Когда же они одинаковые, они просто являются одним и тем же интерфейсом.
Проблемы множественного наследования не существует. Это миф. Существует увеличенная сложность проектирования архитектур, сводящихся к множественному наследованию. Однако архитектура не станет проще, если исходно сводящуюся к множественным предкам задачу переархитектурить как-либо иначе, она станет только запутаннее, и существует большой риск решить в конечном итоге не ту задачу. Ага-ага, а потом мы убедим заказчика, что он именно эту хотел. |
|
Сообщ.
#154
,
|
|
|
|
Цитата sergioK @ говорят множественное наследование плохо - потому что есть проблема в том что один и тот же метод ,но с разной сигнатурой может оказаться в разных классах Нет, они, в основном, говорят, что множественное наследование плохо из-за проблемы ромба. А ее в интерфейсах нет. |
|
Сообщ.
#155
,
|
|
|
|
Да ладно вам, узбагойдесь. Тема о паскакале
|
|
Сообщ.
#156
,
|
|
|
|
И часто разработчикам приходится сталкиваться с этим ромбом? Лично мне ни разу не захотелось так наследование организовать.
|
|
Сообщ.
#157
,
|
|
|
|
В любом случае, Qraizer прав. Это не проблема и не недостаток. Просто нужно принять то или иное решение. Возможно, что, например, в Eiffel(где ромб можно разруливать не только по классам, но и по полям, а так же решение принимается итоговым классом, а не промежуточными) это сделано лучше, чем в C++, не знаю, не использовал Eiffel на практике. Некоторые языки с множественным наследованием, такие как Питон и Scala(для trait'ов) просто линеаризуют иерархию. Возможно, это так же является более простым решением и лучшим компромиссом, чем у C++. Но вот именно для C++ подход с делением на обычное и виртуальное наследованием является самым органичным, поскольку соответствует принципу нулевой стоимости, не приводит к преждевременной пессимизации и позволяет управлять ситуацией как вздумается... Отказ же от множественного наследования привел бы к появлению интерфейсов и отдельного механизма миксинов/делегатов, что я плохо себе представляю в контексте остальных возможностей языка. Делегирование, кстати, в С++ рассматривали, но отказались в пользу множественного наследования...
|
|
Сообщ.
#158
,
|
|
|
|
Цитата D_KEY @ Делегирование, кстати, в С++ рассматривали, но отказались в пользу множественного наследования... Что значит отказались ? Что и кто мешает его применять, там где считаешь нужным разумееться ? |
|
Сообщ.
#159
,
|
|
|
|
Цитата sergioK @ Цитата D_KEY @ Делегирование, кстати, в С++ рассматривали, но отказались в пользу множественного наследования... Что значит отказались ? Что и кто мешает его применять, там где считаешь нужным разумееться ? Я имею в виду специальный языковой механизм делегирования, который когда-то предлагался: ![]() ![]() class B { int b; void f(); }; class C : *p { B *p; int c; }; ![]() ![]() void f(C *q) { q->f(); // означает q->p->f() } |
|
Сообщ.
#160
,
|
|
|
|
Угу.
Цитата ... Концепция выглядела многообещающей для представления структур, требующих большей гибкости, чем может дать обычное наследование. В частности, присваивание делегирующему указателю могло бы использоваться для изменения конфигурации объекта во время выполнения. Реализация была тривиальной, затраты - минимальными. Поэтому данную идею испытали несколько пользователей. Много времени и сил здесь положил Билл Хопкинс (Bill Hopkins). К сожалению, все пользователи, применившие механизм делегирования, пострадали от серьезных ошибок и путаницы. Из-за этого возможность была исключена как из проекта, так и из Cfront версии 2.0. Причины ошибок:Ясно, что две эти проблемы взаимосвязаны. Разумеется, пользователи были предупреждены. Предостережения не помогли. Более того, я сам забыл собственные правила и попался в ловушку. Таким образом, проблему нельзя было назвать мелким огрехом, который исправляется с помощью обучения и предупреждений компилятора. В то время она казалась непреодолимой. Сегодня мне кажется, что указанные проблемы имеют фундаментальный характер. Для решения первой потребовалось бы изменять таблицу виртуальных функций объекта, которому делегируется управление, если он связан с делегирующим объектом. Это плохо согласуется с языком в целом и с большим трудом поддается разумному определению. Кроме того, обнаружились примеры, когда мы хотели, чтобы два разных объекта делегировали управление одному и тому же «разделяемому» объекту. Нашлись и такие задачи, в которых нужно было делегировать управление через В* объекту производного класса D. ... |
|
Сообщ.
#161
,
|
|
|
|
Цитата Qraizer @ Цитата Причины ошибок:Ясно, что две эти проблемы взаимосвязаны. Разумеется, пользователи были предупреждены. Предостережения не помогли. Более того, я сам забыл собственные правила и попался в ловушку. Таким образом, проблему нельзя было назвать мелким огрехом, который исправляется с помощью обучения и предупреждений компилятора. В то время она казалась непреодолимой. Сегодня мне кажется, что указанные проблемы имеют фундаментальный характер. Это такие же «проблемы», как и проблема множественного наследования. |
|
Сообщ.
#162
,
|
|
|
|
Далеко нет. В отличие от, они нерешаемы, кроме как или руками, или перестройкой идеологии. Ни то, ни другое не оправдывается. Точнее, руками - оно и сейчас есть, но в случае реализации фичи оно никуда бы не делось за исключением стандартных ситуаций. Напомню: стандартизировать среднестатичность и создавать проблемы для девиативности - это не путь Плюсов, хотя Дельфистам нравится.
Добавлено P.S. Покажите на Дельфях код, который влёгкую меняет делегируемый объект в рантайм или разделяет его с кучей себе подобных. Добавлено P.P.S. Ах да, ещё было бы интересно как Дельфи справится вот с этой задачей, на которую я уже ссылался в соседней теме. Напомню суть, чтоб много не читать. Там есть интерфейс, есть его готовая реализация, и есть расширение интерфейса. Хочется увидеть класс, реализующий новую версию интерфейса, но при этом пользующийся уже готовой реализацией его старой версии. Доп.условие: ни старый интерфейс, ни его реализация не курсе о новой версии вообще никак. Добавлено P.P.P.S. Два доп.условия: наш класс при этом "является" реализацией старой версии интерфейса. |
|
Сообщ.
#163
,
|
|
|
|
Тебе просто нужно избавиться от наследования головного мозга. Все же очевидно: раздели сущность, мухи отдельно, котлеты отдельно.
|
|
Сообщ.
#164
,
|
|
|
|
Что, наследование - это плохо, да?
|
|
Сообщ.
#165
,
|
|
|
|
Цитата D_KEY @ Местами да, плохо. Что, наследование - это плохо, да? |