Множественное наследование
От: Leshi Россия  
Дата: 16.03.05 10:00
Оценка:
Мне тут понадобилось переписать заново одну старую програмулину (написанную на С++). И я занялся изучением новомодных тенденций. Хотелось идти в ногу со временем и использовать что-то современное (ладно, кандидатами были C# и Java). Но беда заключается в том, что в старом коде используется множественное наследование почти везде. В двух словах, там есть несколько базовых функционалов (десятка три), реализованных своими классами. А рабочие классы используют то, что им надо (обычно от 5 до 15 родителей) и переопределяют некоторые операции. Так вот возник вопрос, как же без множественного наследования люди обходятся? Поделитесь опытом

ЗЫ: Вопрос о выборе средства разработки уже не стоит, С++ однозначно.
... << RSDN@Home 1.1.3 stable >>
Re: Множественное наследование
От: _Obelisk_ Россия http://www.ibm.com
Дата: 16.03.05 10:03
Оценка:
Здравствуйте, Leshi, Вы писали:

L>Мне тут понадобилось переписать заново одну старую програмулину (написанную на С++). И я занялся изучением новомодных тенденций. Хотелось идти в ногу со временем и использовать что-то современное (ладно, кандидатами были C# и Java). Но беда заключается в том, что в старом коде используется множественное наследование почти везде. В двух словах, там есть несколько базовых функционалов (десятка три), реализованных своими классами. А рабочие классы используют то, что им надо (обычно от 5 до 15 родителей) и переопределяют некоторые операции. Так вот возник вопрос, как же без множественного наследования люди обходятся? Поделитесь опытом


L>ЗЫ: Вопрос о выборе средства разработки уже не стоит, С++ однозначно.



Дык если язык разработки будет С++ то зачем отказываться от множественного наследования ?



Душа обязана трудиться! (с) Н.Заболоцкий.
Re: Множественное наследование
От: Banch  
Дата: 16.03.05 10:26
Оценка:
L>Так вот возник вопрос, как же без множественного наследования люди обходятся? Поделитесь опытом

— использовать интерфейсы
— хорошо проектировать иерархию наследования
— использовать включение классов с нужным функционалом и переадресацию вызовов на них (интерфейсы скрывают это от пользователей класса)
— ну и приходиться извращаться — использовать неявные преобразования, reflection

вобщем бывает тяжело без множественного наследования, но в большинстве случаев жить можно
Re[2]: Множественное наследование
От: Leshi Россия  
Дата: 16.03.05 10:43
Оценка:
Здравствуйте, _Obelisk_, Вы писали:

_O_>Дык если язык разработки будет С++ то зачем отказываться от множественного наследования ?

Дык поэтому и С++, что остальное без множественного наследования.
... << RSDN@Home 1.1.3 stable >>
Re[2]: Множественное наследование
От: Leshi Россия  
Дата: 16.03.05 10:45
Оценка:
Здравствуйте, Banch, Вы писали:

L>>Так вот возник вопрос, как же без множественного наследования люди обходятся? Поделитесь опытом


B>- использовать интерфейсы

В данном случае интерфейсы описывают только что делать, а уж как приходится думать в реализации. Это, как бы это по-мягче, неудобно.
B>- хорошо проектировать иерархию наследования
Хорошо уже не получается, приходится думать о том, куда это все запихать. Ведь если, допустим, у меня есть функционал записи на диск и функционал записи в базу данных это же две разные вещи. Объединять их в один класс нет надобности, а придется
B>- использовать включение классов с нужным функционалом и переадресацию вызовов на них (интерфейсы скрывают это от пользователей класса)
Это, кажется, называется изврат?
B>- ну и приходиться извращаться — использовать неявные преобразования, reflection

B>вобщем бывает тяжело без множественного наследования, но в большинстве случаев жить можно

Ну не понимаю я, почему в таком случае C# и Java так рьяно отстаиваются их сторонниками. Это же сырые язяки получаются... (ща побъют)
... << RSDN@Home 1.1.3 stable >>
Re[3]: Zonnon
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 16.03.05 11:16
Оценка: -2 :))) :))) :))) :))) :))
Здравствуйте, Leshi, Вы писали:

B>>вобщем бывает тяжело без множественного наследования, но в большинстве случаев жить можно


L>Ну не понимаю я, почему в таком случае C# и Java так рьяно отстаиваются их сторонниками. Это же сырые язяки получаются... (ща побъют)


C# и Java — скоро станут устаревшими. Обратите внимание, например, на язык Zonnon (это потомок от языка Active Oberon for .NET). Там множественное наследование есть! Просто создатели C# и Java выплеснули вместе с водой и ребенка открестившись от множественного наследования в пользу интерфейсов испугавшись сложностей реализации множественного наследования в языке С++. Но, дело в том, что множественное наследование и язык С++ это вовсе не близнецы-братья, а разные вещи. Множественное наследование можно реализовать подругому, не так как в С++. В результате все вкусности множественного наследования в языке Zonnon присутствуют, в тоже самое время нет ни одного недостатка множественного наследования присущих реализации оного в С++.
Re[3]: Множественное наследование
От: LuciferMoscow Россия  
Дата: 16.03.05 11:21
Оценка:
Здравствуйте, Leshi.

Как часто ты используешь множественное наследование? Думаю далеко не в каждом проекте. Лично мне приходилось сталкиватся с ним <=2 раз за три года
Re[3]: Множественное наследование
От: Кодт Россия  
Дата: 16.03.05 11:22
Оценка:
Здравствуйте, Leshi, Вы писали:

B>>- использовать интерфейсы

L>В данном случае интерфейсы описывают только что делать, а уж как приходится думать в реализации. Это, как бы это по-мягче, неудобно.
B>>- хорошо проектировать иерархию наследования
L>Хорошо уже не получается, приходится думать о том, куда это все запихать. Ведь если, допустим, у меня есть функционал записи на диск и функционал записи в базу данных это же две разные вещи. Объединять их в один класс нет надобности, а придется
B>>- использовать включение классов с нужным функционалом и переадресацию вызовов на них (интерфейсы скрывают это от пользователей класса)
L>Это, кажется, называется изврат?

Это называется агрегирование. Через него делается множественное как-бы-наследование в COM.
Перекуём баги на фичи!
Re: Множественное наследование
От: WFrag США  
Дата: 16.03.05 11:27
Оценка:
Здравствуйте, Leshi, Вы писали:

L>Мне тут понадобилось переписать заново одну старую програмулину (написанную на С++). И я занялся изучением новомодных тенденций. Хотелось идти в ногу со временем и использовать что-то современное (ладно, кандидатами были C# и Java). Но беда заключается в том, что в старом коде используется множественное наследование почти везде. В двух словах, там есть несколько базовых функционалов (десятка три), реализованных своими классами. А рабочие классы используют то, что им надо (обычно от 5 до 15 родителей) и переопределяют некоторые операции. Так вот возник вопрос, как же без множественного наследования люди обходятся? Поделитесь опытом


Как я обхожусь в Java: куча мелких компонентиков и Spring, их связывающий. Соответственно, вместо сильной зависимости наследование активно используется более слабая — композиция.
Re[4]: Множественное наследование
От: Leshi Россия  
Дата: 16.03.05 11:28
Оценка:
Здравствуйте, LuciferMoscow, Вы писали:

LM>Как часто ты используешь множественное наследование? Думаю далеко не в каждом проекте. Лично мне приходилось сталкиватся с ним <=2 раз за три года

За 10 лет у меня небыло ни одного проекта, где я не использовал бы множественного наследования. Хотя я слонен считать это стилем программирования (который обсуждать не буду)
... << RSDN@Home 1.1.3 stable >>
Re[4]: Zonnon
От: Leshi Россия  
Дата: 16.03.05 11:51
Оценка: :))
Здравствуйте, Сергей Губанов, Вы писали:

СГ>C# и Java — скоро станут устаревшими.

Смело...
СГ>Обратите внимание, например, на язык Zonnon
Маленький для меня. Лет через пять можно будет подумать. Вкладывать в него ресурсы (время и деньги) кажется мне слишком рисковым. Мне нужен более или менее успешний в коммерческом плане язык. Так что пока поищем (но не слишком уж активно) альнернативу С++ в других местах.
... << RSDN@Home 1.1.3 stable >>
Re[5]: Zonnon
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 16.03.05 12:54
Оценка: +1
Leshi пишет:
> СГ>Обратите внимание, например, на язык Zonnon <http://www.zonnon.ethz.ch/&gt;
> Маленький для меня. Лет через пять можно будет подумать. Вкладывать в
> него ресурсы (время и деньги) кажется мне слишком рисковым. Мне нужен
> более или менее успешний в коммерческом плане язык. Так что пока поищем
> (но не слишком уж активно) альнернативу С++ в других местах.

Ну, в Eifell есть множественное наследование. Он есть для .Net.

--
Andrei N.Sobchuck
JabberID: andreis@jabber.ru. ICQ UIN: 46466235.
Posted via RSDN NNTP Server 1.9
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[4]: Zonnon
От: Cyberax Марс  
Дата: 16.03.05 13:22
Оценка: 1 (1)
Сергей Губанов пишет:

> L>Ну не понимаю я, почему в таком случае C# и Java так рьяно

> отстаиваются их сторонниками. Это же сырые язяки получаются... (ща побъют)
> C# и Java — скоро станут устаревшими. Обратите внимание, например, на
> язык Zonnon <http://www.zonnon.ethz.ch/&gt; (это потомок от языка Active
> Oberon for .NET). *Там множественное наследование есть!*

Которое является просто синтаксическим сахаром над интерфейсами. Ни
Java, ни .NET не запрещают использовать множественное наследование, они
лишь запрещают множественное наследование классов на уровне CLI.
Множественно наследование на уровне прикладного языка замечательно
выражается с помощью интерфейсов.

Для примера: http://kiev.forestro.com/kiev-body.html — в нем MH было в
97 году. Язык компилируется в Java bytecode.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[4]: Множественное наследование
От: prVovik Россия  
Дата: 16.03.05 13:46
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Это называется агрегирование.

Точнее, делегирование...
... << RSDN@Home 1.1.4 @@subversion >>
лэт ми спик фром май харт
Re[5]: Множественное наследование
От: softilium Россия http://www.pristroy.com
Дата: 16.03.05 14:55
Оценка:
Здравствуйте, prVovik, Вы писали:

К>>Это называется агрегирование.

V>Точнее, делегирование...

Таки агрегирование! Именно агрегирование в связке с интерфейсами (или даже без них) является заменой (а точнее эквивалентом) множествунному наследованию.
Re[6]: Множественное наследование
От: prVovik Россия  
Дата: 16.03.05 16:51
Оценка:
Здравствуйте, softilium, Вы писали:

S>Таки агрегирование! Именно агрегирование в связке с интерфейсами (или даже без них) является заменой (а точнее эквивалентом) множествунному наследованию.

точно, точно...
... << RSDN@Home 1.1.4 @@subversion >>
лэт ми спик фром май харт
Re[6]: Zonnon
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.03.05 00:32
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:

ANS>Ну, в Eifell есть множественное наследование. Он есть для .Net.


Проблемы тоже есть. Реализация не компонентная. По сути просто создается третий класс в который копируются два базовых.
... << RSDN@Home 1.1.4 beta 4 rev. 359>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Zonnon
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 17.03.05 08:02
Оценка:
VladD2 пишет:
> ANS>Ну, в Eifell есть множественное наследование. Он есть для .Net.
>
> Проблемы тоже есть. Реализация не компонентная. По сути просто создается
> третий класс в который копируются два базовых.

Это почему не компонентная? Как по мне, то реализация вполне нормальная.

--
Andrei N.Sobchuck
JabberID: andreis@jabber.ru. ICQ UIN: 46466235.
Posted via RSDN NNTP Server 1.9
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re: Множественное наследование
От: LuciferMoscow Россия  
Дата: 17.03.05 08:09
Оценка:
Здравствуйте, Leshi, можешь привести пример, где не обойтись без множественного наследования? Наиболее реальный
Re[2]: Множественное наследование
От: Leshi Россия  
Дата: 17.03.05 08:18
Оценка:
Здравствуйте, LuciferMoscow, Вы писали:

LM>Здравствуйте, Leshi, можешь привести пример, где не обойтись без множественного наследования? Наиболее реальный

Я могу привести пример, где множественное наследование будет самым элегантным способом. Я даже не пытаюсь спорить о том, что без множественного наследования нельзя обойтись. Вконце концов в машинном коде понятия объект вообще не существует
... << RSDN@Home 1.1.3 stable >>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.