powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Множественное наследование
127 сообщений из 127, показаны все 6 страниц
Множественное наследование
    #34068758
LINUXER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с детства учили что множественное наследование - плохо.
жуткие проблемы ромба...
Так и не знаю в чём они заключаются и почему в Java отказались от МН.
Концептуально, вроде, МН весьма полезно, в чём же сложности??
...
Рейтинг: 0 / 0
Множественное наследование
    #34068795
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно унаследовать несколько методов с одинаковой сигнатурой и разной реализацией - возникает коллизия.
...
Рейтинг: 0 / 0
Множественное наследование
    #34068837
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В множественном наследовании нет полезности.
Никакой.
...
Рейтинг: 0 / 0
Множественное наследование
    #34069068
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
он жеВ множественном наследовании нет полезности.
Никакой.

Это ерунда.

Просто в множественном наследовании, кроме полезности есть и дополнительная сложность, для грамотного управления которой требуется квалификация (прежде всего для того, чтобы понять, что наследованием пользоваться не нужно :)).
Как показывает практика, высокая квалификация не является нормой среди программистов, поэтому в языках нацеленых на массовое использование (java/c#) множественного наследования нет.
Ещё одной причиной отказа от множественного наследования является усложнение вычислительной модели языка. Чем эта модель проще, тем легче выполнять оптимизации при компиляции (в том числе и в JIT-компиляторах).
...
Рейтинг: 0 / 0
Множественное наследование
    #34069165
wnoise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2NotGonnaGetUs : прошу прощения, а не подскажете, какая именно полезность от множественного наследования?
...
Рейтинг: 0 / 0
Множественное наследование
    #34069209
chro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для грамотного управления нужна не квалификация, а просто лишний пересматривать все методы у parent классов, которых используешь. Я полагаю, что в множественном наследовании нет практической полезности.
Кроме того, представьте, пишите Вы важное приложение, наследуете пару классов, вызывает метод, который встречается в двух местах с одной сигнатурой, и Вами вызывается не то, что Вы думали,а первый попавшийся такой метод (как в Питоне, без сообщения об ошибке). В безопасных языках это никак нельзя позволять.
...
Рейтинг: 0 / 0
Множественное наследование
    #34069451
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думаю с опасностями множественного наследования мы уже разобрались и поняли почему его нет в Java.
Теперь давайте разберемся с пользой множественного наследования и как его все таки можно получить в Java если очень захочется:

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


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

Код: plaintext
1.
2.
3.
4.
5.
 class  Child  extends  Parent1{
    class  SubChild  extends  Parent2{
      //здесь можно обращаться к полям и методам, унаследованым от Parent1 и Parent2
   }
}
...
Рейтинг: 0 / 0
Множественное наследование
    #34069473
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО это одна из священных войн.

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 остается предметом горячих споров. По нашему опыту, множественное наследование - как парашют: как правило, он не нужен, но, когда вдруг он понадобится, будет жаль, если его не окажется под рукой.
...
Рейтинг: 0 / 0
Множественное наследование
    #34069531
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LINUXERс детства учили что множественное наследование - плохо.
Постучите учителям по голове железной палкой. Может поумнеют.

Крики про плохость множественного наследования доходчиво переведены на русский дедушкой Крыловым в басне, если не ошибаюсь, "Лиса и Виноград".

LINUXERжуткие проблемы ромба...
Ромб - это не проблемы, это счастье.

LINUXERТак и не знаю в чём они заключаются и почему в Java отказались от МН.
В первую очередь, хорошо сделать множественное наследование - сложно. Действительно сложно. В яве не слишком-то хорошо справились и с более простыми вопросами.

Во вторую очередь, множественное наследование требует большей квалификации от разработчика, как и любая сложная концепция.
...
Рейтинг: 0 / 0
Множественное наследование
    #34069561
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis Popov Гради Буч. Объектно-ориентированный анализ и проектированиеПо нашему опыту, множественное наследование - как парашют: как правило, он не нужен, но, когда вдруг он понадобится, будет жаль, если его не окажется под рукой.

Имхо, сказано хорошо и точно.
...
Рейтинг: 0 / 0
Множественное наследование
    #34069639
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer LINUXERс детства учили что множественное наследование - плохо.
Постучите учителям по голове железной палкой. Может поумнеют.
Читайте классику кун-фу . Учителя в данном случае очень правы. Потому что ученику все равно не понять почему это не так уж и плохо. А так - повод для размышлений.
...
Рейтинг: 0 / 0
Множественное наследование
    #34069708
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov
польза, заключается в том что можно в наследнике получить методы сразу нескольких родителей. Это иногда необходимо.

Приведите пример, когда это необходимо. Пожалуйста :)
Я постараюсь предложить вам другую - более простую модель, без множественного наследования.
...
Рейтинг: 0 / 0
Множественное наследование
    #34069764
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
он же
Приведите пример, когда это необходимо. Пожалуйста :)

- ясно, же написано иногда :)
...
Рейтинг: 0 / 0
Множественное наследование
    #34069812
OU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OU
Гость
авторМножественное наследование прямо поддерживается в языках C++ и CLOS, а также, до некоторой степени, в Smalltalk.
multiple inheritance в SmallTalk всетаки нет, была эксперементальная попытка добавить multiple inheritance в одну из версий SmallTalk-80, но она оказалась неэффективной и невостребованой.
автормножественное наследование - как парашют: как правило, он не нужен, но, когда вдруг он понадобится, будет жаль, если его не окажется под рукой.
насчет парашюта согласен, насчет multiple inheritance нет. multiple inheritance это все таки плохо чем хорошо, а достижение эффекта multiple inheritance через использование interface всетаки достаточно эффективный, безопасный и элегантный подход.
...
Рейтинг: 0 / 0
Множественное наследование
    #34069842
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OUдостижение эффекта multiple inheritance через использование interface всетаки достаточно эффективный, безопасный и элегантный подход.
- использование интерфейсов не является альтернативой множественному наследованию, сходство только визуальное - можно через запятую несколько интерфейсов перечислить. Вы не правильно понимаете роль и предназначение интерфейсов.
...
Рейтинг: 0 / 0
Множественное наследование
    #34069864
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
он жеПриведите пример, когда это необходимо.
Некорректная постановка вопроса. Сродни: приведите пример задачи, когда необходимо ООП (то есть без ООП она нерешаема).

он жеЯ постараюсь предложить вам другую - более простую модель, без множественного наследования.
Если переходим к количественному сравнению - "другую, более простую модель" хорошо показывает AWT/Swing.

Впрочем, мне будет любопытно услышать более простую модель для следующей структуры:

Код: plaintext
1.
2.
3.
4.
 class  RadioControl  extends  AbstractButton
 class  Button  extends  AbstractButton
 class  MenuItem  extends  AbstractButton
 class  RadioButton  extends  Button, RadioControl
 class  RadioMenuItem  extends  MenuItem, RadioControl

Критические условия:

отсутствие копирования кода между RadioButton и RadioMenuItem

отсутствие "базового класса, который умеет все".
...
Рейтинг: 0 / 0
Множественное наследование
    #34069877
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
//Без мн
 interface  I1 {
       void  foo1();
}

 class  Impl1  implements  I1 {
       public   void  foo1(){ ... };
}
 class  C1  extends ...  implements  I1 {
       private  I1 impl1 =  new  Impl1();
       public   void  foo1(){ impl1.foo1(); };
}
 class  C2  extends ...  implements  I1 {
       private  I1 impl1 =  new  Impl1();
       public   void  foo1(){ impl1.foo1(); };
}

//С мн
 class  I1 {
       void  foo1(){ ... };
}

 class  C1  extends  I1, ... {
}
 class  C2  extends  I1, ... {
}

Удобство МН в данном случае очевидно. На этой почве появились легковесные и ограниченные варианты МН именуемые traits, mixins, которые предоставляют в распоряжение разработчика полезную метафору и при этом лишины недостатков традиционно приписываемых МН.


Другая тема - моделирование "естественных" объектов или сложных математических структур данных.
Одно из обещаний ООП - простота повторного использования.
Однако реальная разработка классов для повторного использования упирается в ряд проблем.

Одна из них заключена в том, что классы могут представлять только проекцию понятий из предметной области на текущие потребности, а не сами эти понятия, без чего повторное использование не возможно (т.е возможно только в рамках ЗАРАНЕЕ сформулированной задачи/класса задач из данной предметной области).

Так происходит потому, что классификация понятий (в особенности естественных, таких как стол, машина и т.п.) не ограничивается только вариантом предложенным ещё аристотелем (когда принадлежность объекта к тому или иному классу определяется наличием или отсутствием у объекта определённых свойств) и успешно реализованным в оо-нотации статически типизированных языков. (Подчеркну: речь идёт только о лингвистических абстрациях заложенных в ОО языке, поскольку из того, что отсутствующую абстракцию можно _смоделировать_ не следует (а скорее следует обратное), что её можно будет продуктивно использовать (достаточно посмотреть как выглядит моделирование ООП в голом С или функции высших порядков в ОО языках)).

Хотя МН не решает проблемы отображения понятий предметной области средствами языка программирования (лучше сразу идти копать DSL и метапрограммирование), возможность его использование упрощает отображение отдельных видов понятий, .

За иллюстрациями можно обратиться к главам посвящённым наследованию в книге Бертрана Мейера "Объектно-ориентированное конструирование программных систем ". Там разбирается каким образом МН можно использовать для представления различных классификаций одних и тех же объектов и ряд других интересных вопросов :)
...
Рейтинг: 0 / 0
Множественное наследование
    #34069887
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OUа достижение эффекта multiple inheritance через использование interface
Не достигает эффекта и приводит к тупому копированию кода в каждый класс, реализующий эти интерфейсы. Отчасти может быть решено выделением отдельного класса-менеджера, собирающего этот общий код, с простановкой в оконечные классы транзитных вызовов менеджера (некрасиво, но лучше). Несколько лучше это решается в дельфе, где есть понятие делегирования интерфейса, но и там мягко говоря неидеально.
...
Рейтинг: 0 / 0
Множественное наследование
    #34069908
bmv_rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chroДля грамотного управления нужна не квалификация, а просто лишний пересматривать все методы у parent классов, которых используешь. Я полагаю, что в множественном наследовании нет практической полезности.
Кроме того, представьте, пишите Вы важное приложение, наследуете пару классов, вызывает метод, который встречается в двух местах с одной сигнатурой, и Вами вызывается не то, что Вы думали,а первый попавшийся такой метод (как в Питоне, без сообщения об ошибке). В безопасных языках это никак нельзя позволять.

Это работа компилятора выдавать ошибку при такой ситуации. Либо ввести в язык момент явного указания от какого предка вызывается функция.

А множественное наследование в природе сплош и рядом (мы же с вами от мамы И папы произошли а не от АбстастракХьюмена :) ).

Хотя вроде бы и одним наследованием более менее все моменты в прошрамирование разрешаются. Вообщем на вкус и цвет как грится:)
...
Рейтинг: 0 / 0
Множественное наследование
    #34069910
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chroДля грамотного управления нужна не квалификация, а просто лишний пересматривать все методы у parent классов, которых используешь.
Тоже самое можно сказать об одиночном наследовании.


chro
Я полагаю, что в множественном наследовании нет практической полезности.
Кроме того, представьте, пишите Вы важное приложение ... В безопасных языках это никак нельзя позволять.

То что в скриптовом языке вызывается неизвестно что, не является поводом считать, что множественное наследование нельзя реализовать так, чтобы не возникало вопросов когда-какой метод будет вызван.
...
Рейтинг: 0 / 0
Множественное наследование
    #34069969
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bmv_rusА множественное наследование в природе сплош и рядом (мы же с вами от мамы И папы произошли а не от АбстастракХьюмена :) ).

Вот так, слово заслово, bmv_rus стал своим собственным папой, а заодно и мамой :)

Нет в природе никакого наследования. Особенно множественного. Всё у нас в голове. И не всегда то, что в ней находится, соответствует тому, что хотелось бы там иметь :)
...
Рейтинг: 0 / 0
Множественное наследование
    #34069982
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Впрочем, мне будет любопытно услышать более простую модель для следующей структуры:

Код: plaintext
1.
2.
3.
4.
 class  RadioControl  extends  AbstractButton
 class  Button  extends  AbstractButton
 class  MenuItem  extends  AbstractButton
 class  RadioButton  extends  Button, RadioControl
 class  RadioMenuItem  extends  MenuItem, RadioControl

Критические условия:

отсутствие копирования кода между RadioButton и RadioMenuItem

отсутствие "базового класса, который умеет все".


Давайте посмотрим на структуру JRadioButton и JRadioButtonMenuItem?
Я, к сожалению, со Swing'ом и GUI в целом в Java не работал - расскажите мне, это объекты работают правильно?
Структура иная
JRadioButton <- JToggleButton <- AbstractButton
JRadioButtonMenuItem <- JMenuItem <- AbstractButton
...
Рейтинг: 0 / 0
Множественное наследование
    #34070035
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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;
}

Таким образом, нельзя сказать, что ты был унаследован от папы и мамы. Ты был зачат мамой и папой.
...
Рейтинг: 0 / 0
Множественное наследование
    #34070132
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Причем на сцену всплывает интерфейс


а потом
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)



Мда, что-то меня понесло
...
Рейтинг: 0 / 0
Множественное наследование
    #34070258
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
он жеЯ, к сожалению, со Swing'ом и GUI в целом в Java не работал
Я, к сожалению, работал.

он жеСтруктура иная
JRadioButton <- JToggleButton <- AbstractButton
JRadioButtonMenuItem <- JMenuItem <- AbstractButton
В этой структуре:

1. Есть очевидное копирование кода между JRadioButton и JRadioMenuItem
2. Отсутствует возможность унифицированно работать с JRadioButton и JRadioMenuItem.
...
Рейтинг: 0 / 0
Множественное наследование
    #34070382
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
В этой структуре:

1. Есть очевидное копирование кода между JRadioButton и JRadioMenuItem
2. Отсутствует возможность унифицированно работать с JRadioButton и JRadioMenuItem.

А есть необходимость в том, чтобы RadioMenuItem можно быть сопоставить JRadioButton?

Почему бы не


MenuRadioButton <-RadioButton <- AbstractButton

MenuRadioItem (item = RadioButton) <- AbstractMenuItem (private AbstractButton item)
...
Рейтинг: 0 / 0
Множественное наследование
    #34070399
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если хочется с чем-то унифицировано работать (например, установка чекбокса одновременно выставляет и в RadioButton, и в MenuRadioItem) - нужно делать по аналогии с Event'ами в Delphi.
...
Рейтинг: 0 / 0
Множественное наследование
    #34070427
LINUXER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalovможно унаследовать несколько методов с одинаковой сигнатурой и разной реализацией - возникает коллизия.
В интерфейсах также - заимплементишь два интерфейса с одноимёнными полями - всё слетит.
...
Рейтинг: 0 / 0
Множественное наследование
    #34070445
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
он жеА есть необходимость в том, чтобы RadioMenuItem можно быть сопоставить JRadioButton?
Безусловно. Скажем, я делал систему, в которой функциональные действия описывались классом, допустим, Action, а на уровне настроек интерфейса указывалось, будет ли это RadioAction группой пунктов меню, группой кнопок в тулбаре, еще чем-нибудь. И имхо вполне естественно желание работать со всеми вариантами через единый интерфейс, без кучи case-ов и приведений типов.

он жеMenuRadioButton <-RadioButton <- AbstractButton

MenuRadioItem (item = RadioButton) <- AbstractMenuItem (private AbstractButton item)
В этой схеме у нас получается:

1. Несовместимые Button и MenuItem
2. Куча тупого кода в AbstractMenuItem, публикующего методы AbstractButton
3. Дополнительный код с приведениями типов в MenuRadioItem
...
Рейтинг: 0 / 0
Множественное наследование
    #34070476
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
он жеЕсли хочется с чем-то унифицировано работать (например, установка чекбокса одновременно выставляет и в RadioButton, и в MenuRadioItem) - нужно делать по аналогии с Event'ами в Delphi.
Во-первых, в Delphi нет никаких Event-ов.

Во-вторых, Action-ы в дельфе - вещь безусловно правильная, но дело не в этом. Дельфа тоже не свободна от недостатков single inheritance. В яве пошли по пути дробления на достаточно мелкие функциональные классы; это в принципе правильно, но в условия single inheritance порождает уйму неудобств. Такую библиотеку можно сделать достаточно удобной для использования, но ценой этого будет серьезная дополнительная трудоемкость при ее реализации, в том числе тупое копирование кода. В дельфе пошли по другому пути, то, что я назвал "базовый класс, который умеет все". Это упрощает жизнь, но само по себе не очень-то правильно, поэтому этот путь прошли наполовину; скажем, свойство Caption у Button и MenuItem общее, а вот свойства Checked таки независимы.

В принципе, как я уже говорил выше, за счет делегирования интерфейсов в дельфе можно обходиться без множественного наследования легче, чем в других языках. Но все равно я бы предпочел нормальное множественное наследование.
...
Рейтинг: 0 / 0
Множественное наследование
    #34070609
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot softwarer
Впрочем, мне будет любопытно услышать более простую модель для следующей структуры:

Код: plaintext
1.
2.
3.
4.
 class  RadioControl  extends  AbstractButton
 class  Button  extends  AbstractButton
 class  MenuItem  extends  AbstractButton
 class  RadioButton  extends  Button, RadioControl
 class  RadioMenuItem  extends  MenuItem, RadioControl
[/quot]

На практике такой подход порождает уродцев на вроде java.util.Properties. На лицо подмена делигирования наследованием. Смысл в чем:
RadioControl - компонента радио, её можно поместить на панель.
class RadioMenuItem extends RadioControl, следовательно она тоже должна иметь способность помещатся на панель.
Помещаем RadioMenuItem на панель, и рантайм обрыгивается с NPE , потому что RadioMenuItem требует меню! А его у нас и нет. При разумном подходе, мы конечно же обрыгаемся ещё в compiletime. Но это ничего не меняет.
RadioMenuItem не есть RadioControl, соответсвенно RadioMenuItem нельзя наследовать от RadioControl!

Про RadioButton вообще молчу. Придумайте пример понатуральнее.
...
Рейтинг: 0 / 0
Множественное наследование
    #34070647
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczНа практике такой подход порождает уродцев на вроде java.util.Properties.
Признаться, плохо помню этого уродца, бо использовал единственный раз.

BlazkowiczНа лицо подмена делигирования наследованием.
Может быть и так. К сожалению, с адекватными средствами делегирования в современных языках негусто.

BlazkowiczRadioControl - компонента радио, её можно поместить на панель.
Ошибаетесь. Я не зря обозвал класс так обще. Это "некий радиоконтрол вообще", без какой-либо специфики. Может быть правильнее было бы назвать AbstractRadioControl, но в Java Abstract-классы имеют чуть другой смысл.

Blazkowiczclass RadioMenuItem extends RadioControl, следовательно она тоже должна иметь способность помещатся на панель.
Вывод соответственно неверный.

BlazkowiczПро RadioButton вообще молчу. Придумайте пример понатуральнее.
Ну... как хотите. Если Вы ими не пользуетесь - безусловно, ненатуральные.
...
Рейтинг: 0 / 0
Множественное наследование
    #34070689
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer BlazkowiczНа практике такой подход порождает уродцев на вроде java.util.Properties.
Признаться, плохо помню этого уродца, бо использовал единственный раз.

Там методы Hashtable торчат на ружу, чего по логике быть не должно.

softwarer
BlazkowiczНа лицо подмена делигирования наследованием.
Может быть и так. К сожалению, с адекватными средствами делегирования в современных языках негусто.

Не понял.

softwarer BlazkowiczRadioControl - компонента радио, её можно поместить на панель.
Ошибаетесь. Я не зря обозвал класс так обще. Это "некий радиоконтрол вообще", без какой-либо специфики. Может быть правильнее было бы назвать AbstractRadioControl, но в Java Abstract-классы имеют чуть другой смысл.

Ааа, теперь понятно

softwarer BlazkowiczПро RadioButton вообще молчу. Придумайте пример понатуральнее.
Ну... как хотите. Если Вы ими не пользуетесь - безусловно, ненатуральные.
Так тут смысл в том что в любой "ограниченой" системе множественное наследование можно применять сколько душе угодно. Проблемы начнутся когда эту систему нужно будет расширить. Тут-то м-наследование и станет поперек колес.
...
Рейтинг: 0 / 0
Множественное наследование
    #34070805
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczТам методы Hashtable торчат на ружу, чего по логике быть не должно.
Тут скорее вопрос отсутствия приватного наследования.

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

BlazkowiczТак тут смысл в том что в любой "ограниченой" системе множественное наследование можно применять сколько душе угодно. Проблемы начнутся когда эту систему нужно будет расширить. Тут-то м-наследование и станет поперек колес.
Скажу так: я не вижу причин считать это утверждение более верным, нежели строго противоположное, и в топике вроде бы не звучало аргументов в эту сторону.
...
Рейтинг: 0 / 0
Множественное наследование
    #34071255
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot BlazkowiczТак тут смысл в том что в любой "ограниченой" системе множественное наследование можно применять сколько душе угодно. Проблемы начнутся когда эту систему нужно будет расширить. Тут-то м-наследование и станет поперек колес.[/quot]

Причём тут множественное наследование?

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

Если обратиться к вопросу наследования, то можно выделить порядка 12 типовых случаев, когда может применяться наследования: от различных классификаций объектов (наследование интерфейса) до самого хардкорного конструирования классов (наследование реализации).

Не во всех языках имеются механизмы для обеспечения всех возможных типов наследования.

Н-р, в java наследование реализованно в таком виде, что наследование properties от hashtable является дуростью.
В то время, как истинная дурость заключается в использовании делегирования для решения этой задачи, поскольку создаётся два объекта вместо одного (привет gc и оверхед на вложенные вызовы).

Так же как генерики позволяют не писать типизированые варианты коллекций (оставив это удовольствие компилятору), так же в языке с хорошо проработанным механизмом МН не приходится дублировать один и тот же код в объектах определяемых разными наборами однообразных характеристик (в java это вотчина интерфейсов).

"Правильное" наследование как минимум включает:
- множественно наследование
- разрешение "конфликтов" с перекрытием методов по выбору программиста
(н-р, что делать если в разных родителях есть методы с одинаковой сигнатурой?
- выбрать один из них (какой?)
- сохранить оба изменив их имена
- сделать один из них private
- переопределить один из-них (какой?)
и т.д. Выбор должен делать не язык, а программист в зависимости от конкретной ситуации)
- закрытое наследование
- генерики
- ковариантность
- переименование методов в наследниках
...
Рейтинг: 0 / 0
Множественное наследование
    #34071270
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
правильный ответ уже дан - множественное наследование не нужно. А неправильных можно давать сколько угодно. Никакая это не священная война, но достают некоторые с претензией "Почему Java это не C++". Ну и пользуйтесь своим С++ и не приставайте с глупостями. И не надо про "высокую квалификацию" программистов на С++". Я сам долго программировал на C++ (ввиду отсутствия выбора), и с тех пор как перешёл на Java, моя квалификация повысилась (поизучал новые технологии, доступные программистам на Java).
Кстати, по моим наблюдениям, большинство программирующих на С++ - дураки, невежды, демократы и психи. Чтобы не быть голословным - один на прямо рабочем месте плевался (фирма Галактика). Я так и не понял, что он хотел этим выразить. Он же, каждый день программируя на VC6, года через 2 после появления VС7, спросил меня, чем оно отличается от VC7. И это не самый тяжёлый случай.
...
Рейтинг: 0 / 0
Множественное наследование
    #34071314
OU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OU
Гость
2 Kachalov:
автор- использование интерфейсов не является альтернативой множественному наследованию, сходство только визуальное - можно через запятую несколько интерфейсов перечислить. Вы не правильно понимаете роль и предназначение интерфейсов.
чего-чего? быстро, обратно к учебникам и будет вам счастье

2 LINUXER:
авторВ интерфейсах также - заимплементишь два интерфейса с одноимёнными полями - всё слетит.
глупость, ничего не слетит
...
Рейтинг: 0 / 0
Множественное наследование
    #34071371
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OUбыстро, обратно к учебникам и будет вам счастье
- думаете интерфейсы нужны именно для "кривого" множественного наледования? Боюсь Вы набрались этого из тех самых "учебников". Наверняка в своем коде Вы интерфейсов не используете (только готовые) - я прав?
...
Рейтинг: 0 / 0
Множественное наследование
    #34071396
АСУ ТПшник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что бы не говорили, но древовидная структура самая понятная (как тока ее придумают). Удобна она как для кодировщика, так и для обслуживающего ее в дальнейшем персонала.
...
Рейтинг: 0 / 0
Множественное наследование
    #34071398
OU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OU
Гость
вот weak form of multiple inheritance (AKA mixin interfaces) на основе интерфейсов.

2 softwarer:
ну и где здесь порожденная вашим больным воображением дубликация кода?

2 Kachalov:
вы все еще хотите продолжать свой глупый спор о невозможности использования interfaces для эмуляции multiple inheritance?

авторБоюсь Вы набрались этого из тех самых "учебников"
ага, вам бы читать те учебники что я читал
...
Рейтинг: 0 / 0
Множественное наследование
    #34071431
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OUвы все еще хотите продолжать свой глупый спор о невозможности использования interfaces для эмуляции multiple inheritance?
- Вы так и не поняли, что речь идет не о том, чтобы с помощью интерфейсов эмулировать множественное наследование о чем уже высказались в предыдущих топиках (Вы своей схемой лишний раз подвердили что получается это необычайно криво). Мне хотелось отметить что Вы пытаетесь использовать интерфейсы не по назначению. У многих авторов (видимо пытающихся перенести опыт программирования C++ на Java) можно встретить тезис о том что интерфейсы в Java предназначены для обхода отсутствия множественного наследования. Зачем разработчикам языка сначала лишать его множественного наследования, а потом через Ж. его обходить интерфейсами? Вдумайтесь в само слово "интерфейс", оцените красоту идеи, и не используйте их ни для чего иного кроме приведения типов. А если Вам необходима функциональность нескольких классов родителей применяйте вложенные классы.
...
Рейтинг: 0 / 0
Множественное наследование
    #34071448
OU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OU
Гость
автор- Вы так и не поняли, что речь идет не о том, чтобы с помощью интерфейсов эмулировать множественное наследование о чем уже высказались в предыдущих топиках (Вы своей схемой лишний раз подвердили что получается это необычайно криво).
чего то вы уважаемый из пальца все высасываете, речь изначально шла о возможности/невозможности имплементации multiple inheritance в java. Ваша оригинальная реплика была о том что интерфейсы это не альтернатива multiple inheritance. Я вам привел конкретный пример, что еще надо то?
авторМне хотелось отметить что Вы пытаетесь использовать интерфейсы не по назначению. У многих авторов (видимо пытающихся перенести опыт программирования C++ на Java) можно встретить тезис о том что интерфейсы в Java предназначены для обхода отсутствия множественного наследования.
А кто и где говорил о том что интерфейсы нужны исключительно для эмуляции multiple inheritance? Если видели, приведите пример, если нет, то нечего изобретать тогда.
авторВдумайтесь в само слово "интерфейс", оцените красоту идеи, и не используйте их ни для чего иного кроме приведения типов. А если Вам необходима функциональность нескольких классов родителей применяйте вложенные классы.
вы разберитесь с понятием наследования и полиморфизма, потому как предлагаемый вами пример будет работать только там где предполагается определенный тип или его сабклассы. В то время как использование наследованных интерфейсов позволяет использовать их вместо базовых при этом сами интерфейсы могут быть имплентированы любыми классами. Это в том числе о красоте идеи...

В остальном присоеденяюсь к мнению Partisan M
...
Рейтинг: 0 / 0
Множественное наследование
    #34071597
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 OU
Kachalov OUдостижение эффекта multiple inheritance через использование interface всетаки достаточно эффективный, безопасный и элегантный подход.
- использование интерфейсов не является альтернативой множественному наследованию, сходство только визуальное - можно через запятую несколько интерфейсов перечислить. Вы не правильно понимаете роль и предназначение интерфейсов.
- не хочется собачится, возможно я резковато высказался, - приношу свои извинения за тон, но мне не кажется что для реализации множественного наследования (вопрос нужно ли множественное наследование предлагаю не трогать вообще, так это личное дело каждого программиста, мне например, не нужно) надо (заметьте не можно, а надо) использовать интерфейсы. Т. к. использование интерфейсов приводит в данной задаче к громозкому коду (не элегантному, не эффективному), в частности в приведенной OU схеме мы видим 3 класса и 3 интерфейса (хотя Child лишний), итого 5-6 файлов - это что элегантный и эффективный код? По безопасности тоже може проехаться - из Вашей схемы не очевидна реализация методов наследника, т. е. не факт, что методы наследника имеющие ту же сигнатуру, что и методы родителей, имеют то же тело, иначе говоря есть хороший повод накосячить. Более того в Вашем случае они точно будут иметь другое тело и лишь имитировать функционал родителей, т. е. возможно от тупого переписывания методов Вы избавились, но это множественным наследованием не назовешь. Прежде чем городить такой код желательно выяснить зачем Вам множественное наследование (МН)? Если МН Вам необходимо для получения функциональности нескольких родителей, мне кажется, заметно проще использовать вложеные классы (этот тезис Вы упорно игнорируете). Случай когда Ваша схема необходима - случай приведения типов, где наследник должен приводиться к типам нескольких родителей, а если разобраться по существу: класс Softwarer и SoftwarersMother реализуют один и тот же интерфейс Mother, но при этом Softwares никак не связан с SoftwarersMother, т. е. SoftwarersMother не является родителем для Softwarer, аналогично с веткой Father. Если избавится от шелухи Ваша диаграма выглядит так:
...
Рейтинг: 0 / 0
Множественное наследование
    #34071671
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OU2 softwarer:
ну и где здесь порожденная вашим больным воображением дубликация кода?
Попробуйте вылечить свои больные глаза и обращаясь ко мне, говорить о том, о чем говорил я.
...
Рейтинг: 0 / 0
Множественное наследование
    #34071672
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KachalovВдумайтесь в само слово "интерфейс", оцените красоту идеи
Может быть, я не понимаю красоту идеи. Для меня интерфейс - это pure abstract класс, не более того. Соответственно, частный случай более общего решения.
...
Рейтинг: 0 / 0
Множественное наследование
    #34071688
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerинтерфейс - это pure abstract класс, не более того. Соответственно, частный случай более общего решения.
- формально Вы правы, но роль интерфейса при написании кода существенно отличается от роли абстрактного класса. Абстрактный класс, грубо говоря, представляет собой "полуфабрикат", заготовку довести "до ума" которую должен программист при реализации конкретной задачи, а интерфейс выполняет роль "спецификации" гарантирующей что в реализующем ее классе будет необходимый набор методов.

Что бы меня потом не тыкали носом в книжки сразу скажу, что это мое личное мнение на использование абстрактных классов и интерфейсов, возникающее из собственного опыта. Мнение которое никому не навязываю.
...
Рейтинг: 0 / 0
Множественное наследование
    #34071787
OU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OU
Гость
2 kachalov:
авторЕсли МН Вам необходимо для получения функциональности нескольких родителей, мне кажется, заметно проще использовать вложеные классы (этот тезис Вы упорно игнорируете).
еще раз повторю, вы не понимаете таких вещей как наследование и полиморфизм.

На пальцах, множественное наследование:
Класс С наследован от А и В. Соответсвенно класс С может быть использован вместо класса А или В.

Имитация множественного наследования с помощью интерфейсов:
Интерфейс С наследован от интерфейсов А и В. Соответственно интерфейс С и его имплементации могут быть использованы вместо интерфейса А или В.

***Вместо интерфейса С можно использовать класс который будет имплементировать интерфейсы А и В, но в таком случае каждый раз когда вы захотите получить класс который можно использовать вместо А или В вы должны будете либо постоянно дублировать имплементацию двух интерфейсов (т.е в каждом случае писать class X implements A, implements B ) либо наследовать от класса С (это менее полиморфично по сравнению с возможностью использования любого класса имплементирующего данный интерфейс).

Вариант предложеный вами, который основан либо на Decorator либо на Adaptor design patterns (это я понимаю то что вы имеете в виду под использованием вложенных классов)

Класс С наследуется от А или Б и инкапсулирует экземпляры классов А и В. В данном случае класс С может быть использован только ВМЕСТО А ИЛИ В (т.е своего супер класса), но никак ни ОБОИХ . Так что множественным наследованием здесь и не пахнет.

2 softwarer:
авторНе достигает эффекта и приводит к тупому копированию кода в каждый класс, реализующий эти интерфейсы.
провал памяти?
...
Рейтинг: 0 / 0
Множественное наследование
    #34071800
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalovно роль интерфейса при написании кода существенно отличается от роли абстрактного класса.
Не соглашусь. Мне кажется, сказанное Вами - поверхностное видение, но если копнуть, оказывается что оба названных предназначения на самом деле одно и тоже.

KachalovАбстрактный класс, грубо говоря, представляет собой "полуфабрикат", заготовку
Прежде всего, давайте оговорим различие между abstract class и pure abstract class. Первый - действительно полуфабрикат; второй - скорее сырье, или как Вы назвали, заготовка.

Далее. Ваша точка зрения, как мне представляется, неявно ориентируется на концепцию single inheritance - абстрактный класс для Вас это нечто, от чего Вы наследуетесь, а интерфейс - то, что реализуете. То есть разница, о которой Вы говорите, опирается на ограничения языка. Если взять инструмент с multiple inheritance, разница сводится до технической, более того, необнаруживаемой.

Как пример этого - однажды мне потребовался интерфейс некоей модели. Давайте его условно опишем так (будем надеяться, я еще не забыл синтаксис явы):

Код: plaintext
1.
2.
3.
4.
 public   interface  MyModel {
   int  getCount();
  Object getObject ( int  index);
  Icon getIcon ( int  index);
}

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

Код: plaintext
1.
2.
3.
Icon getIcon ( int  index) {
  Object o = getObject (index);
   return  (o  instanceof  Iconifiable) ? ((Iconifiable) o).getIcon() :  null ;
}

Но от такой потребности "интерфейс" ничуть не становится "полуфабрикатом" - согласны?

Итого, мое мнение: "интерфейс" - это один из вариантов применения классов. Фактически разница такова: если классу А по смыслу необходимо наследоваться от класса Б, то это "родительский класс"; если класс А легко может реализовать требования класса Б, но и без него ничего особого не потеряет, то это "интерфейс".

Итого, получаем, что интерфейсы в явовском смысле - это вырожденный случай abstract class, тот самый pure abstract class.

Для полноты картины - я иногда пользовался еще и вырожденными интерфейсами, то есть интерфейсами, не содержащими методов. Фактически этот интерфейс использовался просто как логический признак на соответствующем объекте, скажем, интерфейс ThreadedAction показывал, что Action может и должен запускаться в отдельном потоке.
...
Рейтинг: 0 / 0
Множественное наследование
    #34071802
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OU2 softwarer:
авторНе достигает эффекта и приводит к тупому копированию кода в каждый класс, реализующий эти интерфейсы.
провал памяти?
Ничуть. Ваше выборочное цитирование меня не смущает и не обязывает; вылечите свои больные глаза, прочитайте то, что написано чуть выше, чем выхваченная Вами строка и покажите не один маленький пример, в который мне даже лень смотреть - может и в нем есть это тупое копирование - а полноценную библиотеку.
...
Рейтинг: 0 / 0
Множественное наследование
    #34071806
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, есть в этой модели совершенно dumb код - методы Softwarer.getChromosomeX() и Softwarer.getChromosomeY().
...
Рейтинг: 0 / 0
Множественное наследование
    #34071834
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Sofwarer

в приведенном примере если требуется дефолтная реализация метода, Вам нужен не интерфейс а абстрактный класс, причем не полностью абстрактный, т. е. "заготовка"="полуфабрикат". Интерфейс никак не может быть "полуфабрикатом" - не передергивайте мои слова.


формально интерфейс представляет предельный случай абстрактного класса, но практически это не так. На практике области применения интерфейсов и абстрактных классов различаются. Интерфейс представляет собой "спецификацию"
класса, необходимую для приведения типов и гарантирующую наличие требуемых методов (java.lang.Runnable) или сигнализирующую что класс удовлетворяет некоторым требованиям (java.io.Serializable), а абстрактный класс представляет собой частичную реализацию - "полуфабрикат", на основе которого легко построить что то новое опираясь на чужой код.


с точки зрения програмирования на Java случай полностью абстрактного класса представляется бессмыслицей не имеющей практического значения. Кстати Вы реально используете полностью абстракные классы?
...
Рейтинг: 0 / 0
Множественное наследование
    #34071854
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 OU
- Вы не видите сути проблемы. Прежде чем опонировать, ответьте на вопрос: "зачем программисту может понадобиться множественное наследование?"

На мой взгляд есть два случая когда это может быть нужным:

1. наследование функциональности нескольких родителей.

2. приведение типа к типу любого из родителей.

- Вы упорно убеждаете меня в необходимости пункта 2, я согласен с Вашими тезисами по этому пункту и не вижу смысла спорить, тем более в таком тоне. Поверьте, что с наследованием и полиморфизмом в Java я познакомился 9 лет назад из которых 5 лет провел в статусе SCJ2P. Не надо предлагать мне Ваши чудесные книжицы - не куплю. А под "вложенными классами", в данном случае, я понимаю вложенные классы (inner-классы и, с некоторыми ограничениями, nested-классы, являющиеся элементами синтаксиса языка Java начиная с Java 2). Причем тут шаблоны проектирования Decorator и Adapter я не понимаю.
...
Рейтинг: 0 / 0
Множественное наследование
    #34071910
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov в приведенном примере если требуется дефолтная реализация метода, Вам нужен не интерфейс а абстрактный класс, причем не полностью абстрактный
Я как раз и пытаюсь показать, что граница между этими понятиями надумана. Представьте себе следующую последовательность событий: изначально я реализовал интерфейс с методами getCount и getObject; это интерфейс, не так ли? Затем я добавляю в него getIcon - при этом интерфейс остается интерфейсом - понимаю, что для него была бы удобна дефолтовая реализация - и только из-за этого вроде_бы_концептуальное_понятие "интерфейс" вдруг меняется на нечто другое. Так выходит при Вашем строгом понимании "интерфейса".

KachalovИнтерфейс никак не может быть "полуфабрикатом" - не передергивайте мои слова.
Я нисколько не пытаюсь передернуть Ваши слова (собственно, я даже не понимаю, как мне можно приписать такую попытку - для этого нужно, чтобы я сослался на Ваше утверждение, чего вроде бы не было). Я апеллирую к Вашему здравому смыслу.

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

KachalovИнтерфейс представляет собой "спецификацию" класса, необходимую для приведения типов и гарантирующую наличие требуемых методов (java.lang.Runnable) или сигнализирующую что класс удовлетворяет некоторым требованиям (java.io.Serializable), а абстрактный класс представляет собой частичную реализацию - "полуфабрикат", на основе которого легко построить что то новое опираясь на чужой код.
По большому счету (с точностью до формулировок) я с этим согласен. Вопрос не в конкретном синтаксисе, а в предназначении, в применении того или иного класса-интерфейса. Обратите внимание, здесь нет принципиального требования отсутствия реализации в интерфейсе; от того, что мы добавим реализацию getIcon в пример выше, применение MyModel как "спецификации, необходимой для приведения типов и гарантирующей наличие" ничуть не убудет. Собственно, применение останется ровно таким же.

Kachalov с точки зрения програмирования на Java случай полностью абстрактного класса представляется бессмыслицей не имеющей практического значения.
Безусловно. По той причине, что в этом случае разумнее объявить этот абстрактный класс интерфейсом и не связывать себя ограничениями единонаследия.

Kachalov Кстати Вы реально используете полностью абстракные классы?
Каждый раз, когда использую интерфейсы :) Если не считать этого, сходу вспоминаю единственный случай, класс TAbstractStep - это "шаг тестирования" в моем автотестере.
...
Рейтинг: 0 / 0
Множественное наследование
    #34071925
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Kachalov Кстати Вы реально используете полностью абстракные классы?
Каждый раз, когда использую интерфейсы :)
- кстати, разница между интерфейсом и классом у которого все методы абстрактные, с точки зрения Java, более существенна. Любой класс является наследником от java.lang.Object, т. е. в отличие от интерфейса обладает рядом не абстрактных методов.
softwarerЯ как раз и пытаюсь показать, что граница между этими понятиями надумана.
- а я пытаюсь доказать обратное :) Когда Вы создаете интерфейс Вы создаете "спецификацию", когда Вы создаете абстрактный класс Вы делаете "запас на будущее". Мне кажется что разница между "консервами" и "стандартом на консервы" довольно велика (извините за идиотские аналогии, но они, на мой взгляд, хорошо отражают идею).
...
Рейтинг: 0 / 0
Множественное наследование
    #34071939
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov- кстати, разница между интерфейсом и классом у которого все методы абстрактные, с точки зрения Java, более существенна. Любой класс является наследником от java.lang.Object
Если помнить об этом, то "полностью абстрактных классов" в Java, как впрочем и в Delphi, вообще не бывает - поскольку методы, унаследованные от Object/TObject, вполне себе конкретные. Но я полагаю, это малосущественная деталь.

Kachalov- а я пытаюсь доказать обратное :)
Вот и определились :)

Теперь следующий шаг - методология доказательства. Я полагаю истинным следующее утверждение: два объекта имеют принципиальное, качественное отличие, тогда и только тогда, когда один из них нельзя мелкими, неконцептуальными изменениями перевести в другой. Если можно - разница между ними количественная, непринципиальная.

Таким образом, если вспомнить пример с MyModel и рассмотреть его предполагая наличие в языке множественного наследования, дискуссия упирается в следующий вопрос: добавление реализации getIcon - принципиальное изменение или нет?

В принципе, это вопрос вкусов. Я полагаю, что непринципиальное, почему: потому что на самом деле это мелкая техническая деталь, удобная, но не более того; от нее ничего особенного не зависит, в архитектуре решения она просто не видна. Она есть - мы можем написать несколько классов чуть быстрее и чуть качественнее; ее нет - придется скопировать несколько строк кода. Но в том, что касается принципиальных вещей - например, организации взаимодействия объектов в приложении - разницы ровным счетом никакой.

KachalovКогда Вы создаете интерфейс Вы создаете "спецификацию", когда Вы создаете абстрактный класс Вы делаете "запас на будущее". Мне кажется что разница между "консервами" и "стандартом на консервы" довольно велика (извините за идиотские аналогии, но они, на мой взгляд, хорошо отражают идею).
Я нисколько не против аналогий, сам их активно использую. Данная конкретная представляется мне не совсем верной, не совсем удобной для рассуждений, но не более того (она безусловно образна и хорошо раскрывает Вашу мысль).

Если Вы не против, давайте проведем маленький натурный эксперимент. Я показываю кусок кода, а Вы скажите, это "консервы" или "стандарт на консервы", и почему именно:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 type 
  TAbstractStep =  class 
   protected 
     function  GetStepName :  string  ; virtual ; abstract ;
     function  DoStep (  var  Message :  string  ) : boolean ; virtual ; abstract ;
   public 
     class   procedure  Execute (  const  ACallback : ITestingCallback ) ;
   end  ;

P.S. Мне действительно интересно, появится ли на этом сайте когда-нибудь качественная подсветка синтаксиса, или нет.
...
Рейтинг: 0 / 0
Множественное наследование
    #34071998
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Я полагаю истинным следующее утверждение: два объекта имеют принципиальное, качественное отличие, тогда и только тогда, когда один из них нельзя мелкими, неконцептуальными изменениями перевести в другой. Если можно - разница между ними количественная, непринципиальная.

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

- извините, но если можно, примерчик на Java, на объектном паскале я писал более 10 лет назад и плохо помню синтаксис, а главное не помню есть ли в нем такое понятие как интерфейсы? Кроме того обсуждение Java-интерфейсов на примере другого языка заведет нас в неведомые дебри :)
...
Рейтинг: 0 / 0
Множественное наследование
    #34072054
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KachalovКроме того обсуждение Java-интерфейсов на примере другого языка заведет нас в неведомые дебри :)
Хм. Я до сих пор полагал, что мы обсуждаем концепцию вообще, а не применительно к Яве. Имхо обсуждать множественное наследование "применительно к Яве" глупо, его здесь просто нет.

Kachalov- из интерфейса класс точно не сделаешь
Why?

Kachalovа разница все таки принципиальная.
Где? Если в Java - безусловно. Но представьте язык, где есть множественное наследование; какая принципиальная разница там?

Kachalov- извините, но если можно, примерчик на Java
Хм. Попробую; проблема в том, что я уже успел подзабыть синтаксис Явы. Будет примерно так:

Код: plaintext
1.
2.
3.
4.
 class  TAbstractStep {
   protected   abstract  String GetStepName(); 
   protected   abstract   boolean  DoStep(/* тут должен быть out-параметр Message, но если не ошибаюсь, Ява так не умеет */);
   public   static   void  Execute(ITestingCallback ACallback);
}

Kachalov а главное не помню есть ли в нем такое понятие как интерфейсы?
Есть.
...
Рейтинг: 0 / 0
Множественное наследование
    #34072057
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Код: plaintext
1.
2.
3.
4.
 class  TAbstractStep {
   protected   abstract  String GetStepName(); 
   protected   abstract   boolean  DoStep(/* тут должен быть out-параметр Message, но если не ошибаюсь, Ява так не умеет */);
   public   static   void  Execute(ITestingCallback ACallback);
}

Не буду мешать :)
Скажу лишь, что в Java все параметры передаются по ссылке (за исключением J2EE-бинов, в которых по-умолчанию всё передается по значению).
...
Рейтинг: 0 / 0
Множественное наследование
    #34072061
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
он жеСкажу лишь, что в Java все параметры передаются по ссылке
В смысле, как в Фортране? Странно, если я успел это забыть. Хотя наверное бывает.
...
Рейтинг: 0 / 0
Множественное наследование
    #34072064
я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
я
Гость
он же softwarer
Код: plaintext
1.
2.
3.
4.
 class  TAbstractStep {
   protected   abstract  String GetStepName(); 
   protected   abstract   boolean  DoStep(/* тут должен быть out-параметр Message, но если не ошибаюсь, Ява так не умеет */);
   public   static   void  Execute(ITestingCallback ACallback);
}

Не буду мешать :)
Скажу лишь, что в Java все параметры передаются по ссылке (за исключением J2EE-бинов, в которых по-умолчанию всё передается по значению).
чушь. фсе передается по значению. другое дело, что передаёца.
...
Рейтинг: 0 / 0
Множественное наследование
    #34072067
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
В смысле, как в Фортране? Странно, если я успел это забыть. Хотя наверное бывает.
Вот уж не знаю, как в Фортране.

Передаются по ссылке все кроме примитивных типов (т.е. все объекты), только о String разговор особый - хоть и объект, но неизменяемый и в out его значение не возвращается :)
Это я забыл уточнить. А то будут еще обвинять меня в безграмотности и незнании основ, тут такие :(
...
Рейтинг: 0 / 0
Множественное наследование
    #34072068
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я
чушь. фсе передается по значению. другое дело, что передаёца.
Фсё - это что?
И где?
...
Рейтинг: 0 / 0
Множественное наследование
    #34072074
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
он жеВот уж не знаю, как в Фортране.
Именно что все передается по ссылке. С этим связан классический прикол - можно было сделать примерно так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
....
call sub1 (  5  ) 
call sub2 (  5  ) 

......
subroutine sub1 ( integer* 4  i ) -- совсем не помню, как описываются параметры
  i =  10  
  return 
end 

и в результате в вызов sub2 параметром передавалась десятка.

он жеПередаются по ссылке все кроме примитивных типов
Ээ, нет. То, что Вы говорите - это передача по значению. Просто для "непримитивных" типов значением является ссылка.
...
Рейтинг: 0 / 0
Множественное наследование
    #34072078
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Ээ, нет. То, что Вы говорите - это передача по значению. Просто для "непримитивных" типов значением является ссылка.
Не хочу спорить.
Вопрос лишь с какой точки зрения рассматривать.
Лично мне привычнее считать, что если я могу изменять переданный объект внутри функции и он изменится снаружи - значит мне передана ссылка на объекте. А если я могу менять его до умопомрачения, но снаружи этого не заметят - значит я получил полную копию объкта (т.е. значение).
...
Рейтинг: 0 / 0
Множественное наследование
    #34072080
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Передана ссылка" - весьма условное понятие в Java, естественно.
Просто нужно ж как-то не сойти с ума
...
Рейтинг: 0 / 0
Множественное наследование
    #34072088
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
он жеЛично мне привычнее считать, что
Я понимаю. Вопрос в том, к каким последствиям это приводит.

Если смотреть на ситуацию "как она есть", то достаточно трех концепций: двух общих - "объект есть указатель на объект" и "манипуляции со String приводят к появлению нового String-объекта" - и одной с параметрами - "параметры передаются по значению". Этого достаточно, чтобы понимать все возможные ситуации.

У Вас же получилось так, что Вы описали три правила только для параметров:

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

Две общих концепции по-прежнему необходимо помнить, итого пять, да еще помнить, что вторая-третья из частных концепций верны условно. Усложнение на пустом месте.
...
Рейтинг: 0 / 0
Множественное наследование
    #34072096
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
он жеПросто нужно ж как-то не сойти с ума
Есть довольно известная и толковая по сути статья . Так вот, выход из этой ситуации - не путаться в сказках, а разбираться в сути. Если угодно, это сишный подход, но он единственно правильный, если не хочется периодически оказываться в ситуации "у меня происходит что-то, что я и понять не могу".
...
Рейтинг: 0 / 0
Множественное наследование
    #34072112
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Есть довольно известная и толковая по сути статья .
Спасибо.
Интересная статья (в очередной раз благодарен переводчикам вроде тех что на википедии - из-за их безобразий я непрерывно совершенствую свой английский ).
...
Рейтинг: 0 / 0
Множественное наследование
    #34072113
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правда мне пока не приходилось сталкивать с необходимостью деабстрагирования.
Но ведь рано или поздно придется, наверное...
...
Рейтинг: 0 / 0
Множественное наследование
    #34072117
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerЕсли угодно, это сишный подход, но он единственно правильный, если не хочется периодически оказываться в ситуации "у меня происходит что-то, что я и понять не могу".
Ну, хм, бывает :)
...
Рейтинг: 0 / 0
Множественное наследование
    #34072132
Фотография А.Грасоff™
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chroвызывается не то, что Вы думали, а первый попавшийся такой метод (как в Питоне, без сообщения об ошибке).
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
class Sampla:
  def __init__(self):
    pass 

  def maMethod(self, maValue):
    self.maValue = maValue

  def maMethod(self, maValue):
    self.maValue = maValue *  2 

s = Sampla()
s.maMethod( 2 )
print s.maValue # wazup
Что будет в sysout'e после выполнения строки, помеченной wazup'ом?
...
Рейтинг: 0 / 0
Множественное наследование
    #34072135
Фотография А.Грасоff™
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LINUXER Kachalovможно унаследовать несколько методов с одинаковой сигнатурой и разной реализацией - возникает коллизия.
В интерфейсах также - заимплементишь два интерфейса с одноимёнными полями - всё слетит.А какие у интерфейсов поля?
...
Рейтинг: 0 / 0
Множественное наследование
    #34072138
Фотография А.Грасоff™
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Partisan Mправильный ответ уже дан - множественное наследование не нужно. А неправильных можно давать сколько угодно. Никакая это не священная война, но достают некоторые с претензией "Почему Java это не C++". Ну и пользуйтесь своим С++ и не приставайте с глупостями. И не надо про "высокую квалификацию" программистов на С++". Я сам долго программировал на C++ (ввиду отсутствия выбора), и с тех пор как перешёл на Java, моя квалификация повысилась (поизучал новые технологии, доступные программистам на Java).
Кстати, по моим наблюдениям, большинство программирующих на С++ - дураки, невежды, демократы и психи. Чтобы не быть голословным - один на прямо рабочем месте плевался (фирма Галактика). Я так и не понял, что он хотел этим выразить. Он же, каждый день программируя на VC6, года через 2 после появления VС7, спросил меня, чем оно отличается от VC7. И это не самый тяжёлый случай.
О! Первый осмысленный (кроме заглавного) пост в этом топике. Да и заглавный пост тоже глуповат - он порождает обсуждение того, чего нет (имеется в виду java).
...
Рейтинг: 0 / 0
Множественное наследование
    #34072140
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А.Грасоff™
О! Первый осмысленный (кроме заглавного) пост в этом топике. Да и заглавный пост тоже глуповат - он порождает обсуждение того, чего нет (имеется в виду java).
Это потому что "большинство программирующих на С++ - дураки, невежды, демократы и психи"?
...
Рейтинг: 0 / 0
Множественное наследование
    #34072154
Фотография А.Грасоff™
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
он же А.Грасоff™
О! Первый осмысленный (кроме заглавного) пост в этом топике. Да и заглавный пост тоже глуповат - он порождает обсуждение того, чего нет (имеется в виду java).
Это потому что "большинство программирующих на С++ - дураки, невежды, демократы и психи"? Нет. Это потому, что "... обсуждение того, чего нет ...".
...
Рейтинг: 0 / 0
Множественное наследование
    #34072186
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тоже согласен с Партизаном. Добавить нечего.
...
Рейтинг: 0 / 0
Множественное наследование
    #34072262
LINUXER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А.Грасоff™ LINUXER Kachalovможно унаследовать несколько методов с одинаковой сигнатурой и разной реализацией - возникает коллизия.
В интерфейсах также - заимплементишь два интерфейса с одноимёнными полями - всё слетит.А какие у интерфейсов поля?
Я имел в виду свойства. На самом деле с ними всё как надо.(ошибся
...
Рейтинг: 0 / 0
Множественное наследование
    #34072276
LINUXER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А.Грасоff™ Partisan Mправильный ответ уже дан - множественное наследование не нужно. А неправильных можно давать сколько угодно. Никакая это не священная война, но достают некоторые с претензией "Почему Java это не C++". Ну и пользуйтесь своим С++ и не приставайте с глупостями. И не надо про "высокую квалификацию" программистов на С++". Я сам долго программировал на C++ (ввиду отсутствия выбора), и с тех пор как перешёл на Java, моя квалификация повысилась (поизучал новые технологии, доступные программистам на Java).
Кстати, по моим наблюдениям, большинство программирующих на С++ - дураки, невежды, демократы и психи. Чтобы не быть голословным - один на прямо рабочем месте плевался (фирма Галактика). Я так и не понял, что он хотел этим выразить. Он же, каждый день программируя на VC6, года через 2 после появления VС7, спросил меня, чем оно отличается от VC7. И это не самый тяжёлый случай.
О! Первый осмысленный (кроме заглавного) пост в этом топике. Да и заглавный пост тоже глуповат - он порождает обсуждение того, чего нет (имеется в виду java).
Такой ответ обычно слышно на реплики типа Цпп - круто а остальное - г**
А ещё более осмысленно можно сказать "правильный ответ уже дан(sun) - В JAVA нет множественного наследования"(трудно не согласиться)
Обсудить я хотел действия в ситуации, когда нужно:
Kachalov1. наследование функциональности нескольких родителей.
2. приведение типа к типу любого из родителей.
и как и почему это делать не нужно (по принцыпу кун-фу)
...
Рейтинг: 0 / 0
Множественное наследование
    #34072277
LINUXER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Остаюсь при мнении что МН нужно
Видны варианты:
Использовать композицию для наследования реализации и интерфейсов для приведения типов
Использовать вложенные классы для наследования реализации//преобразовывать тогда видимо будет сложновато
И то и другое выглядит сложно, но видимо реализовать МН в Java ещё сложней.
...
Рейтинг: 0 / 0
Множественное наследование
    #34072326
Matzumoto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Наисилил тему начиная где-то со второй страницы, вы друг дружку то понимаете? Впечатление, что каждый говорит о своем, о наболевшем, а не обсуждают нечто вместе. Была попытка привести пример, но и ту забраковали. Так может сначала договоритесь и создадите пример, где это МН нужно и начнете на примере этого примера обсуждать реализации и преимущества МН перед интерфейсами? А то публике, вас читающей, ни бельмеса непонятно.

И такое впечатление, что правы те, кто защищает жабу и принцип "МН вредно и ненужно, что доказано неоднократно". У защитников же МН так и нет удачного примера, доказывающего, что без МН ГОРАЗДО хуже, чем с использованием его.

И кстати, большие листинги выкладывать в тэге SRC - очень портит страницу и расширяет ее за всякие границы. Лучше откройте на nm.ru маленький хостинг и выкладывайте или отформатированный в html код, или зазипованные исходники, а ссылки на них кидайте в тему. Понятно, да? Ну или уж на mytempdir.com, рапидшару, хотя нет, на рапидшару не надо, очень трудно оттуда что-то взять, сидя за NAT с одим ip на тыщу пользователей. (Такие провайдеры у нас чтоб им пусто было)
...
Рейтинг: 0 / 0
Множественное наследование
    #34072335
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MatzumotoНаисилил тему начиная где-то со второй страницы, вы друг дружку то понимаете? Впечатление, что каждый говорит о своем, о наболевшем, а не обсуждают нечто вместе. Была попытка привести пример, но и ту забраковали. Так может сначала договоритесь и создадите пример, где это МН нужно и начнете на примере этого примера обсуждать реализации и преимущества МН перед интерфейсами? А то публике, вас читающей, ни бельмеса непонятно.

И такое впечатление, что правы те, кто защищает жабу и принцип "МН вредно и ненужно, что доказано неоднократно". У защитников же МН так и нет удачного примера, доказывающего, что без МН ГОРАЗДО хуже, чем с использованием его.

И кстати, большие листинги выкладывать в тэге SRC - очень портит страницу и расширяет ее за всякие границы. Лучше откройте на nm.ru маленький хостинг и выкладывайте или отформатированный в html код, или зазипованные исходники, а ссылки на них кидайте в тему. Понятно, да? Ну или уж на mytempdir.com, рапидшару, хотя нет, на рапидшару не надо, очень трудно оттуда что-то взять, сидя за NAT с одим ip на тыщу пользователей. (Такие провайдеры у нас чтоб им пусто было)
Никто не будет выкладывать специально отформатированный код. Или зазипованные исходники. И на рапидшару никто выкладывать ничего не будет.

Почему?
Потому что не нравится - не читайте. Или купите нормальный монитор
...
Рейтинг: 0 / 0
Множественное наследование
    #34072343
Matzumoto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
он жеНикто не будет выкладывать специально отформатированный код. Или зазипованные исходники. И на рапидшару никто выкладывать ничего не будет.
Нормальные люди кстати выкладывают и на рапидшару и зазипованные, потому что хотят, чтобы их поняли. Поищите, даже на этом форуме постоянно встречаются ссылки на код, положенный на рапидшару и т.п. Не говоря о rsdn.ru. Почему?
Потому что не нравится - не читайте. Или купите нормальный монитор Потому что нормальные люди если МОГУТ не писать, то НЕ пишут. А если пишут, то так, чтобы мысль донести в наиболее удобной форме, с форматированием, с подчеркиваниями, с выделением цветом, с зазипованными исходниками. Вон NotGonnaGetUs дал ссылку на нормальную полезную книгу и я ее уже скачал
...
Рейтинг: 0 / 0
Множественное наследование
    #34072359
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MatzumotoПоищите, даже на этом форуме постоянно встречаются ссылки на код, положенный на рапидшару и т.п. Не говоря о rsdn.ru.
Не нужно заблуждаться.
На RSDN дают ссылки, т.к. там идет обсуждение аналогичных тем и проще дать линк, чем переписывать тамошний текст.
А по поводу рапидшары - ни один адекватный человек не положит туда файл размером меньше n*10 метров. И уж текстам-примерам там делать совершенно нечего. Никто не будет сидеть две минуты и ждать очередного примера весом в 2 килобайта :) При том что следующий можно слить только через n-надцать минут

Matzumoto
А если пишут, то так, чтобы мысль донести в наиболее удобной форме, с форматированием, с подчеркиваниями, с выделением цветом, с зазипованными исходниками.
Мысль должна доноситься в виде грамотно сконструированных предложений. Выделения цветом, форматирование и подчеркивания - они только для исходников нужны. Исходники форматируются с помощью тега SRC (и, в принципе, терпимо). Что вас не устраивает - мне не понятно.
...
Рейтинг: 0 / 0
Множественное наследование
    #34072361
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MatzumotoNotGonnaGetUs дал ссылку на нормальную полезную книгу и я ее уже скачал

Вас не затруднит привети прямую ссылочку. Я-бы тоже скачал. И почитал с удовольствием.
...
Рейтинг: 0 / 0
Множественное наследование
    #34072513
Matzumoto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonВас не затруднит привети прямую ссылочку. Я-бы тоже скачал. И почитал с удовольствием.Первая же ссылка в гугле ftp:||files.zipsites.ru/books/programming/oop_osc2book.rar
...
Рейтинг: 0 / 0
Множественное наследование
    #34072529
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MatzumotoУ защитников же МН так и нет удачного примера, доказывающего, что без МН ГОРАЗДО хуже, чем с использованием его.
Забавная демагогия. Есть факт: для приведенного мной простейшего примера никто не привел адекватной SH-реализации. Из этого делается вывод: ".. так и не удачного примера, доказывающего .."

MatzumotoИ кстати, большие листинги выкладывать в тэге SRC - очень портит страницу и расширяет ее за всякие границы.
Присоединяюсь к точке зрения "купите нормальный монитор".

MatzumotoПонятно, да?
Чувак, ты форумом не ошибся?
...
Рейтинг: 0 / 0
Множественное наследование
    #34072638
Matzumoto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer MatzumotoПонятно, да?
Чувак, ты форумом не ошибся?Ошибся, да. Если тут находятся люди, отстаивающие пользу МН, то вероятно ошибся. Вы бы еще стали доказывать, что с goto в умелых руках программы можно писать, главное умело goto применять и не допускать ошибок.
...
Рейтинг: 0 / 0
Множественное наследование
    #34072680
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, сугубо для информации - программисты на Java регулярно применяют goto. Думаю, ты этого не поймешь, но break и continue - разновидности goto.
...
Рейтинг: 0 / 0
Множественное наследование
    #34072685
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerКстати, сугубо для информации - программисты на Java регулярно применяют goto. Думаю, ты этого не поймешь, но break и continue - разновидности goto.
И это мы еще не пытались говорить об exception'ах, которые вообще умеют гоутусить через такие расстояния, что никаких goto не снились :)
...
Рейтинг: 0 / 0
Множественное наследование
    #34072691
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exceptions - это не goto. Защищенный блок стоит рассматривать как неявную подпрограмму.
...
Рейтинг: 0 / 0
Множественное наследование
    #34072723
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
 public   void  one1()  throws  Exception{
  System.out.println("one");
   throw   new  Exception("throw"); // p.1
  System.out.println("one-one");
}

 public   void  two2()  throws  Exception{
  System.out.println("two");
  one1();
  System.out.println("two-two");
}


 public   void  three3() {
  try {
  System.out.println("three");
  two2();
  System.out.println("three-three");
 }  catch  (Exception e) {
  e.printStackTrace();
 }
}
Куда мы перейдем с // p.1 ?
...
Рейтинг: 0 / 0
Множественное наследование
    #34072726
Matzumoto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarerКстати, сугубо для информации - программисты на Java регулярно применяют goto. Думаю, ты этого не поймешь, но break и continue - разновидности goto.Да я и так это знаю, TiJ by Eckel читал. Но это - не классические goto.

Так же и интерфейсы - не классическое МН.

PS А еще в жабе const нет. А есть static final. И т.д. и т.п. Знаете, в жабе все есть, и если очень постараться можно и через goto написать и соорудить нечто напоминающее МН. Но для того и best practices, чтобы знать, что делать нельзя.
...
Рейтинг: 0 / 0
Множественное наследование
    #34072735
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
он жеКуда мы перейдем с // 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.
 private  Throwable currentException =  null ;

 public   void  one1()  throws  Exception {
  System.out.println("one");
  { currentException =  new  Exception("throw");  return ; } // p.1
  System.out.println("one-one");
}

 public   void  two2()  throws  Exception{
  System.out.println("two");
  one1();
  {  if  (currentException !=  null )  return ; }
  System.out.println("two-two");
}


 private   void  three3_internal()  throws  Exception {
  System.out.println("three");
  two2();
  {  if  (currentException !=  null )  return ; }
  System.out.println("three-three");
}

 public   void  three3() {
  three3_internal();
  {  if  (currentException ==  null )  return ; }
  e.printStackTrace();
  currentException =  null ;
}
...
Рейтинг: 0 / 0
Множественное наследование
    #34072747
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MatzumotoНо это - не классические goto.
Это удобный синтаксис для записи частного случая goto. Тем не менее, это все тот же goto, не соответствующий конструкциям структурного программирования.

MatzumotoТак же и интерфейсы - не классическое МН.
Уже лучше.

MatzumotoЗнаете, в жабе все есть, и если очень постараться можно и через goto написать и соорудить нечто напоминающее МН. Но для того и best practices, чтобы знать, что делать нельзя.
Все ж таки удивительно, как очевидна корреляция между специализацией и ориентацией шариков в мозгу.

Топикстартер задал один простой вопрос: объясните, чем так плохо MH, что в Java его не стали реализовывать. Два или три человека в первых постах упомянули возможные неприятности, чем разумные ответы "против" и завершились, дальше начала работать замечательная в своей логичности точка зрения "в Java его нет, этим оно и плохо".

Что любопытно, не так давно существовала еще одна очень похожая тема для священных войн - MSSQLщики в один голос объясняли, что версионность плоха и нафиг не нужна. Потом в MSSQL появилась версионность, и эти голоса тут же исчезли. Интересно, будет ли похожая судьба у наследования в Java.
...
Рейтинг: 0 / 0
Множественное наследование
    #34072759
bmv_rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да мож все попроще, мож Java выпускали второпях и времени нехватило на нормальную реализацию МН. :)
...
Рейтинг: 0 / 0
Множественное наследование
    #34072766
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bmv_rusДа мож все попроще, мож Java выпускали второпях и времени нехватило на нормальную реализацию МН. :)
Сомневаюсь. MH среди прочего плохо сочетается с концепцией "виртуальных по умолчанию" методов - классы-наследники будут разваливаться по любому чиху, придется каждый раз, модифицируя предка, просматривать всех потомков (!) в поисках методов, которые нежданно-негаданно станут реализациями унаследованных. Собственно, это представляет определенную проблему и при SH, но при MH будет просто бардак.
...
Рейтинг: 0 / 0
Множественное наследование
    #34073918
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ай, молодцы :)

И про передачу параметров вспомнили, и про идеальный язык дельфи, и С++-ников с гавном смешали. Знатный топик получился :)

Давайте, флейма ради, добавлю.

90% программистов (даже в java) не пользуются даже одиночным наследованием (обязательное наследование от специальных классов фреймвёрков в рассмотрение не берётся, т.к. делается на уровне "по другому нельзя"). Ещё 9% используют его "подмножествно" (да да: подмножество подмножества :)), а именно наследование от интерфейсов и наследование ради возможности осуществить полиморфный вызов (полностью описывается паттернами из разряда strategy или template method).
И только 1% программистов занимается задачами (разработка фреймворков, разработка для повторного использования, не тривиальные предметные области), где возникает реальная необходимость в применении чего-то отличного от инкапсуляции для борьбы со сложностью.

Т.о. 99% процентов программистов, рассуждая о наследовании, использует самодельные теории, которые никогда на практике не проверялись.
Откуда берутся эти теории?
Очевидно из открытых источников (таких как faq sun'a "почему в java нет множественного наследования?") и в соответствии с кругозором (в виде экспириенса в delphi/c++/qbasic (нужное подчеркнуть)).
Играет ли тут роль многолетний опыт работы? Скорее нет, чем да, т.к. всё зависит от самой работы (типа решаемых задач) и отношения к ней.

А что в итоге? Холивор :)
...
Рейтинг: 0 / 0
Множественное наследование
    #34073949
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUs90% программистов (даже в java) не пользуются даже одиночным наследованием
Да ладно Вам. У меня довольно низкое мнение о "среднем дельфере", но если верить Вам, выходит, что "средний явер" куда менее грамотен.

NB! Если я правильно понял, под "пользованием наследованием" Вы имеете в виду "унаследовать собственный класс от собственного же класса" - так?

NotGonnaGetUsИ только 1% программистов
Хм. Есть один заочно знакомый мне молодой парень. Несколько месяцев назад он поступил java-стажером в одну из софтверных фирм второго эшелона - уровня "не то чтобы постоянно на слуху, но если напрячь мозги, каждый третий вспомнит , что уже о ней слышал".

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

Видимо, он сходу вошел в этот 1%?
...
Рейтинг: 0 / 0
Множественное наследование
    #34074239
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer NotGonnaGetUs90% программистов (даже в java) не пользуются даже одиночным наследованием
Да ладно Вам. У меня довольно низкое мнение о "среднем дельфере", но если верить Вам, выходит, что "средний явер" куда менее грамотен.

NB! Если я правильно понял, под "пользованием наследованием" Вы имеете в виду "унаследовать собственный класс от собственного же класса" - так?

Я слегка гиперболизирую, чтобы мысль нашла более живой отклик, но суть именно какая. Только причина не столько в том, что "явер/дельфер/другое" не грамотный, а том, что задачи, где использование наследования не будет высосанным из пальца, встерчаются не так часто как может показаться.
И даже там, где использование наследования уместно, обычно достаточно одного "уровня" наследования, причём с явно обозаченной целью
(Сюда можно отнести создание "пограничных" классов/интерфейсов, через которые будует взаимодействовать различные части системы, определение родовых алгоритмов, конкретные детали которых задаются через наследования от классов с абстрактными методами или путём передачи объекта реализующего определённый интерфейс и т.п. Это, в общем-то частные, хотя и чрезвычайно полезные случаи применения наследования, которые имеют мало общего с понятием is-a или моделированием реальных отношений между сущностями предметной области)

К слову о пальце.
Наблюдал своими галазами иерархию глубиной(!) 20, отражащую, фактически, только классификацию контроллеров для обработки http-запросов.

softwarer
NotGonnaGetUsИ только 1% программистов
Дык вот, через месяц или два после начала его работы мы с ним вполне серьезно обсуждали структуру классов для выданной ему задачи. По его инициативе, и там было, над чем подумать.
Обсуждению, обычно, подлежит выделение сущностей и распределение между ними обязанностей для решения поставленной задачи. Само по себе наследование в этом процессе играет малую роль.

softwarerВидимо, он сходу вошел в этот 1%?
Согласно определению данному выше, в 1% входят те, кто решает достаточно сложные задачи. Значит, если ему дали такую задачу и он успешно с ней справился - значит вошёл :)
...
Рейтинг: 0 / 0
Множественное наследование
    #34074611
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Высосанные из пальца - согласен, бывают. Я помню код решения задачки "открыть шаблон вордовского файла, подставить значения из БД, записать", решенной с выделением таких объектов, как "оператор поиска места для модификации", "оператор осуществления модификации"....

Описывая такое вот "плоское программирование", Вы практически говорите о повседневном труде кодеров. По моим наблюдениям, большинство людей таки стремится из этого статуса вылезти, причем не только карьерно, но прежде всего фактически - по тем задачам, которые они пытаются на себя взять, подтягивают к себе, уговаривают.... Может быть это уже моя специфика - для меня "идеологический кодер, не желающий большего" является совершенно неинтересным сотрудником, но с моей точки зрения, реально стоит задача "подкидывать людям интересные задачки, иначе они огорчатся, будут плохо работать и в конце концов уйдут". И эти задачки - какие-то куски проектирования.

Ну а по вопросам, которые задаются в том же дельфовом форуме, я бы сказал, что многие таки реально сталкиваются с задачами наследования и пытаются их как-то решать.
...
Рейтинг: 0 / 0
Множественное наследование
    #34074897
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerОписывая такое вот "плоское программирование", Вы практически говорите о повседневном труде кодеров.

... но с моей точки зрения, реально стоит задача "подкидывать людям интересные задачки, иначе они огорчатся, будут плохо работать и в конце концов уйдут". И эти задачки - какие-то куски проектирования.


Я бы назвал это не "плоским", а "реальным" программированием.
Думаю никто не станет спорить, что именно так и обстоят дела в проектах занимающихся поддержкой или развитием существующих программных систем, и что таких проектов - большинство.
Опять же, каков процент "студентов" среди общего числа разработчиков и какие "куски проектирования" им можно давать? :)

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

Конечно, можно утверждать, что я не прав, потому что в той-то и той-то конторе (в хорошем смысле этого слова), пишут такой-то и такой-то классный софт (да ещё и с нуля) и что там работают только люди с немерянным опытом, способные с закрытыми глазами печатать килобайты хорошо спроектированных классов и т.д. и т.п..
Ну что ж. Рад если такое бывает :)
Однако, пока у нас не начнут готовить соответствующих специалистов в профильных учебных заведениях, такие story будут единичными исключениями подтверждающими правило.
...
Рейтинг: 0 / 0
Множественное наследование
    #34074959
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUsДумаю никто не станет спорить, что именно так и обстоят дела в проектах занимающихся поддержкой или развитием существующих программных систем, и что таких проектов - большинство.
Это слишком обширный класс задач, чтобы загонять его в столь узкие рамки, имхо. По моему опыту, "направление решения" и "вид результата" прежде всего определяется тем, кто именно решает задачу, и уже во вторую очередь - тем, какая именно задача решается.

NotGonnaGetUsОпять же, каков процент "студентов" среди общего числа разработчиков и какие "куски проектирования" им можно давать? :)
Это непростой вопрос. У многих "студентов" присутствует неподтвержденно высокое мнение о своих возможностях, соответственно желание взять большой кусок задачи...... некоторые таки его неплохо делают :)

Я бы сказал - в первую очередь давать "не очень важный кусок". Большой, если нужно, но такой, чтобы из-за его отсутствия или необходимости переделки не пострадали другие задачи.

Ну а дальше - вопрос не столько в том, "какие куски давать", сколько "насколько плотно и тщательно при этом контролировать".

NotGonnaGetUsПредлагаю так же, не делать тождества между "наследованием" и "проектированием".
Безусловно, не следует. Я в данном случае употребил проектирование исключительно как стадию, в ходе которой возникает желание отнаследовать.
...
Рейтинг: 0 / 0
Множественное наследование
    #34074985
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerПо моему опыту, "направление решения" и "вид результата" прежде всего определяется тем, кто именно решает задачу, и уже во вторую очередь - тем, какая именно задача решается.

Т.е. с оценкой 90% на 10% вы категорически не согласны? :)
...
Рейтинг: 0 / 0
Множественное наследование
    #34075025
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUsТ.е. с оценкой 90% на 10% вы категорически не согласны? :)
Я полагаю, что дисперсия этой оценки делает ее бессмысленной. Грубо говоря, есть люди, у которых будет 100/0, а есть люди, у которых будет 60/40. Для одних и тех же задач.
...
Рейтинг: 0 / 0
Множественное наследование
    #34075181
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerЯ полагаю, что дисперсия этой оценки делает ее бессмысленной. Грубо говоря, есть люди, у которых будет 100/0, а есть люди, у которых будет 60/40. Для одних и тех же задач.

Мы опять о несколько разном говорим.

Я считают программистов, которые решают задачи с применением очень ограниченных техник наследования и программистов, которым этих техник недостаточно, по причине сложности решаемых задач.

Примем в первом приближении, что глядя на задачу можно объективно оценить к какому из двух классов она принадлежит и что программисты решают каждую из этих задач надлежащим образом (не суют наследование туда, куда не нужно и используют там - где нужно).

Моё имхо, что отношение получится 90/10, из чего я делаю вывод, что среди людей обсуждающих наследование, и в особенности МН, преобладают люди не имевшие возможности на практике проверить истинность своих теорий.

Вы предлагаете посмотреть на то, как одни и теже задачи решают разные программисты и делаете вывод, что количество наследование в результате зависит в некоторой степени от программиста, а не задач.
Соглашусь, что это действительно так.
Но этот факт был мною ингорирован в первом приближении (см.выше), т.к. мне кажется очень вероятным значительное пересечение множества программистов склонных к более частому использованию наследования с множеством программистов решающих задачи действительно требующих применение наследования :)

Естественно серьёзно относиться к конкретным цифрам нельзя, т.к. для этого не собрано никакой сколько-нибудь объективной статистики. Тем не менее, порядок величин - 90/10, 80/20 - выглядит достаточно похожим на правду...
...
Рейтинг: 0 / 0
Множественное наследование
    #34075389
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUsПримем в первом приближении, что глядя на задачу можно объективно оценить к какому из двух классов она принадлежит
Именно это приближение я не готов принять. Точнее, я безусловно способен "объективно оценить" со своей колокольни, но абсолютно уверен в том, что при статистически значимой выборке оценивающих мы получим прорву других объективных оценок. При этом поставить эксперимент "чьи оценки в итоге окажутся точнее" весьма затруднительно.

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

NotGonnaGetUsМоё имхо, что отношение получится 90/10, из чего я делаю вывод, что среди людей обсуждающих наследование, и в особенности МН, преобладают люди не имевшие возможности на практике проверить истинность своих теорий.
Я существенно более оптимистичен. По нескольким причинам, из которых в первую очередь назову следующую: даже того, что Вы отнесли к 90%, на самом деле хватает, чтобы сделать многие верные выводы. Не обязательно учиться на собственных ошибках.

NotGonnaGetUsт.к. мне кажется очень вероятным значительное пересечение множества программистов склонных к более частому использованию наследования с множеством программистов решающих задачи действительно требующих применение наследования :)
Помимо прочего, я уверен в существовании широкого класса пограничных задач, то есть тех, для которых нельзя выбрать однозначно лучший вариант решения. Однозначно лучший - в смысле "компетентные эксперты единодушно выскажутся за этот вариант".
...
Рейтинг: 0 / 0
Множественное наследование
    #34076330
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что вы тут спорите? Ваще не понимаю. Надо б вначале научить людей мыслить в терминах ООП... без МН. а не кодить процедурно.
грязно плююсь от текущего колупания в лапше из if'ов и switch'ей
...
Рейтинг: 0 / 0
Множественное наследование
    #34076382
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TimmНадо б вначале научить людей мыслить в терминах ООП... без МН. а не кодить процедурно.
Для начала хорошо бы понимать, что ООП - это синтаксис, ничего нового в мышление оно не вносит. Ровно как break - удобный синтаксис записи частного случая goto, так и допустим виртуальный метод - удобный синтаксис записи частного случая указателя на функцию. Человек либо умеет выбирать адекватное решение - и выбирает его безотносительно ООП - либо не умеет, и получаем -

Timmгрязно плююсь от текущего колупания в лапше из if'ов и switch'ей
Именно что. Лапшу можно делать из ASSIGNABLE GOTO (была такая прелестная форма этого оператора), можно из ифоф и свитчей (я как-то на спор написал фрагмент программного кода в стиле "классическое спагетти", пользуюясь только и исключительно "структурными" if и while), ну а последние лет десять я периодически ругаюсь словами "объектно-ориентированное спагетти".
...
Рейтинг: 0 / 0
Множественное наследование
    #34076400
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer NotGonnaGetUsПримем в первом приближении, что глядя на задачу можно объективно оценить к какому из двух классов она принадлежит
Именно это приближение я не готов принять.

Ок. Ваше имхо построенное на личном опыте против аналогичного моего :)

softwarer
По нескольким причинам, из которых в первую очередь назову следующую: даже того, что Вы отнесли к 90%, на самом деле хватает, чтобы сделать многие верные выводы.
Ну да.
Этого хватает, чтобы корректно решаеть многие задачи, но не хватает, чтобы осмысленно рассуждать о наследовании самом по себе и множественном наследовании в частности.

Вспоминаю топик на другом форуме. Человек утверждал, что наследовать можно что угодно и от чего угодно (например, человека от руки или геометрическую фигуру от точки). При этом ссылки на LSP и т.п. он бодро игнорировал, заявляя, что раз он и никто из его сослуживцев не в курсе данного приниципа, то принимать его во внимание не стоит.

softwarer
Не обязательно учиться на собственных ошибках.

Я бы перефразировал: обязательно нужно учиться на чужих ошибках.
Т.е. нужно читать, нужно общаться с коллегами, нужно искать интересные решения в существующем коде.

Однако какова массовая доля программистов активно идущих этим путём? :)
Или, как пишет Марконелл: "спросите себя - сколько книг по программированию вы прочитали на последние полгода?".

softwarerОднозначно лучший - в смысле "компетентные эксперты единодушно выскажутся за этот вариант".
А другие компетентные эксперты скажут: "да ну ваше неповоротливое и тяжёловесное ООП в баню. Эрланг рулит" :) И будут в общем-то правы по своему.
Но это уже оффтопик :)
...
Рейтинг: 0 / 0
Множественное наследование
    #34076413
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer[quot Timm]Надо б вначале научить людей мыслить в терминах ООП... без МН. а не кодить процедурно.
Для начала хорошо бы понимать, что ООП - это синтаксис, ничего нового в мышление оно не вносит.
[quot]
ээ. не согласен. категорически. ООП - это не синтаксис. Синтаксис - это язык, в терминах которого человек выражает объедко-ориентированные мысли. о как :)
...
Рейтинг: 0 / 0
Множественное наследование
    #34076475
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TimmСинтаксис - это язык, в терминах которого человек выражает объедко-ориентированные мысли. о как :)
Как называть эти мысли - вопрос имхо десятый. Мне трудно называть "объектно-ориентированными" мысли, которые появились и были известны в семидесятых годах. Главное - понимать то, что есть мысли [сами по себе], есть форма их записи на конкретном языке. К сожалению, большинство авторов книг смешивает эти понятия, создавая разруху в головах.
...
Рейтинг: 0 / 0
Множественное наследование
    #34078705
AciD_v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Timm[quot softwarer]ООП - это не синтаксис. Синтаксис - это язык, в терминах которого человек выражает объедко-ориентированные мысли. о как :)
В отношнении мыслей ООП - это все-таки синтаксис. Если попытаться провести аналогию с шаблоном MVC, то мысли - это M и C, а объектно-ориентированные мысли - это V. Хотя кто-то со мной может не согласиться.

А вообще, я к тому, что все сравнения нужно проводить в пределах одного словаря с набором аксиом, и определения понятиям давать тоже в пределах этого словаря.
...
Рейтинг: 0 / 0
Множественное наследование
    #34079747
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читал, читал решил тоже свою лепту скромну внести.
1. МН - нельзя сказать, что это однозначно плохо (в принципе, ни о чем так сказать нельзя), но все таки я его буду стараться избегать или реализовывать через интерфейсы. Включения его в Java не хочу (хотя кто меня спросит).
2. ООП. Новая идеология или нет. Вирт считает, что нет. В одном из интервью он сказал, что-то вроде того
почти Вирт
Меня удивляет, когда про инкапсуляцию узнают только при начале работы с ООП.

Так, нам в ВУЗе давали эти понятия без использования принципов ООП. Хотя я к тому времени уже знал о нем и видел, что ООП позволяет их очень легко использовать (за что низкий поклон Сульповару из ЛЭТИ).
С другой стороны, я все-таки думаю, что думать на ООП можно. Тут получается другой стиль мышления, чем при линейном (так оно называется?) программирование. По крайне мере когда я писал курсовики своим одногруппникам, мне переходилось переключаться на другой стиль мышления (Я практически сразу стал писать с помощью объектов. Кстати, писал на Дельфи, а про объекты узнал из книги на Java. И еще потом лет 6 писал(пишу) на Дельфи).

Ну а на счет программистов, которые используют проектирование или нет. Кому что в жизни надо, тот это от жизни и берет. Вряд ли системному программисту, которые пишет встроенное ПО нужно ООП. Они вообще стараются на C писать (по крайне мере у нас, и про Nokia мне так говорили). С другой стороны, если человек хочет стать архитектором - он будет задумываться над архитектурой и искать разные решения.
...
Рейтинг: 0 / 0
Множественное наследование
    #34079809
Matzumoto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarerДля начала хорошо бы понимать, что ООП - это синтаксис, ничего нового в мышление оно не вносит. Атец, знаешь, с таким пониманием вопроса тебе не программистом надо быть, а артиллеристом. ООП - это не синтаксис и к синтаксису относится так же как к целлюлиту, т.е. ортогонально. В ОО стиле можно на асме писать и на лиспе, это МЕТОДОЛОГИЯ программирования, а никак уж не синтаксис. Методология, способствующая применению принципа "разделяй и властвуй", способствующая еще больше, чем структурное и процедурное программирование.

С ООП идет рука об руку ООД. Объектно-ориентированный дизайн программ.
...
Рейтинг: 0 / 0
Множественное наследование
    #34079991
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeonidvС другой стороны, я все-таки думаю, что думать на ООП можно. Тут получается другой стиль мышления, чем при линейном (так оно называется?) программирование.
Нет. Линейное программирование - это ну совсем другая тема, к "программированию в нашем смысле" относящаяся опосредованно: http://www.dvo.ru/studio/linpro/lp1st/node3.html

"Думать на ООП" в каком-то смысле можно, только это уже как минимум называется ООД. Да и то... впрочем, обсуждая эту тему, неизбежно упремся в понимание терминов?

LeonidvПо крайне мере когда я писал курсовики своим одногруппникам, мне переходилось переключаться на другой стиль мышления
Ээ... зачем? Не понял, Вы писали себе объектно, а им - нет?

Leonidv(Я практически сразу стал писать с помощью объектов. Кстати, писал на Дельфи, а про объекты узнал из книги на Java. И еще потом лет 6 писал(пишу) на Дельфи).
Увы, классическая история из серии "учил дельфу по плохой книге".

Мне в этом плане повезло, поскольку про объекты я узнал лет за восемь до появления явы.

LeonidvНу а на счет программистов, которые используют проектирование или нет. Кому что в жизни надо, тот это от жизни и берет. Вряд ли системному программисту, которые пишет встроенное ПО нужно ООП. Они вообще стараются на C писать
Хм. Подумайте еще раз: если ООП - это способ мышления, какая разница, на чем писать? Те идеи, которые ассимилировало ООП, как раз и привели к появлению Паскаля, Си, Ады; собственно, ООП по большому счету выросло из обобщения опыта работы на этих языках. Эти идеи отлично реализуются на ассемблере, на любом интерпретаторе, сугубые проблемы будут лишь на старых компиляторах типа Fortran IV или PL/I.

То, что Вы говорите, как раз служит иллюстрацией к "путанице между идеями и синтаксисом", о которой я говорил чуть раньше.

Признаться, меня всегда коробит, когда встроенное ПО относят к системному программированию, но это отдельный вопрос. Встроенное ПО бывает достаточно разным, и в нем наверняка можно назвать задачи, в которых ООП вполне применимо, хотя безусловно в большинстве случаев подход "узко и прямо".
...
Рейтинг: 0 / 0
Множественное наследование
    #34080295
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 писать

Хм. Подумайте еще раз: если ООП - это способ мышления, какая разница, на чем писать?

Разница все таки есть, потому как удобнее. Когда передо мной встает задача, я начинаю классы в голове рисовать и их взаимодействие - вот это и подразумеваю "думать на ООП". А уж как их реализовать - дело десятое. Вот мне говорят "матрица" - у меня сразу в голове класс представляется и его контракт. Ну и тому подобное.

А все-таки раскройте, что такое системное программирование? Интересно узнать.
...
Рейтинг: 0 / 0
Множественное наследование
    #34080371
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeonidvНе совсем понял, причем тут конкретный язык и ООП.
Ну вот. Для кого Blazkowicz о properties и hashtable вспоминал? :)
Конкретный язык, конкретно влияет на то "ООП", которое в нём используется.


Leonidv
Когда передо мной встает задача, я начинаю классы в голове рисовать и их взаимодействие - вот это и подразумеваю "думать на ООП". А уж как их реализовать - дело десятое. Вот мне говорят "матрица" - у меня сразу в голове класс представляется и его контракт. Ну и тому подобное.


Вспоминается фраза из утреннего шоу бачинского и стилавина:
- Ему в голову звёздый десант лезет! :)
...
Рейтинг: 0 / 0
Множественное наследование
    #34080422
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUs
Ну вот. Для кого Blazkowicz о properties и hashtable вспоминал? :)

Ну вы же не хотите сказать, что использование наследования вместо композиции там, где ему не место, в Java есть плохо, а в Delphi есть хорошо?
...
Рейтинг: 0 / 0
Множественное наследование
    #34080430
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonidv NotGonnaGetUs
Ну вот. Для кого Blazkowicz о properties и hashtable вспоминал? :)

Ну вы же не хотите сказать, что использование наследования вместо композиции там, где ему не место, в Java есть плохо, а в Delphi есть хорошо?

Я хочу сказать, что использование наследование в данном случае для C++ будет хорошо, а для java плохо.
...
Рейтинг: 0 / 0
Множественное наследование
    #34080472
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не большой специалист по этим вопросам (пока), но мне кажется - что это везде плохо. Как на Java, так на C++, так и на Delphi. По крайне мере когда Блох объясняет это в своей книги, он говорит "вот так делать не надо", а не "на Java так делать не надо".
...
Рейтинг: 0 / 0
Множественное наследование
    #34080539
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeonidvЯ не большой специалист по этим вопросам (пока), но мне кажется - что это везде плохо. Как на Java, так на C++, так и на Delphi. По крайне мере когда Блох объясняет это в своей книги, он говорит "вот так делать не надо", а не "на Java так делать не надо".

На Блоха теперь нужно молиться?
Он написал одну маленьку книжечку, где на пальцах показал некоторые особенности реализации java библиотек из-за чего стал популярен. При этом он поливал дерьмом всё, что писал не он сам, и хвалил собственные творения (коллекции java2).

Возвращаясь в properties.
Если бы вы внимательно читали о чём писалось выше, вы бы увидели и слова софтварера и мои, где объявняется почему в java это плохое решение.

Ещё раз: в java нет закрытого наследования, т.е. нельзя отнаследоваться и скрыть от публики часть методов родителя. Поэтому приходится изобретать делегирование. Это всё следствия особенностей оо-нотации принятой в java и к ООП имеет мало отношения.
...
Рейтинг: 0 / 0
Множественное наследование
    #34080851
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что такое скрытое наследование?
Я так понимаю, что если A наследуется от B, то везде где нужен B можно подставить A. Если я правильно понял, то скрытое наследование это правило нарушает?
...
Рейтинг: 0 / 0
Множественное наследование
    #34080896
АСУ ТПшник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поддерживаю вопрос.
...
Рейтинг: 0 / 0
Множественное наследование
    #34080913
АСУ ТПшник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и вообще, пользуйте private, а то понимаешь развели семейственность в лучших традициях мафиози - ты мой старший сын, тебе рулить песочницей, а ты сын моего сына, нехрена тебе песочницей рулить :)

Для особо рьяных: это была шутка.
...
Рейтинг: 0 / 0
Множественное наследование
    #34081007
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АСУ ТПшникДля особо рьяных: это была шутка.
Специфический птушный юмор?

Leonidv
А что такое скрытое наследование?

Мне повторить абзац из предыдущего сообщения?

Остановись на секундочку и подумай: если ты не знаешь, что бывает скрытое наследование, не в курсе того, как могут разрешаться "конфликты" при МН, то как ты можешь говорить о том, что ООП существует вне контекста языка программирования и более того, что ты думаешь именно в его терминах?!
...
Рейтинг: 0 / 0
Множественное наследование
    #34081063
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Повторите. А лучше все-таки разъясните, что происходит в описанном мною случае?
...
Рейтинг: 0 / 0
Множественное наследование
    #34081582
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
...
Рейтинг: 0 / 0
127 сообщений из 127, показаны все 6 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Множественное наследование
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]