Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Множественное наследование. (число прочтений - 8237 )
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Множественное наследование.
01. Июня 2006 :: 10:57
Печать  
Считаете ли вы корректным использование множественного наследования?
Ответ обоснуйте.
  
Наверх
www  
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Множественное наследование.
Ответ #1 - 01. Июня 2006 :: 11:28
Печать  
Объедини с ромбовидным наследованием. Или обоснуй разделение вопросов на разные ветки.
Смех
  

FormEx developer
Наверх
www  
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Множественное наследование.
Ответ #2 - 01. Июня 2006 :: 11:30
Печать  
Согласен. Пока дело не доходит до ромбовидного наследования, множественное наследование - весьма хорошая штука.
  
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Множественное наследование.
Ответ #3 - 01. Июня 2006 :: 11:30
Печать  
В джаве можно унаследовать реализацию только от одного класса.
Интерфейсов унаследовать (от абстрактных классов) можно сколько угодно.

Джабберы считают это хорошим стилем.
  
Наверх
www  
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Множественное наследование.
Ответ #4 - 01. Июня 2006 :: 11:31
Печать  
fez писал(а) 01. Июня 2006 :: 11:30:
Джабберы считают это хорошим стилем.


В том то и дело, что это устраняет ромбовидное наследование на корню.
  
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Множественное наследование.
Ответ #5 - 01. Июня 2006 :: 11:36
Печать  
sedmin писал(а) 01. Июня 2006 :: 11:31:
fez писал(а) 01. Июня 2006 :: 11:30:
Джабберы считают это хорошим стилем.


В том то и дело, что это устраняет ромбовидное наследование на корню.

То есть твой ответ таков:

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

Я правильно тебя понял?
  
Наверх
www  
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Множественное наследование.
Ответ #6 - 01. Июня 2006 :: 11:44
Печать  
fez писал(а) 01. Июня 2006 :: 11:30:
В джаве можно унаследовать реализацию только от одного класса.
Интерфейсов унаследовать (от абстрактных классов) можно сколько угодно.

Джабберы считают это хорошим стилем.

Не убедительно.
  

FormEx developer
Наверх
www  
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Множественное наследование.
Ответ #7 - 01. Июня 2006 :: 11:47
Печать  
Цитата:
Не убедительно.

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

До сих пор неубедительно? Обоснуй Улыбка
  
Наверх
www  
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Множественное наследование.
Ответ #8 - 01. Июня 2006 :: 11:51
Печать  
Так считают джабберы. И я, в принципе, с ними согласен.

Хотя несколько не так. Не "провоцирует". А вот так:

Если уж добавил в язык множественное наследование, то будь добр, решай проблемы ромбовидного наследования. Они посмотрели на С++ и отказались от него (наследования).
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Множественное наследование.
Ответ #9 - 01. Июня 2006 :: 13:44
Печать  
fez писал(а) 01. Июня 2006 :: 11:30:
В джаве можно унаследовать реализацию только от одного класса.
Интерфейсов унаследовать (от абстрактных классов) можно сколько угодно.
Джабберы считают это хорошим стилем.

Так считают не только джабберы, но и разработчики .NET
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Множественное наследование.
Ответ #10 - 01. Июня 2006 :: 17:34
Печать  
ОК, почитаем классиков
Буч (Ч. I гл. 3)

Лирика
Цитата:
Небходимость множественного наследования в ООП остается предметом горячих споров (это он о нас, прим. ред.). По нашему опыту, множественное наследование - как парашют: как правило, он не нужен, но, когда вдруг он понадобится, будет жаль, если его не окажется под рукой.


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


Проблемы
Цитата:
Проектирование структур классов с множественным наследованием - трудная задача, решаемая путем последовательных приближений. Есть две специфические проблемы - как разрешить конфликты имен между суперклассами и что делать с повторным наследованием.


Решения
Цитата:
Борются с этим конфликтом тремя способами. Во-первых, можно считать конфликт имен ошибкой и отвергать его при компиляции (так делают Smalltalk и Eiffel). Во-вторых, можно считать, что одинаковые имена означают одинаковый атрибут (так делает CLOS). В третих, для устранения конфликта разрешается добавить к именам префиксы, указывающие имена классов, откуда они пришли. Такой подход принят в С++".


Ромбы
Цитата:
Проблема повторного наследования решается тремя способами.
Во-первых, можно его запретить, отслеживая при компиляции. Так сделано в языках Smalltalk и Eiffel. Во-вторых, можно явно развести две копии унаследованного элемента, добавляя к именам префиксы в виде имени класса-источника (это один из подходов, принятых в C++). В третьих, можно рассматривать множественные ссылки на один и тот же класс, кок обозначающие один и тот же класс. Так поступают в C++, где повторяющийся суперкласс определяется как виртуальный базовый класс. Виртуальный базовый класс появляется, когда какой-либо подкласс именует другой класс своим суперклассом и отмечает этот суперкласс как виртуальный, чтобы показать, что это - общий (shared) класс.

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

Ну и т.д.
Про жаву мы уже знаем.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Множественное наследование.
Ответ #11 - 01. Июня 2006 :: 17:54
Печать  
Эх, все же не зря именно SmallTalk и Eiffel считаются эталонами ООП. А совсем не С++.
  
Наверх
www  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Множественное наследование.
Ответ #12 - 01. Июня 2006 :: 18:11
Печать  
Мда. Но почему-то С++ прижился, а Smalltalk нет.
Ну я, правда, не спец тут в языкознании.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать