|
|
|
Множественное наследование
|
|||
|---|---|---|---|
|
#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 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
softwarer В этой структуре: 1. Есть очевидное копирование кода между JRadioButton и JRadioMenuItem 2. Отсутствует возможность унифицированно работать с JRadioButton и JRadioMenuItem. А есть необходимость в том, чтобы RadioMenuItem можно быть сопоставить JRadioButton? Почему бы не MenuRadioButton <-RadioButton <- AbstractButton MenuRadioItem (item = RadioButton) <- AbstractMenuItem (private AbstractButton item) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 15:50:30 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
Если хочется с чем-то унифицировано работать (например, установка чекбокса одновременно выставляет и в RadioButton, и в MenuRadioItem) - нужно делать по аналогии с Event'ами в Delphi. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 15:54:21 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
Kachalovможно унаследовать несколько методов с одинаковой сигнатурой и разной реализацией - возникает коллизия. В интерфейсах также - заимплементишь два интерфейса с одноимёнными полями - всё слетит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 16:01:01 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
он жеА есть необходимость в том, чтобы RadioMenuItem можно быть сопоставить JRadioButton? Безусловно. Скажем, я делал систему, в которой функциональные действия описывались классом, допустим, Action, а на уровне настроек интерфейса указывалось, будет ли это RadioAction группой пунктов меню, группой кнопок в тулбаре, еще чем-нибудь. И имхо вполне естественно желание работать со всеми вариантами через единый интерфейс, без кучи case-ов и приведений типов. он жеMenuRadioButton <-RadioButton <- AbstractButton MenuRadioItem (item = RadioButton) <- AbstractMenuItem (private AbstractButton item) В этой схеме у нас получается: 1. Несовместимые Button и MenuItem 2. Куча тупого кода в AbstractMenuItem, публикующего методы AbstractButton 3. Дополнительный код с приведениями типов в MenuRadioItem ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 16:06:19 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
он жеЕсли хочется с чем-то унифицировано работать (например, установка чекбокса одновременно выставляет и в RadioButton, и в MenuRadioItem) - нужно делать по аналогии с Event'ами в Delphi. Во-первых, в Delphi нет никаких Event-ов. Во-вторых, Action-ы в дельфе - вещь безусловно правильная, но дело не в этом. Дельфа тоже не свободна от недостатков single inheritance. В яве пошли по пути дробления на достаточно мелкие функциональные классы; это в принципе правильно, но в условия single inheritance порождает уйму неудобств. Такую библиотеку можно сделать достаточно удобной для использования, но ценой этого будет серьезная дополнительная трудоемкость при ее реализации, в том числе тупое копирование кода. В дельфе пошли по другому пути, то, что я назвал "базовый класс, который умеет все". Это упрощает жизнь, но само по себе не очень-то правильно, поэтому этот путь прошли наполовину; скажем, свойство Caption у Button и MenuItem общее, а вот свойства Checked таки независимы. В принципе, как я уже говорил выше, за счет делегирования интерфейсов в дельфе можно обходиться без множественного наследования легче, чем в других языках. Но все равно я бы предпочел нормальное множественное наследование. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 16:13:26 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
[quot softwarer Впрочем, мне будет любопытно услышать более простую модель для следующей структуры: Код: plaintext 1. 2. 3. 4. На практике такой подход порождает уродцев на вроде java.util.Properties. На лицо подмена делигирования наследованием. Смысл в чем: RadioControl - компонента радио, её можно поместить на панель. class RadioMenuItem extends RadioControl, следовательно она тоже должна иметь способность помещатся на панель. Помещаем RadioMenuItem на панель, и рантайм обрыгивается с NPE , потому что RadioMenuItem требует меню! А его у нас и нет. При разумном подходе, мы конечно же обрыгаемся ещё в compiletime. Но это ничего не меняет. RadioMenuItem не есть RadioControl, соответсвенно RadioMenuItem нельзя наследовать от RadioControl! Про RadioButton вообще молчу. Придумайте пример понатуральнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 16:38:02 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
BlazkowiczНа практике такой подход порождает уродцев на вроде java.util.Properties. Признаться, плохо помню этого уродца, бо использовал единственный раз. BlazkowiczНа лицо подмена делигирования наследованием. Может быть и так. К сожалению, с адекватными средствами делегирования в современных языках негусто. BlazkowiczRadioControl - компонента радио, её можно поместить на панель. Ошибаетесь. Я не зря обозвал класс так обще. Это "некий радиоконтрол вообще", без какой-либо специфики. Может быть правильнее было бы назвать AbstractRadioControl, но в Java Abstract-классы имеют чуть другой смысл. Blazkowiczclass RadioMenuItem extends RadioControl, следовательно она тоже должна иметь способность помещатся на панель. Вывод соответственно неверный. BlazkowiczПро RadioButton вообще молчу. Придумайте пример понатуральнее. Ну... как хотите. Если Вы ими не пользуетесь - безусловно, ненатуральные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 16:45:46 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
softwarer BlazkowiczНа практике такой подход порождает уродцев на вроде java.util.Properties. Признаться, плохо помню этого уродца, бо использовал единственный раз. Там методы Hashtable торчат на ружу, чего по логике быть не должно. softwarer BlazkowiczНа лицо подмена делигирования наследованием. Может быть и так. К сожалению, с адекватными средствами делегирования в современных языках негусто. Не понял. softwarer BlazkowiczRadioControl - компонента радио, её можно поместить на панель. Ошибаетесь. Я не зря обозвал класс так обще. Это "некий радиоконтрол вообще", без какой-либо специфики. Может быть правильнее было бы назвать AbstractRadioControl, но в Java Abstract-классы имеют чуть другой смысл. Ааа, теперь понятно softwarer BlazkowiczПро RadioButton вообще молчу. Придумайте пример понатуральнее. Ну... как хотите. Если Вы ими не пользуетесь - безусловно, ненатуральные. Так тут смысл в том что в любой "ограниченой" системе множественное наследование можно применять сколько душе угодно. Проблемы начнутся когда эту систему нужно будет расширить. Тут-то м-наследование и станет поперек колес. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 16:54:08 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
BlazkowiczТам методы Hashtable торчат на ружу, чего по логике быть не должно. Тут скорее вопрос отсутствия приватного наследования. BlazkowiczНе понял. Хм. Давайте так. Напишите, пожалуйста, какой-нибудь простой код с делегированием. Может быть, я соглашусь с тем, что это все хорошо и правильно, а может быть покажу, что именно считаю неадекватным. BlazkowiczТак тут смысл в том что в любой "ограниченой" системе множественное наследование можно применять сколько душе угодно. Проблемы начнутся когда эту систему нужно будет расширить. Тут-то м-наследование и станет поперек колес. Скажу так: я не вижу причин считать это утверждение более верным, нежели строго противоположное, и в топике вроде бы не звучало аргументов в эту сторону. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 17:21:07 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
[quot BlazkowiczТак тут смысл в том что в любой "ограниченой" системе множественное наследование можно применять сколько душе угодно. Проблемы начнутся когда эту систему нужно будет расширить. Тут-то м-наследование и станет поперек колес.[/quot] Причём тут множественное наследование? Проблемы начнутся с расширением любой системы, если это расширение не планировать. Какое наследование в этой системе использовать - это уже дело десятое. Если обратиться к вопросу наследования, то можно выделить порядка 12 типовых случаев, когда может применяться наследования: от различных классификаций объектов (наследование интерфейса) до самого хардкорного конструирования классов (наследование реализации). Не во всех языках имеются механизмы для обеспечения всех возможных типов наследования. Н-р, в java наследование реализованно в таком виде, что наследование properties от hashtable является дуростью. В то время, как истинная дурость заключается в использовании делегирования для решения этой задачи, поскольку создаётся два объекта вместо одного (привет gc и оверхед на вложенные вызовы). Так же как генерики позволяют не писать типизированые варианты коллекций (оставив это удовольствие компилятору), так же в языке с хорошо проработанным механизмом МН не приходится дублировать один и тот же код в объектах определяемых разными наборами однообразных характеристик (в java это вотчина интерфейсов). "Правильное" наследование как минимум включает: - множественно наследование - разрешение "конфликтов" с перекрытием методов по выбору программиста (н-р, что делать если в разных родителях есть методы с одинаковой сигнатурой? - выбрать один из них (какой?) - сохранить оба изменив их имена - сделать один из них private - переопределить один из-них (какой?) и т.д. Выбор должен делать не язык, а программист в зависимости от конкретной ситуации) - закрытое наследование - генерики - ковариантность - переименование методов в наследниках ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 20:01:13 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
правильный ответ уже дан - множественное наследование не нужно. А неправильных можно давать сколько угодно. Никакая это не священная война, но достают некоторые с претензией "Почему Java это не C++". Ну и пользуйтесь своим С++ и не приставайте с глупостями. И не надо про "высокую квалификацию" программистов на С++". Я сам долго программировал на C++ (ввиду отсутствия выбора), и с тех пор как перешёл на Java, моя квалификация повысилась (поизучал новые технологии, доступные программистам на Java). Кстати, по моим наблюдениям, большинство программирующих на С++ - дураки, невежды, демократы и психи. Чтобы не быть голословным - один на прямо рабочем месте плевался (фирма Галактика). Я так и не понял, что он хотел этим выразить. Он же, каждый день программируя на VC6, года через 2 после появления VС7, спросил меня, чем оно отличается от VC7. И это не самый тяжёлый случай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 20:17:02 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
2 Kachalov: автор- использование интерфейсов не является альтернативой множественному наследованию, сходство только визуальное - можно через запятую несколько интерфейсов перечислить. Вы не правильно понимаете роль и предназначение интерфейсов. чего-чего? быстро, обратно к учебникам и будет вам счастье 2 LINUXER: авторВ интерфейсах также - заимплементишь два интерфейса с одноимёнными полями - всё слетит. глупость, ничего не слетит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 20:52:20 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
OUбыстро, обратно к учебникам и будет вам счастье - думаете интерфейсы нужны именно для "кривого" множественного наледования? Боюсь Вы набрались этого из тех самых "учебников". Наверняка в своем коде Вы интерфейсов не используете (только готовые) - я прав? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 21:54:08 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
что бы не говорили, но древовидная структура самая понятная (как тока ее придумают). Удобна она как для кодировщика, так и для обслуживающего ее в дальнейшем персонала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 22:32:49 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
вот weak form of multiple inheritance (AKA mixin interfaces) на основе интерфейсов. 2 softwarer: ну и где здесь порожденная вашим больным воображением дубликация кода? 2 Kachalov: вы все еще хотите продолжать свой глупый спор о невозможности использования interfaces для эмуляции multiple inheritance? авторБоюсь Вы набрались этого из тех самых "учебников" ага, вам бы читать те учебники что я читал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 22:33:58 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
OUвы все еще хотите продолжать свой глупый спор о невозможности использования interfaces для эмуляции multiple inheritance? - Вы так и не поняли, что речь идет не о том, чтобы с помощью интерфейсов эмулировать множественное наследование о чем уже высказались в предыдущих топиках (Вы своей схемой лишний раз подвердили что получается это необычайно криво). Мне хотелось отметить что Вы пытаетесь использовать интерфейсы не по назначению. У многих авторов (видимо пытающихся перенести опыт программирования C++ на Java) можно встретить тезис о том что интерфейсы в Java предназначены для обхода отсутствия множественного наследования. Зачем разработчикам языка сначала лишать его множественного наследования, а потом через Ж. его обходить интерфейсами? Вдумайтесь в само слово "интерфейс", оцените красоту идеи, и не используйте их ни для чего иного кроме приведения типов. А если Вам необходима функциональность нескольких классов родителей применяйте вложенные классы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 23:35:26 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
автор- Вы так и не поняли, что речь идет не о том, чтобы с помощью интерфейсов эмулировать множественное наследование о чем уже высказались в предыдущих топиках (Вы своей схемой лишний раз подвердили что получается это необычайно криво). чего то вы уважаемый из пальца все высасываете, речь изначально шла о возможности/невозможности имплементации multiple inheritance в java. Ваша оригинальная реплика была о том что интерфейсы это не альтернатива multiple inheritance. Я вам привел конкретный пример, что еще надо то? авторМне хотелось отметить что Вы пытаетесь использовать интерфейсы не по назначению. У многих авторов (видимо пытающихся перенести опыт программирования C++ на Java) можно встретить тезис о том что интерфейсы в Java предназначены для обхода отсутствия множественного наследования. А кто и где говорил о том что интерфейсы нужны исключительно для эмуляции multiple inheritance? Если видели, приведите пример, если нет, то нечего изобретать тогда. авторВдумайтесь в само слово "интерфейс", оцените красоту идеи, и не используйте их ни для чего иного кроме приведения типов. А если Вам необходима функциональность нескольких классов родителей применяйте вложенные классы. вы разберитесь с понятием наследования и полиморфизма, потому как предлагаемый вами пример будет работать только там где предполагается определенный тип или его сабклассы. В то время как использование наследованных интерфейсов позволяет использовать их вместо базовых при этом сами интерфейсы могут быть имплентированы любыми классами. Это в том числе о красоте идеи... В остальном присоеденяюсь к мнению Partisan M ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2006, 00:17:12 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
2 OU Kachalov OUдостижение эффекта multiple inheritance через использование interface всетаки достаточно эффективный, безопасный и элегантный подход. - использование интерфейсов не является альтернативой множественному наследованию, сходство только визуальное - можно через запятую несколько интерфейсов перечислить. Вы не правильно понимаете роль и предназначение интерфейсов. - не хочется собачится, возможно я резковато высказался, - приношу свои извинения за тон, но мне не кажется что для реализации множественного наследования (вопрос нужно ли множественное наследование предлагаю не трогать вообще, так это личное дело каждого программиста, мне например, не нужно) надо (заметьте не можно, а надо) использовать интерфейсы. Т. к. использование интерфейсов приводит в данной задаче к громозкому коду (не элегантному, не эффективному), в частности в приведенной OU схеме мы видим 3 класса и 3 интерфейса (хотя Child лишний), итого 5-6 файлов - это что элегантный и эффективный код? По безопасности тоже може проехаться - из Вашей схемы не очевидна реализация методов наследника, т. е. не факт, что методы наследника имеющие ту же сигнатуру, что и методы родителей, имеют то же тело, иначе говоря есть хороший повод накосячить. Более того в Вашем случае они точно будут иметь другое тело и лишь имитировать функционал родителей, т. е. возможно от тупого переписывания методов Вы избавились, но это множественным наследованием не назовешь. Прежде чем городить такой код желательно выяснить зачем Вам множественное наследование (МН)? Если МН Вам необходимо для получения функциональности нескольких родителей, мне кажется, заметно проще использовать вложеные классы (этот тезис Вы упорно игнорируете). Случай когда Ваша схема необходима - случай приведения типов, где наследник должен приводиться к типам нескольких родителей, а если разобраться по существу: класс Softwarer и SoftwarersMother реализуют один и тот же интерфейс Mother, но при этом Softwares никак не связан с SoftwarersMother, т. е. SoftwarersMother не является родителем для Softwarer, аналогично с веткой Father. Если избавится от шелухи Ваша диаграма выглядит так: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2006, 11:21:44 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
OU2 softwarer: ну и где здесь порожденная вашим больным воображением дубликация кода? Попробуйте вылечить свои больные глаза и обращаясь ко мне, говорить о том, о чем говорил я. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2006, 13:16:04 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
KachalovВдумайтесь в само слово "интерфейс", оцените красоту идеи Может быть, я не понимаю красоту идеи. Для меня интерфейс - это pure abstract класс, не более того. Соответственно, частный случай более общего решения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2006, 13:18:27 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
softwarerинтерфейс - это pure abstract класс, не более того. Соответственно, частный случай более общего решения. - формально Вы правы, но роль интерфейса при написании кода существенно отличается от роли абстрактного класса. Абстрактный класс, грубо говоря, представляет собой "полуфабрикат", заготовку довести "до ума" которую должен программист при реализации конкретной задачи, а интерфейс выполняет роль "спецификации" гарантирующей что в реализующем ее классе будет необходимый набор методов. Что бы меня потом не тыкали носом в книжки сразу скажу, что это мое личное мнение на использование абстрактных классов и интерфейсов, возникающее из собственного опыта. Мнение которое никому не навязываю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2006, 13:37:05 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
2 kachalov: авторЕсли МН Вам необходимо для получения функциональности нескольких родителей, мне кажется, заметно проще использовать вложеные классы (этот тезис Вы упорно игнорируете). еще раз повторю, вы не понимаете таких вещей как наследование и полиморфизм. На пальцах, множественное наследование: Класс С наследован от А и В. Соответсвенно класс С может быть использован вместо класса А или В. Имитация множественного наследования с помощью интерфейсов: Интерфейс С наследован от интерфейсов А и В. Соответственно интерфейс С и его имплементации могут быть использованы вместо интерфейса А или В. ***Вместо интерфейса С можно использовать класс который будет имплементировать интерфейсы А и В, но в таком случае каждый раз когда вы захотите получить класс который можно использовать вместо А или В вы должны будете либо постоянно дублировать имплементацию двух интерфейсов (т.е в каждом случае писать class X implements A, implements B ) либо наследовать от класса С (это менее полиморфично по сравнению с возможностью использования любого класса имплементирующего данный интерфейс). Вариант предложеный вами, который основан либо на Decorator либо на Adaptor design patterns (это я понимаю то что вы имеете в виду под использованием вложенных классов) Класс С наследуется от А или Б и инкапсулирует экземпляры классов А и В. В данном случае класс С может быть использован только ВМЕСТО А ИЛИ В (т.е своего супер класса), но никак ни ОБОИХ . Так что множественным наследованием здесь и не пахнет. 2 softwarer: авторНе достигает эффекта и приводит к тупому копированию кода в каждый класс, реализующий эти интерфейсы. провал памяти? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2006, 15:11:24 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
Kachalovно роль интерфейса при написании кода существенно отличается от роли абстрактного класса. Не соглашусь. Мне кажется, сказанное Вами - поверхностное видение, но если копнуть, оказывается что оба названных предназначения на самом деле одно и тоже. KachalovАбстрактный класс, грубо говоря, представляет собой "полуфабрикат", заготовку Прежде всего, давайте оговорим различие между abstract class и pure abstract class. Первый - действительно полуфабрикат; второй - скорее сырье, или как Вы назвали, заготовка. Далее. Ваша точка зрения, как мне представляется, неявно ориентируется на концепцию single inheritance - абстрактный класс для Вас это нечто, от чего Вы наследуетесь, а интерфейс - то, что реализуете. То есть разница, о которой Вы говорите, опирается на ограничения языка. Если взять инструмент с multiple inheritance, разница сводится до технической, более того, необнаруживаемой. Как пример этого - однажды мне потребовался интерфейс некоей модели. Давайте его условно опишем так (будем надеяться, я еще не забыл синтаксис явы): Код: plaintext 1. 2. 3. 4. так вот, в этой модели мне бы вполне пригодился следующий метод, как дефолтовая реализация для всех моделей: Код: plaintext 1. 2. 3. Но от такой потребности "интерфейс" ничуть не становится "полуфабрикатом" - согласны? Итого, мое мнение: "интерфейс" - это один из вариантов применения классов. Фактически разница такова: если классу А по смыслу необходимо наследоваться от класса Б, то это "родительский класс"; если класс А легко может реализовать требования класса Б, но и без него ничего особого не потеряет, то это "интерфейс". Итого, получаем, что интерфейсы в явовском смысле - это вырожденный случай abstract class, тот самый pure abstract class. Для полноты картины - я иногда пользовался еще и вырожденными интерфейсами, то есть интерфейсами, не содержащими методов. Фактически этот интерфейс использовался просто как логический признак на соответствующем объекте, скажем, интерфейс ThreadedAction показывал, что Action может и должен запускаться в отдельном потоке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2006, 15:24:13 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
OU2 softwarer: авторНе достигает эффекта и приводит к тупому копированию кода в каждый класс, реализующий эти интерфейсы. провал памяти? Ничуть. Ваше выборочное цитирование меня не смущает и не обязывает; вылечите свои больные глаза, прочитайте то, что написано чуть выше, чем выхваченная Вами строка и покажите не один маленький пример, в который мне даже лень смотреть - может и в нем есть это тупое копирование - а полноценную библиотеку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2006, 15:28:21 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
Кстати, есть в этой модели совершенно dumb код - методы Softwarer.getChromosomeX() и Softwarer.getChromosomeY(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2006, 15:35:42 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
2 Sofwarer в приведенном примере если требуется дефолтная реализация метода, Вам нужен не интерфейс а абстрактный класс, причем не полностью абстрактный, т. е. "заготовка"="полуфабрикат". Интерфейс никак не может быть "полуфабрикатом" - не передергивайте мои слова. формально интерфейс представляет предельный случай абстрактного класса, но практически это не так. На практике области применения интерфейсов и абстрактных классов различаются. Интерфейс представляет собой "спецификацию" класса, необходимую для приведения типов и гарантирующую наличие требуемых методов (java.lang.Runnable) или сигнализирующую что класс удовлетворяет некоторым требованиям (java.io.Serializable), а абстрактный класс представляет собой частичную реализацию - "полуфабрикат", на основе которого легко построить что то новое опираясь на чужой код. с точки зрения програмирования на Java случай полностью абстрактного класса представляется бессмыслицей не имеющей практического значения. Кстати Вы реально используете полностью абстракные классы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2006, 16:02:50 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
2 OU - Вы не видите сути проблемы. Прежде чем опонировать, ответьте на вопрос: "зачем программисту может понадобиться множественное наследование?" На мой взгляд есть два случая когда это может быть нужным: 1. наследование функциональности нескольких родителей. 2. приведение типа к типу любого из родителей. - Вы упорно убеждаете меня в необходимости пункта 2, я согласен с Вашими тезисами по этому пункту и не вижу смысла спорить, тем более в таком тоне. Поверьте, что с наследованием и полиморфизмом в Java я познакомился 9 лет назад из которых 5 лет провел в статусе SCJ2P. Не надо предлагать мне Ваши чудесные книжицы - не куплю. А под "вложенными классами", в данном случае, я понимаю вложенные классы (inner-классы и, с некоторыми ограничениями, nested-классы, являющиеся элементами синтаксиса языка Java начиная с Java 2). Причем тут шаблоны проектирования Decorator и Adapter я не понимаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2006, 16:25:42 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
Kachalov в приведенном примере если требуется дефолтная реализация метода, Вам нужен не интерфейс а абстрактный класс, причем не полностью абстрактный Я как раз и пытаюсь показать, что граница между этими понятиями надумана. Представьте себе следующую последовательность событий: изначально я реализовал интерфейс с методами getCount и getObject; это интерфейс, не так ли? Затем я добавляю в него getIcon - при этом интерфейс остается интерфейсом - понимаю, что для него была бы удобна дефолтовая реализация - и только из-за этого вроде_бы_концептуальное_понятие "интерфейс" вдруг меняется на нечто другое. Так выходит при Вашем строгом понимании "интерфейса". KachalovИнтерфейс никак не может быть "полуфабрикатом" - не передергивайте мои слова. Я нисколько не пытаюсь передернуть Ваши слова (собственно, я даже не понимаю, как мне можно приписать такую попытку - для этого нужно, чтобы я сослался на Ваше утверждение, чего вроде бы не было). Я апеллирую к Вашему здравому смыслу. Kachalovформально интерфейс представляет предельный случай абстрактного класса, но практически это не так. Вы говорите о той практике, в которой из-за отсутствия множественного наследования других вариантов просто не существует. KachalovИнтерфейс представляет собой "спецификацию" класса, необходимую для приведения типов и гарантирующую наличие требуемых методов (java.lang.Runnable) или сигнализирующую что класс удовлетворяет некоторым требованиям (java.io.Serializable), а абстрактный класс представляет собой частичную реализацию - "полуфабрикат", на основе которого легко построить что то новое опираясь на чужой код. По большому счету (с точностью до формулировок) я с этим согласен. Вопрос не в конкретном синтаксисе, а в предназначении, в применении того или иного класса-интерфейса. Обратите внимание, здесь нет принципиального требования отсутствия реализации в интерфейсе; от того, что мы добавим реализацию getIcon в пример выше, применение MyModel как "спецификации, необходимой для приведения типов и гарантирующей наличие" ничуть не убудет. Собственно, применение останется ровно таким же. Kachalov с точки зрения програмирования на Java случай полностью абстрактного класса представляется бессмыслицей не имеющей практического значения. Безусловно. По той причине, что в этом случае разумнее объявить этот абстрактный класс интерфейсом и не связывать себя ограничениями единонаследия. Kachalov Кстати Вы реально используете полностью абстракные классы? Каждый раз, когда использую интерфейсы :) Если не считать этого, сходу вспоминаю единственный случай, класс TAbstractStep - это "шаг тестирования" в моем автотестере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2006, 17:26:56 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
softwarer Kachalov Кстати Вы реально используете полностью абстракные классы? Каждый раз, когда использую интерфейсы :) - кстати, разница между интерфейсом и классом у которого все методы абстрактные, с точки зрения Java, более существенна. Любой класс является наследником от java.lang.Object, т. е. в отличие от интерфейса обладает рядом не абстрактных методов. softwarerЯ как раз и пытаюсь показать, что граница между этими понятиями надумана. - а я пытаюсь доказать обратное :) Когда Вы создаете интерфейс Вы создаете "спецификацию", когда Вы создаете абстрактный класс Вы делаете "запас на будущее". Мне кажется что разница между "консервами" и "стандартом на консервы" довольно велика (извините за идиотские аналогии, но они, на мой взгляд, хорошо отражают идею). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2006, 17:47:23 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
Kachalov- кстати, разница между интерфейсом и классом у которого все методы абстрактные, с точки зрения Java, более существенна. Любой класс является наследником от java.lang.Object Если помнить об этом, то "полностью абстрактных классов" в Java, как впрочем и в Delphi, вообще не бывает - поскольку методы, унаследованные от Object/TObject, вполне себе конкретные. Но я полагаю, это малосущественная деталь. Kachalov- а я пытаюсь доказать обратное :) Вот и определились :) Теперь следующий шаг - методология доказательства. Я полагаю истинным следующее утверждение: два объекта имеют принципиальное, качественное отличие, тогда и только тогда, когда один из них нельзя мелкими, неконцептуальными изменениями перевести в другой. Если можно - разница между ними количественная, непринципиальная. Таким образом, если вспомнить пример с MyModel и рассмотреть его предполагая наличие в языке множественного наследования, дискуссия упирается в следующий вопрос: добавление реализации getIcon - принципиальное изменение или нет? В принципе, это вопрос вкусов. Я полагаю, что непринципиальное, почему: потому что на самом деле это мелкая техническая деталь, удобная, но не более того; от нее ничего особенного не зависит, в архитектуре решения она просто не видна. Она есть - мы можем написать несколько классов чуть быстрее и чуть качественнее; ее нет - придется скопировать несколько строк кода. Но в том, что касается принципиальных вещей - например, организации взаимодействия объектов в приложении - разницы ровным счетом никакой. KachalovКогда Вы создаете интерфейс Вы создаете "спецификацию", когда Вы создаете абстрактный класс Вы делаете "запас на будущее". Мне кажется что разница между "консервами" и "стандартом на консервы" довольно велика (извините за идиотские аналогии, но они, на мой взгляд, хорошо отражают идею). Я нисколько не против аналогий, сам их активно использую. Данная конкретная представляется мне не совсем верной, не совсем удобной для рассуждений, но не более того (она безусловно образна и хорошо раскрывает Вашу мысль). Если Вы не против, давайте проведем маленький натурный эксперимент. Я показываю кусок кода, а Вы скажите, это "консервы" или "стандарт на консервы", и почему именно: Код: plaintext 1. 2. 3. 4. 5. 6. 7. P.S. Мне действительно интересно, появится ли на этом сайте когда-нибудь качественная подсветка синтаксиса, или нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2006, 18:12:00 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
softwarer Я полагаю истинным следующее утверждение: два объекта имеют принципиальное, качественное отличие, тогда и только тогда, когда один из них нельзя мелкими, неконцептуальными изменениями перевести в другой. Если можно - разница между ними количественная, непринципиальная. - из интерфейса класс точно не сделаешь :) а разница все таки принципиальная. Вопрос в том для чего применять ту или иную конструкцию, что то типа вопроса: можно ли микроскопом гвозди забивать - ответ да можно, но это будет не правильно . - извините, но если можно, примерчик на Java, на объектном паскале я писал более 10 лет назад и плохо помню синтаксис, а главное не помню есть ли в нем такое понятие как интерфейсы? Кроме того обсуждение Java-интерфейсов на примере другого языка заведет нас в неведомые дебри :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2006, 19:47:18 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
KachalovКроме того обсуждение Java-интерфейсов на примере другого языка заведет нас в неведомые дебри :) Хм. Я до сих пор полагал, что мы обсуждаем концепцию вообще, а не применительно к Яве. Имхо обсуждать множественное наследование "применительно к Яве" глупо, его здесь просто нет. Kachalov- из интерфейса класс точно не сделаешь Why? Kachalovа разница все таки принципиальная. Где? Если в Java - безусловно. Но представьте язык, где есть множественное наследование; какая принципиальная разница там? Kachalov- извините, но если можно, примерчик на Java Хм. Попробую; проблема в том, что я уже успел подзабыть синтаксис Явы. Будет примерно так: Код: plaintext 1. 2. 3. 4. Kachalov а главное не помню есть ли в нем такое понятие как интерфейсы? Есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2006, 21:24:31 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
softwarer Код: plaintext 1. 2. 3. 4. Не буду мешать :) Скажу лишь, что в Java все параметры передаются по ссылке (за исключением J2EE-бинов, в которых по-умолчанию всё передается по значению). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2006, 21:27:14 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
он жеСкажу лишь, что в Java все параметры передаются по ссылке В смысле, как в Фортране? Странно, если я успел это забыть. Хотя наверное бывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2006, 21:34:25 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
он же softwarer Код: plaintext 1. 2. 3. 4. Не буду мешать :) Скажу лишь, что в Java все параметры передаются по ссылке (за исключением J2EE-бинов, в которых по-умолчанию всё передается по значению). чушь. фсе передается по значению. другое дело, что передаёца. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2006, 21:45:44 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
softwarer В смысле, как в Фортране? Странно, если я успел это забыть. Хотя наверное бывает. Вот уж не знаю, как в Фортране. Передаются по ссылке все кроме примитивных типов (т.е. все объекты), только о String разговор особый - хоть и объект, но неизменяемый и в out его значение не возвращается :) Это я забыл уточнить. А то будут еще обвинять меня в безграмотности и незнании основ, тут такие :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2006, 21:50:20 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
я чушь. фсе передается по значению. другое дело, что передаёца. Фсё - это что? И где? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2006, 21:51:05 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
он жеВот уж не знаю, как в Фортране. Именно что все передается по ссылке. С этим связан классический прикол - можно было сделать примерно так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. и в результате в вызов sub2 параметром передавалась десятка. он жеПередаются по ссылке все кроме примитивных типов Ээ, нет. То, что Вы говорите - это передача по значению. Просто для "непримитивных" типов значением является ссылка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2006, 21:56:41 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
softwarer Ээ, нет. То, что Вы говорите - это передача по значению. Просто для "непримитивных" типов значением является ссылка. Не хочу спорить. Вопрос лишь с какой точки зрения рассматривать. Лично мне привычнее считать, что если я могу изменять переданный объект внутри функции и он изменится снаружи - значит мне передана ссылка на объекте. А если я могу менять его до умопомрачения, но снаружи этого не заметят - значит я получил полную копию объкта (т.е. значение). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2006, 22:03:45 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
"Передана ссылка" - весьма условное понятие в Java, естественно. Просто нужно ж как-то не сойти с ума ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2006, 22:04:33 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
он жеЛично мне привычнее считать, что Я понимаю. Вопрос в том, к каким последствиям это приводит. Если смотреть на ситуацию "как она есть", то достаточно трех концепций: двух общих - "объект есть указатель на объект" и "манипуляции со String приводят к появлению нового String-объекта" - и одной с параметрами - "параметры передаются по значению". Этого достаточно, чтобы понимать все возможные ситуации. У Вас же получилось так, что Вы описали три правила только для параметров: - примитивные типы передаются по значению - непримитивные кроме String передаются вроде как по ссылке - String передается скорее по значению Две общих концепции по-прежнему необходимо помнить, итого пять, да еще помнить, что вторая-третья из частных концепций верны условно. Усложнение на пустом месте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2006, 22:13:26 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
он жеПросто нужно ж как-то не сойти с ума Есть довольно известная и толковая по сути статья . Так вот, выход из этой ситуации - не путаться в сказках, а разбираться в сути. Если угодно, это сишный подход, но он единственно правильный, если не хочется периодически оказываться в ситуации "у меня происходит что-то, что я и понять не могу". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2006, 22:22:34 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
softwarer Есть довольно известная и толковая по сути статья . Спасибо. Интересная статья (в очередной раз благодарен переводчикам вроде тех что на википедии - из-за их безобразий я непрерывно совершенствую свой английский ). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2006, 22:43:07 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
Правда мне пока не приходилось сталкивать с необходимостью деабстрагирования. Но ведь рано или поздно придется, наверное... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2006, 22:43:59 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
softwarerЕсли угодно, это сишный подход, но он единственно правильный, если не хочется периодически оказываться в ситуации "у меня происходит что-то, что я и понять не могу". Ну, хм, бывает :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2006, 23:02:15 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
chroвызывается не то, что Вы думали, а первый попавшийся такой метод (как в Питоне, без сообщения об ошибке). Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2006, 23:12:34 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
LINUXER Kachalovможно унаследовать несколько методов с одинаковой сигнатурой и разной реализацией - возникает коллизия. В интерфейсах также - заимплементишь два интерфейса с одноимёнными полями - всё слетит.А какие у интерфейсов поля? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2006, 23:18:52 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
Partisan Mправильный ответ уже дан - множественное наследование не нужно. А неправильных можно давать сколько угодно. Никакая это не священная война, но достают некоторые с претензией "Почему Java это не C++". Ну и пользуйтесь своим С++ и не приставайте с глупостями. И не надо про "высокую квалификацию" программистов на С++". Я сам долго программировал на C++ (ввиду отсутствия выбора), и с тех пор как перешёл на Java, моя квалификация повысилась (поизучал новые технологии, доступные программистам на Java). Кстати, по моим наблюдениям, большинство программирующих на С++ - дураки, невежды, демократы и психи. Чтобы не быть голословным - один на прямо рабочем месте плевался (фирма Галактика). Я так и не понял, что он хотел этим выразить. Он же, каждый день программируя на VC6, года через 2 после появления VС7, спросил меня, чем оно отличается от VC7. И это не самый тяжёлый случай. О! Первый осмысленный (кроме заглавного) пост в этом топике. Да и заглавный пост тоже глуповат - он порождает обсуждение того, чего нет (имеется в виду java). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2006, 23:22:36 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
А.Грасоff™ О! Первый осмысленный (кроме заглавного) пост в этом топике. Да и заглавный пост тоже глуповат - он порождает обсуждение того, чего нет (имеется в виду java). Это потому что "большинство программирующих на С++ - дураки, невежды, демократы и психи"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2006, 23:29:38 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
он же А.Грасоff™ О! Первый осмысленный (кроме заглавного) пост в этом топике. Да и заглавный пост тоже глуповат - он порождает обсуждение того, чего нет (имеется в виду java). Это потому что "большинство программирующих на С++ - дураки, невежды, демократы и психи"? Нет. Это потому, что "... обсуждение того, чего нет ...". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2006, 23:47:18 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
Я тоже согласен с Партизаном. Добавить нечего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2006, 00:15:57 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
А.Грасоff™ LINUXER Kachalovможно унаследовать несколько методов с одинаковой сигнатурой и разной реализацией - возникает коллизия. В интерфейсах также - заимплементишь два интерфейса с одноимёнными полями - всё слетит.А какие у интерфейсов поля? Я имел в виду свойства. На самом деле с ними всё как надо.(ошибся ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2006, 08:33:05 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
А.Грасоff™ Partisan Mправильный ответ уже дан - множественное наследование не нужно. А неправильных можно давать сколько угодно. Никакая это не священная война, но достают некоторые с претензией "Почему Java это не C++". Ну и пользуйтесь своим С++ и не приставайте с глупостями. И не надо про "высокую квалификацию" программистов на С++". Я сам долго программировал на C++ (ввиду отсутствия выбора), и с тех пор как перешёл на Java, моя квалификация повысилась (поизучал новые технологии, доступные программистам на Java). Кстати, по моим наблюдениям, большинство программирующих на С++ - дураки, невежды, демократы и психи. Чтобы не быть голословным - один на прямо рабочем месте плевался (фирма Галактика). Я так и не понял, что он хотел этим выразить. Он же, каждый день программируя на VC6, года через 2 после появления VС7, спросил меня, чем оно отличается от VC7. И это не самый тяжёлый случай. О! Первый осмысленный (кроме заглавного) пост в этом топике. Да и заглавный пост тоже глуповат - он порождает обсуждение того, чего нет (имеется в виду java). Такой ответ обычно слышно на реплики типа Цпп - круто а остальное - г** А ещё более осмысленно можно сказать "правильный ответ уже дан(sun) - В JAVA нет множественного наследования"(трудно не согласиться) Обсудить я хотел действия в ситуации, когда нужно: Kachalov1. наследование функциональности нескольких родителей. 2. приведение типа к типу любого из родителей. и как и почему это делать не нужно (по принцыпу кун-фу) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2006, 09:37:43 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
Остаюсь при мнении что МН нужно Видны варианты: Использовать композицию для наследования реализации и интерфейсов для приведения типов Использовать вложенные классы для наследования реализации//преобразовывать тогда видимо будет сложновато И то и другое выглядит сложно, но видимо реализовать МН в Java ещё сложней. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2006, 09:38:17 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
Наисилил тему начиная где-то со второй страницы, вы друг дружку то понимаете? Впечатление, что каждый говорит о своем, о наболевшем, а не обсуждают нечто вместе. Была попытка привести пример, но и ту забраковали. Так может сначала договоритесь и создадите пример, где это МН нужно и начнете на примере этого примера обсуждать реализации и преимущества МН перед интерфейсами? А то публике, вас читающей, ни бельмеса непонятно. И такое впечатление, что правы те, кто защищает жабу и принцип "МН вредно и ненужно, что доказано неоднократно". У защитников же МН так и нет удачного примера, доказывающего, что без МН ГОРАЗДО хуже, чем с использованием его. И кстати, большие листинги выкладывать в тэге SRC - очень портит страницу и расширяет ее за всякие границы. Лучше откройте на nm.ru маленький хостинг и выкладывайте или отформатированный в html код, или зазипованные исходники, а ссылки на них кидайте в тему. Понятно, да? Ну или уж на mytempdir.com, рапидшару, хотя нет, на рапидшару не надо, очень трудно оттуда что-то взять, сидя за NAT с одим ip на тыщу пользователей. (Такие провайдеры у нас чтоб им пусто было) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2006, 11:41:23 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
MatzumotoНаисилил тему начиная где-то со второй страницы, вы друг дружку то понимаете? Впечатление, что каждый говорит о своем, о наболевшем, а не обсуждают нечто вместе. Была попытка привести пример, но и ту забраковали. Так может сначала договоритесь и создадите пример, где это МН нужно и начнете на примере этого примера обсуждать реализации и преимущества МН перед интерфейсами? А то публике, вас читающей, ни бельмеса непонятно. И такое впечатление, что правы те, кто защищает жабу и принцип "МН вредно и ненужно, что доказано неоднократно". У защитников же МН так и нет удачного примера, доказывающего, что без МН ГОРАЗДО хуже, чем с использованием его. И кстати, большие листинги выкладывать в тэге SRC - очень портит страницу и расширяет ее за всякие границы. Лучше откройте на nm.ru маленький хостинг и выкладывайте или отформатированный в html код, или зазипованные исходники, а ссылки на них кидайте в тему. Понятно, да? Ну или уж на mytempdir.com, рапидшару, хотя нет, на рапидшару не надо, очень трудно оттуда что-то взять, сидя за NAT с одим ip на тыщу пользователей. (Такие провайдеры у нас чтоб им пусто было) Никто не будет выкладывать специально отформатированный код. Или зазипованные исходники. И на рапидшару никто выкладывать ничего не будет. Почему? Потому что не нравится - не читайте. Или купите нормальный монитор ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2006, 12:02:24 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
он жеНикто не будет выкладывать специально отформатированный код. Или зазипованные исходники. И на рапидшару никто выкладывать ничего не будет. Нормальные люди кстати выкладывают и на рапидшару и зазипованные, потому что хотят, чтобы их поняли. Поищите, даже на этом форуме постоянно встречаются ссылки на код, положенный на рапидшару и т.п. Не говоря о rsdn.ru. Почему? Потому что не нравится - не читайте. Или купите нормальный монитор Потому что нормальные люди если МОГУТ не писать, то НЕ пишут. А если пишут, то так, чтобы мысль донести в наиболее удобной форме, с форматированием, с подчеркиваниями, с выделением цветом, с зазипованными исходниками. Вон NotGonnaGetUs дал ссылку на нормальную полезную книгу и я ее уже скачал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2006, 12:17:26 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
MatzumotoПоищите, даже на этом форуме постоянно встречаются ссылки на код, положенный на рапидшару и т.п. Не говоря о rsdn.ru. Не нужно заблуждаться. На RSDN дают ссылки, т.к. там идет обсуждение аналогичных тем и проще дать линк, чем переписывать тамошний текст. А по поводу рапидшары - ни один адекватный человек не положит туда файл размером меньше n*10 метров. И уж текстам-примерам там делать совершенно нечего. Никто не будет сидеть две минуты и ждать очередного примера весом в 2 килобайта :) При том что следующий можно слить только через n-надцать минут Matzumoto А если пишут, то так, чтобы мысль донести в наиболее удобной форме, с форматированием, с подчеркиваниями, с выделением цветом, с зазипованными исходниками. Мысль должна доноситься в виде грамотно сконструированных предложений. Выделения цветом, форматирование и подчеркивания - они только для исходников нужны. Исходники форматируются с помощью тега SRC (и, в принципе, терпимо). Что вас не устраивает - мне не понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2006, 12:36:29 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
MatzumotoNotGonnaGetUs дал ссылку на нормальную полезную книгу и я ее уже скачал Вас не затруднит привети прямую ссылочку. Я-бы тоже скачал. И почитал с удовольствием. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2006, 12:42:27 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
maytonВас не затруднит привети прямую ссылочку. Я-бы тоже скачал. И почитал с удовольствием.Первая же ссылка в гугле ftp:||files.zipsites.ru/books/programming/oop_osc2book.rar ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2006, 16:47:45 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
MatzumotoУ защитников же МН так и нет удачного примера, доказывающего, что без МН ГОРАЗДО хуже, чем с использованием его. Забавная демагогия. Есть факт: для приведенного мной простейшего примера никто не привел адекватной SH-реализации. Из этого делается вывод: ".. так и не удачного примера, доказывающего .." MatzumotoИ кстати, большие листинги выкладывать в тэге SRC - очень портит страницу и расширяет ее за всякие границы. Присоединяюсь к точке зрения "купите нормальный монитор". MatzumotoПонятно, да? Чувак, ты форумом не ошибся? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2006, 17:35:21 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
softwarer MatzumotoПонятно, да? Чувак, ты форумом не ошибся?Ошибся, да. Если тут находятся люди, отстаивающие пользу МН, то вероятно ошибся. Вы бы еще стали доказывать, что с goto в умелых руках программы можно писать, главное умело goto применять и не допускать ошибок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2006, 20:13:17 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
Кстати, сугубо для информации - программисты на Java регулярно применяют goto. Думаю, ты этого не поймешь, но break и continue - разновидности goto. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2006, 21:13:22 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
softwarerКстати, сугубо для информации - программисты на Java регулярно применяют goto. Думаю, ты этого не поймешь, но break и continue - разновидности goto. И это мы еще не пытались говорить об exception'ах, которые вообще умеют гоутусить через такие расстояния, что никаких goto не снились :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2006, 21:18:10 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
exceptions - это не goto. Защищенный блок стоит рассматривать как неявную подпрограмму. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2006, 21:27:26 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
softwarerexceptions - это не goto. Защищенный блок стоит рассматривать как неявную подпрограмму. Неа. Я про Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2006, 22:38:50 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
softwarerКстати, сугубо для информации - программисты на Java регулярно применяют goto. Думаю, ты этого не поймешь, но break и continue - разновидности goto.Да я и так это знаю, TiJ by Eckel читал. Но это - не классические goto. Так же и интерфейсы - не классическое МН. PS А еще в жабе const нет. А есть static final. И т.д. и т.п. Знаете, в жабе все есть, и если очень постараться можно и через goto написать и соорудить нечто напоминающее МН. Но для того и best practices, чтобы знать, что делать нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2006, 22:45:02 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
он жеКуда мы перейдем с // p.1 ? Смотри. Код: 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. 27. 28. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2006, 23:09:18 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
MatzumotoНо это - не классические goto. Это удобный синтаксис для записи частного случая goto. Тем не менее, это все тот же goto, не соответствующий конструкциям структурного программирования. MatzumotoТак же и интерфейсы - не классическое МН. Уже лучше. MatzumotoЗнаете, в жабе все есть, и если очень постараться можно и через goto написать и соорудить нечто напоминающее МН. Но для того и best practices, чтобы знать, что делать нельзя. Все ж таки удивительно, как очевидна корреляция между специализацией и ориентацией шариков в мозгу. Топикстартер задал один простой вопрос: объясните, чем так плохо MH, что в Java его не стали реализовывать. Два или три человека в первых постах упомянули возможные неприятности, чем разумные ответы "против" и завершились, дальше начала работать замечательная в своей логичности точка зрения "в Java его нет, этим оно и плохо". Что любопытно, не так давно существовала еще одна очень похожая тема для священных войн - MSSQLщики в один голос объясняли, что версионность плоха и нафиг не нужна. Потом в MSSQL появилась версионность, и эти голоса тут же исчезли. Интересно, будет ли похожая судьба у наследования в Java. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2006, 23:39:28 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
Да мож все попроще, мож Java выпускали второпях и времени нехватило на нормальную реализацию МН. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2006, 00:02:57 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
bmv_rusДа мож все попроще, мож Java выпускали второпях и времени нехватило на нормальную реализацию МН. :) Сомневаюсь. MH среди прочего плохо сочетается с концепцией "виртуальных по умолчанию" методов - классы-наследники будут разваливаться по любому чиху, придется каждый раз, модифицируя предка, просматривать всех потомков (!) в поисках методов, которые нежданно-негаданно станут реализациями унаследованных. Собственно, это представляет определенную проблему и при SH, но при MH будет просто бардак. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2006, 00:12:44 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
Ай, молодцы :) И про передачу параметров вспомнили, и про идеальный язык дельфи, и С++-ников с гавном смешали. Знатный топик получился :) Давайте, флейма ради, добавлю. 90% программистов (даже в java) не пользуются даже одиночным наследованием (обязательное наследование от специальных классов фреймвёрков в рассмотрение не берётся, т.к. делается на уровне "по другому нельзя"). Ещё 9% используют его "подмножествно" (да да: подмножество подмножества :)), а именно наследование от интерфейсов и наследование ради возможности осуществить полиморфный вызов (полностью описывается паттернами из разряда strategy или template method). И только 1% программистов занимается задачами (разработка фреймворков, разработка для повторного использования, не тривиальные предметные области), где возникает реальная необходимость в применении чего-то отличного от инкапсуляции для борьбы со сложностью. Т.о. 99% процентов программистов, рассуждая о наследовании, использует самодельные теории, которые никогда на практике не проверялись. Откуда берутся эти теории? Очевидно из открытых источников (таких как faq sun'a "почему в java нет множественного наследования?") и в соответствии с кругозором (в виде экспириенса в delphi/c++/qbasic (нужное подчеркнуть)). Играет ли тут роль многолетний опыт работы? Скорее нет, чем да, т.к. всё зависит от самой работы (типа решаемых задач) и отношения к ней. А что в итоге? Холивор :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2006, 13:50:31 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUs90% программистов (даже в java) не пользуются даже одиночным наследованием Да ладно Вам. У меня довольно низкое мнение о "среднем дельфере", но если верить Вам, выходит, что "средний явер" куда менее грамотен. NB! Если я правильно понял, под "пользованием наследованием" Вы имеете в виду "унаследовать собственный класс от собственного же класса" - так? NotGonnaGetUsИ только 1% программистов Хм. Есть один заочно знакомый мне молодой парень. Несколько месяцев назад он поступил java-стажером в одну из софтверных фирм второго эшелона - уровня "не то чтобы постоянно на слуху, но если напрячь мозги, каждый третий вспомнит , что уже о ней слышал". Дык вот, через месяц или два после начала его работы мы с ним вполне серьезно обсуждали структуру классов для выданной ему задачи. По его инициативе, и там было, над чем подумать. Видимо, он сходу вошел в этот 1%? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2006, 13:59:25 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
softwarer NotGonnaGetUs90% программистов (даже в java) не пользуются даже одиночным наследованием Да ладно Вам. У меня довольно низкое мнение о "среднем дельфере", но если верить Вам, выходит, что "средний явер" куда менее грамотен. NB! Если я правильно понял, под "пользованием наследованием" Вы имеете в виду "унаследовать собственный класс от собственного же класса" - так? Я слегка гиперболизирую, чтобы мысль нашла более живой отклик, но суть именно какая. Только причина не столько в том, что "явер/дельфер/другое" не грамотный, а том, что задачи, где использование наследования не будет высосанным из пальца, встерчаются не так часто как может показаться. И даже там, где использование наследования уместно, обычно достаточно одного "уровня" наследования, причём с явно обозаченной целью (Сюда можно отнести создание "пограничных" классов/интерфейсов, через которые будует взаимодействовать различные части системы, определение родовых алгоритмов, конкретные детали которых задаются через наследования от классов с абстрактными методами или путём передачи объекта реализующего определённый интерфейс и т.п. Это, в общем-то частные, хотя и чрезвычайно полезные случаи применения наследования, которые имеют мало общего с понятием is-a или моделированием реальных отношений между сущностями предметной области) К слову о пальце. Наблюдал своими галазами иерархию глубиной(!) 20, отражащую, фактически, только классификацию контроллеров для обработки http-запросов. softwarer NotGonnaGetUsИ только 1% программистов Дык вот, через месяц или два после начала его работы мы с ним вполне серьезно обсуждали структуру классов для выданной ему задачи. По его инициативе, и там было, над чем подумать. Обсуждению, обычно, подлежит выделение сущностей и распределение между ними обязанностей для решения поставленной задачи. Само по себе наследование в этом процессе играет малую роль. softwarerВидимо, он сходу вошел в этот 1%? Согласно определению данному выше, в 1% входят те, кто решает достаточно сложные задачи. Значит, если ему дали такую задачу и он успешно с ней справился - значит вошёл :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2006, 15:09:08 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
Высосанные из пальца - согласен, бывают. Я помню код решения задачки "открыть шаблон вордовского файла, подставить значения из БД, записать", решенной с выделением таких объектов, как "оператор поиска места для модификации", "оператор осуществления модификации".... Описывая такое вот "плоское программирование", Вы практически говорите о повседневном труде кодеров. По моим наблюдениям, большинство людей таки стремится из этого статуса вылезти, причем не только карьерно, но прежде всего фактически - по тем задачам, которые они пытаются на себя взять, подтягивают к себе, уговаривают.... Может быть это уже моя специфика - для меня "идеологический кодер, не желающий большего" является совершенно неинтересным сотрудником, но с моей точки зрения, реально стоит задача "подкидывать людям интересные задачки, иначе они огорчатся, будут плохо работать и в конце концов уйдут". И эти задачки - какие-то куски проектирования. Ну а по вопросам, которые задаются в том же дельфовом форуме, я бы сказал, что многие таки реально сталкиваются с задачами наследования и пытаются их как-то решать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2006, 16:28:34 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
softwarerОписывая такое вот "плоское программирование", Вы практически говорите о повседневном труде кодеров. ... но с моей точки зрения, реально стоит задача "подкидывать людям интересные задачки, иначе они огорчатся, будут плохо работать и в конце концов уйдут". И эти задачки - какие-то куски проектирования. Я бы назвал это не "плоским", а "реальным" программированием. Думаю никто не станет спорить, что именно так и обстоят дела в проектах занимающихся поддержкой или развитием существующих программных систем, и что таких проектов - большинство. Опять же, каков процент "студентов" среди общего числа разработчиков и какие "куски проектирования" им можно давать? :) Предлагаю так же, не делать тождества между "наследованием" и "проектированием". Я об этом не говорил. Использовать наследование или нет - это только один из многих вопросов, которые нужно решать при проектировании. Поэтому если перед человеком не встают задачи, где требуется что-нибудь в четыре этажа отнаследовать - это не обязательно значит, что он неспособный на творческую деятельность "кодер" - просто такова специфика большинства решаемых задач. Конечно, можно утверждать, что я не прав, потому что в той-то и той-то конторе (в хорошем смысле этого слова), пишут такой-то и такой-то классный софт (да ещё и с нуля) и что там работают только люди с немерянным опытом, способные с закрытыми глазами печатать килобайты хорошо спроектированных классов и т.д. и т.п.. Ну что ж. Рад если такое бывает :) Однако, пока у нас не начнут готовить соответствующих специалистов в профильных учебных заведениях, такие story будут единичными исключениями подтверждающими правило. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2006, 17:44:01 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUsДумаю никто не станет спорить, что именно так и обстоят дела в проектах занимающихся поддержкой или развитием существующих программных систем, и что таких проектов - большинство. Это слишком обширный класс задач, чтобы загонять его в столь узкие рамки, имхо. По моему опыту, "направление решения" и "вид результата" прежде всего определяется тем, кто именно решает задачу, и уже во вторую очередь - тем, какая именно задача решается. NotGonnaGetUsОпять же, каков процент "студентов" среди общего числа разработчиков и какие "куски проектирования" им можно давать? :) Это непростой вопрос. У многих "студентов" присутствует неподтвержденно высокое мнение о своих возможностях, соответственно желание взять большой кусок задачи...... некоторые таки его неплохо делают :) Я бы сказал - в первую очередь давать "не очень важный кусок". Большой, если нужно, но такой, чтобы из-за его отсутствия или необходимости переделки не пострадали другие задачи. Ну а дальше - вопрос не столько в том, "какие куски давать", сколько "насколько плотно и тщательно при этом контролировать". NotGonnaGetUsПредлагаю так же, не делать тождества между "наследованием" и "проектированием". Безусловно, не следует. Я в данном случае употребил проектирование исключительно как стадию, в ходе которой возникает желание отнаследовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2006, 18:03:46 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
softwarerПо моему опыту, "направление решения" и "вид результата" прежде всего определяется тем, кто именно решает задачу, и уже во вторую очередь - тем, какая именно задача решается. Т.е. с оценкой 90% на 10% вы категорически не согласны? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2006, 18:10:06 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUsТ.е. с оценкой 90% на 10% вы категорически не согласны? :) Я полагаю, что дисперсия этой оценки делает ее бессмысленной. Грубо говоря, есть люди, у которых будет 100/0, а есть люди, у которых будет 60/40. Для одних и тех же задач. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2006, 18:23:19 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
softwarerЯ полагаю, что дисперсия этой оценки делает ее бессмысленной. Грубо говоря, есть люди, у которых будет 100/0, а есть люди, у которых будет 60/40. Для одних и тех же задач. Мы опять о несколько разном говорим. Я считают программистов, которые решают задачи с применением очень ограниченных техник наследования и программистов, которым этих техник недостаточно, по причине сложности решаемых задач. Примем в первом приближении, что глядя на задачу можно объективно оценить к какому из двух классов она принадлежит и что программисты решают каждую из этих задач надлежащим образом (не суют наследование туда, куда не нужно и используют там - где нужно). Моё имхо, что отношение получится 90/10, из чего я делаю вывод, что среди людей обсуждающих наследование, и в особенности МН, преобладают люди не имевшие возможности на практике проверить истинность своих теорий. Вы предлагаете посмотреть на то, как одни и теже задачи решают разные программисты и делаете вывод, что количество наследование в результате зависит в некоторой степени от программиста, а не задач. Соглашусь, что это действительно так. Но этот факт был мною ингорирован в первом приближении (см.выше), т.к. мне кажется очень вероятным значительное пересечение множества программистов склонных к более частому использованию наследования с множеством программистов решающих задачи действительно требующих применение наследования :) Естественно серьёзно относиться к конкретным цифрам нельзя, т.к. для этого не собрано никакой сколько-нибудь объективной статистики. Тем не менее, порядок величин - 90/10, 80/20 - выглядит достаточно похожим на правду... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2006, 19:22:47 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUsПримем в первом приближении, что глядя на задачу можно объективно оценить к какому из двух классов она принадлежит Именно это приближение я не готов принять. Точнее, я безусловно способен "объективно оценить" со своей колокольни, но абсолютно уверен в том, что при статистически значимой выборке оценивающих мы получим прорву других объективных оценок. При этом поставить эксперимент "чьи оценки в итоге окажутся точнее" весьма затруднительно. Мало того, я полагаю, что тут есть определенная вариативность, и там, где для себя я выбрал бы вариант А, другому человеку я сам бы сказал: знаешь.... делай лучше Б. NotGonnaGetUsМоё имхо, что отношение получится 90/10, из чего я делаю вывод, что среди людей обсуждающих наследование, и в особенности МН, преобладают люди не имевшие возможности на практике проверить истинность своих теорий. Я существенно более оптимистичен. По нескольким причинам, из которых в первую очередь назову следующую: даже того, что Вы отнесли к 90%, на самом деле хватает, чтобы сделать многие верные выводы. Не обязательно учиться на собственных ошибках. NotGonnaGetUsт.к. мне кажется очень вероятным значительное пересечение множества программистов склонных к более частому использованию наследования с множеством программистов решающих задачи действительно требующих применение наследования :) Помимо прочего, я уверен в существовании широкого класса пограничных задач, то есть тех, для которых нельзя выбрать однозначно лучший вариант решения. Однозначно лучший - в смысле "компетентные эксперты единодушно выскажутся за этот вариант". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2006, 21:59:55 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
Что вы тут спорите? Ваще не понимаю. Надо б вначале научить людей мыслить в терминах ООП... без МН. а не кодить процедурно. грязно плююсь от текущего колупания в лапше из if'ов и switch'ей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2006, 11:33:49 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
TimmНадо б вначале научить людей мыслить в терминах ООП... без МН. а не кодить процедурно. Для начала хорошо бы понимать, что ООП - это синтаксис, ничего нового в мышление оно не вносит. Ровно как break - удобный синтаксис записи частного случая goto, так и допустим виртуальный метод - удобный синтаксис записи частного случая указателя на функцию. Человек либо умеет выбирать адекватное решение - и выбирает его безотносительно ООП - либо не умеет, и получаем - Timmгрязно плююсь от текущего колупания в лапше из if'ов и switch'ей Именно что. Лапшу можно делать из ASSIGNABLE GOTO (была такая прелестная форма этого оператора), можно из ифоф и свитчей (я как-то на спор написал фрагмент программного кода в стиле "классическое спагетти", пользуюясь только и исключительно "структурными" if и while), ну а последние лет десять я периодически ругаюсь словами "объектно-ориентированное спагетти". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2006, 11:48:35 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
softwarer NotGonnaGetUsПримем в первом приближении, что глядя на задачу можно объективно оценить к какому из двух классов она принадлежит Именно это приближение я не готов принять. Ок. Ваше имхо построенное на личном опыте против аналогичного моего :) softwarer По нескольким причинам, из которых в первую очередь назову следующую: даже того, что Вы отнесли к 90%, на самом деле хватает, чтобы сделать многие верные выводы. Ну да. Этого хватает, чтобы корректно решаеть многие задачи, но не хватает, чтобы осмысленно рассуждать о наследовании самом по себе и множественном наследовании в частности. Вспоминаю топик на другом форуме. Человек утверждал, что наследовать можно что угодно и от чего угодно (например, человека от руки или геометрическую фигуру от точки). При этом ссылки на LSP и т.п. он бодро игнорировал, заявляя, что раз он и никто из его сослуживцев не в курсе данного приниципа, то принимать его во внимание не стоит. softwarer Не обязательно учиться на собственных ошибках. Я бы перефразировал: обязательно нужно учиться на чужих ошибках. Т.е. нужно читать, нужно общаться с коллегами, нужно искать интересные решения в существующем коде. Однако какова массовая доля программистов активно идущих этим путём? :) Или, как пишет Марконелл: "спросите себя - сколько книг по программированию вы прочитали на последние полгода?". softwarerОднозначно лучший - в смысле "компетентные эксперты единодушно выскажутся за этот вариант". А другие компетентные эксперты скажут: "да ну ваше неповоротливое и тяжёловесное ООП в баню. Эрланг рулит" :) И будут в общем-то правы по своему. Но это уже оффтопик :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2006, 11:52:52 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
softwarer[quot Timm]Надо б вначале научить людей мыслить в терминах ООП... без МН. а не кодить процедурно. Для начала хорошо бы понимать, что ООП - это синтаксис, ничего нового в мышление оно не вносит. [quot] ээ. не согласен. категорически. ООП - это не синтаксис. Синтаксис - это язык, в терминах которого человек выражает объедко-ориентированные мысли. о как :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2006, 11:54:57 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
TimmСинтаксис - это язык, в терминах которого человек выражает объедко-ориентированные мысли. о как :) Как называть эти мысли - вопрос имхо десятый. Мне трудно называть "объектно-ориентированными" мысли, которые появились и были известны в семидесятых годах. Главное - понимать то, что есть мысли [сами по себе], есть форма их записи на конкретном языке. К сожалению, большинство авторов книг смешивает эти понятия, создавая разруху в головах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2006, 12:07:26 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
Timm[quot softwarer]ООП - это не синтаксис. Синтаксис - это язык, в терминах которого человек выражает объедко-ориентированные мысли. о как :) В отношнении мыслей ООП - это все-таки синтаксис. Если попытаться провести аналогию с шаблоном MVC, то мысли - это M и C, а объектно-ориентированные мысли - это V. Хотя кто-то со мной может не согласиться. А вообще, я к тому, что все сравнения нужно проводить в пределах одного словаря с набором аксиом, и определения понятиям давать тоже в пределах этого словаря. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2006, 03:48:49 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
Читал, читал решил тоже свою лепту скромну внести. 1. МН - нельзя сказать, что это однозначно плохо (в принципе, ни о чем так сказать нельзя), но все таки я его буду стараться избегать или реализовывать через интерфейсы. Включения его в Java не хочу (хотя кто меня спросит). 2. ООП. Новая идеология или нет. Вирт считает, что нет. В одном из интервью он сказал, что-то вроде того почти Вирт Меня удивляет, когда про инкапсуляцию узнают только при начале работы с ООП. Так, нам в ВУЗе давали эти понятия без использования принципов ООП. Хотя я к тому времени уже знал о нем и видел, что ООП позволяет их очень легко использовать (за что низкий поклон Сульповару из ЛЭТИ). С другой стороны, я все-таки думаю, что думать на ООП можно. Тут получается другой стиль мышления, чем при линейном (так оно называется?) программирование. По крайне мере когда я писал курсовики своим одногруппникам, мне переходилось переключаться на другой стиль мышления (Я практически сразу стал писать с помощью объектов. Кстати, писал на Дельфи, а про объекты узнал из книги на Java. И еще потом лет 6 писал(пишу) на Дельфи). Ну а на счет программистов, которые используют проектирование или нет. Кому что в жизни надо, тот это от жизни и берет. Вряд ли системному программисту, которые пишет встроенное ПО нужно ООП. Они вообще стараются на C писать (по крайне мере у нас, и про Nokia мне так говорили). С другой стороны, если человек хочет стать архитектором - он будет задумываться над архитектурой и искать разные решения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2006, 12:33:41 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
softwarerДля начала хорошо бы понимать, что ООП - это синтаксис, ничего нового в мышление оно не вносит. Атец, знаешь, с таким пониманием вопроса тебе не программистом надо быть, а артиллеристом. ООП - это не синтаксис и к синтаксису относится так же как к целлюлиту, т.е. ортогонально. В ОО стиле можно на асме писать и на лиспе, это МЕТОДОЛОГИЯ программирования, а никак уж не синтаксис. Методология, способствующая применению принципа "разделяй и властвуй", способствующая еще больше, чем структурное и процедурное программирование. С ООП идет рука об руку ООД. Объектно-ориентированный дизайн программ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2006, 12:45:16 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
LeonidvС другой стороны, я все-таки думаю, что думать на ООП можно. Тут получается другой стиль мышления, чем при линейном (так оно называется?) программирование. Нет. Линейное программирование - это ну совсем другая тема, к "программированию в нашем смысле" относящаяся опосредованно: http://www.dvo.ru/studio/linpro/lp1st/node3.html "Думать на ООП" в каком-то смысле можно, только это уже как минимум называется ООД. Да и то... впрочем, обсуждая эту тему, неизбежно упремся в понимание терминов? LeonidvПо крайне мере когда я писал курсовики своим одногруппникам, мне переходилось переключаться на другой стиль мышления Ээ... зачем? Не понял, Вы писали себе объектно, а им - нет? Leonidv(Я практически сразу стал писать с помощью объектов. Кстати, писал на Дельфи, а про объекты узнал из книги на Java. И еще потом лет 6 писал(пишу) на Дельфи). Увы, классическая история из серии "учил дельфу по плохой книге". Мне в этом плане повезло, поскольку про объекты я узнал лет за восемь до появления явы. LeonidvНу а на счет программистов, которые используют проектирование или нет. Кому что в жизни надо, тот это от жизни и берет. Вряд ли системному программисту, которые пишет встроенное ПО нужно ООП. Они вообще стараются на C писать Хм. Подумайте еще раз: если ООП - это способ мышления, какая разница, на чем писать? Те идеи, которые ассимилировало ООП, как раз и привели к появлению Паскаля, Си, Ады; собственно, ООП по большому счету выросло из обобщения опыта работы на этих языках. Эти идеи отлично реализуются на ассемблере, на любом интерпретаторе, сугубые проблемы будут лишь на старых компиляторах типа Fortran IV или PL/I. То, что Вы говорите, как раз служит иллюстрацией к "путанице между идеями и синтаксисом", о которой я говорил чуть раньше. Признаться, меня всегда коробит, когда встроенное ПО относят к системному программированию, но это отдельный вопрос. Встроенное ПО бывает достаточно разным, и в нем наверняка можно назвать задачи, в которых ООП вполне применимо, хотя безусловно в большинстве случаев подход "узко и прямо". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2006, 13:27:38 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
softwarer Нет. Линейное программирование - это ну совсем другая тема, к "программированию в нашем смысле" относящаяся опосредованно: http://www.dvo.ru/studio/linpro/lp1st/node3.html Мне так на одном собеседование сказали. О ЛП я даже курсовик в Wolfram Mathematica делал, уже забыл :( softwarer LeonidvПо крайне мере когда я писал курсовики своим одногруппникам, мне переходилось переключаться на другой стиль мышления Ээ... зачем? Не понял, Вы писали себе объектно, а им - нет? Да. Именно так. И меня это немного напрягало вначале. softwarer Увы, классическая история из серии "учил дельфу по плохой книге". Не совсем понял, причем тут конкретный язык и ООП. Но вообще так же как сейчас Java я дельфи не изучал. А книжки у меня хорошие, вроде Марок Канту (?) и "Профессиональное использование D3" - сборник, страниц на 1000. Только это книги не по ООП, а по Delphi. Книги по ООП - это GoF, Фаулер и другие. softwarer Мне в этом плане повезло, поскольку про объекты я узнал лет за восемь до появления явы. Я в это время еще не родился, в 1983 году. softwarer LeonidvНу а на счет программистов, которые используют проектирование или нет. Кому что в жизни надо, тот это от жизни и берет. Вряд ли системному программисту, которые пишет встроенное ПО нужно ООП. Они вообще стараются на C писать Хм. Подумайте еще раз: если ООП - это способ мышления, какая разница, на чем писать? Разница все таки есть, потому как удобнее. Когда передо мной встает задача, я начинаю классы в голове рисовать и их взаимодействие - вот это и подразумеваю "думать на ООП". А уж как их реализовать - дело десятое. Вот мне говорят "матрица" - у меня сразу в голове класс представляется и его контракт. Ну и тому подобное. А все-таки раскройте, что такое системное программирование? Интересно узнать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2006, 14:27:53 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
LeonidvНе совсем понял, причем тут конкретный язык и ООП. Ну вот. Для кого Blazkowicz о properties и hashtable вспоминал? :) Конкретный язык, конкретно влияет на то "ООП", которое в нём используется. Leonidv Когда передо мной встает задача, я начинаю классы в голове рисовать и их взаимодействие - вот это и подразумеваю "думать на ООП". А уж как их реализовать - дело десятое. Вот мне говорят "матрица" - у меня сразу в голове класс представляется и его контракт. Ну и тому подобное. Вспоминается фраза из утреннего шоу бачинского и стилавина: - Ему в голову звёздый десант лезет! :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2006, 14:44:18 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUs Ну вот. Для кого Blazkowicz о properties и hashtable вспоминал? :) Ну вы же не хотите сказать, что использование наследования вместо композиции там, где ему не место, в Java есть плохо, а в Delphi есть хорошо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2006, 14:52:57 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
Leonidv NotGonnaGetUs Ну вот. Для кого Blazkowicz о properties и hashtable вспоминал? :) Ну вы же не хотите сказать, что использование наследования вместо композиции там, где ему не место, в Java есть плохо, а в Delphi есть хорошо? Я хочу сказать, что использование наследование в данном случае для C++ будет хорошо, а для java плохо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2006, 14:54:49 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
Я не большой специалист по этим вопросам (пока), но мне кажется - что это везде плохо. Как на Java, так на C++, так и на Delphi. По крайне мере когда Блох объясняет это в своей книги, он говорит "вот так делать не надо", а не "на Java так делать не надо". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2006, 14:59:22 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
LeonidvЯ не большой специалист по этим вопросам (пока), но мне кажется - что это везде плохо. Как на Java, так на C++, так и на Delphi. По крайне мере когда Блох объясняет это в своей книги, он говорит "вот так делать не надо", а не "на Java так делать не надо". На Блоха теперь нужно молиться? Он написал одну маленьку книжечку, где на пальцах показал некоторые особенности реализации java библиотек из-за чего стал популярен. При этом он поливал дерьмом всё, что писал не он сам, и хвалил собственные творения (коллекции java2). Возвращаясь в properties. Если бы вы внимательно читали о чём писалось выше, вы бы увидели и слова софтварера и мои, где объявняется почему в java это плохое решение. Ещё раз: в java нет закрытого наследования, т.е. нельзя отнаследоваться и скрыть от публики часть методов родителя. Поэтому приходится изобретать делегирование. Это всё следствия особенностей оо-нотации принятой в java и к ООП имеет мало отношения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2006, 15:11:31 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
А что такое скрытое наследование? Я так понимаю, что если A наследуется от B, то везде где нужен B можно подставить A. Если я правильно понял, то скрытое наследование это правило нарушает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2006, 16:19:05 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
поддерживаю вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2006, 16:27:45 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
и вообще, пользуйте private, а то понимаешь развели семейственность в лучших традициях мафиози - ты мой старший сын, тебе рулить песочницей, а ты сын моего сына, нехрена тебе песочницей рулить :) Для особо рьяных: это была шутка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2006, 16:30:59 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
АСУ ТПшникДля особо рьяных: это была шутка. Специфический птушный юмор? Leonidv А что такое скрытое наследование? Мне повторить абзац из предыдущего сообщения? Остановись на секундочку и подумай: если ты не знаешь, что бывает скрытое наследование, не в курсе того, как могут разрешаться "конфликты" при МН, то как ты можешь говорить о том, что ООП существует вне контекста языка программирования и более того, что ты думаешь именно в его терминах?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2006, 16:48:48 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
Повторите. А лучше все-таки разъясните, что происходит в описанном мною случае? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2006, 17:00:49 |
|
||
|
Множественное наследование
|
|||
|---|---|---|---|
|
#18+
LeonidvПовторите. А лучше все-таки разъясните, что происходит в описанном мною случае? Не вижу "описанного" вами случая. Вижу только не способность пользоваться гуглом. http://www.gotw.ca/publications/mill06.htm There is one additional feature we can get using nonpublic inheritance, and it's the only one that doesn't model IS-IMPLEMENTED-IN-TERMS-OF: We need "controlled polymorphism" LSP IS-A, but in certain code only. Public inheritance should always model IS-A as per the Liskov Substitution Principle (LSP).[3] Nonpublic inheritance can express a restricted form of IS-A, even though most people identify IS-A with public inheritance alone. Given class Derived : private Base, from the point of view of outside code, a Derived object IS-NOT-A Base, and so of course can't be used polymorphically as a Base because of the access restrictions imposed by private inheritance. However, inside Derived's own member functions and friends only, a Derived object can indeed be used polymorphically as a Base (you can supply a pointer or reference to a Derived object where a Base object is expected), because members and friends have the necessary access. If instead of private inheritance you use protected inheritance, then the IS-A relationship is additionally visible to further-derived classes, which means subclasses can also make use of the polymorphism. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2006, 19:32:12 |
|
||
|
|

start [/forum/topic.php?all=1&fid=59&tid=2147692]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
170ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
154ms |
get tp. blocked users: |
1ms |
| others: | 199ms |
| total: | 564ms |

| 0 / 0 |
